Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright 2011, The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *     http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  *
     16  * THIS FILE WAS GENERATED BY A SCRIPT. DO NOT EDIT.
     17  */
     18 
     19 #include <cutils/log.h>
     20 #include <utils/Timers.h>
     21 
     22 #include "gltrace.pb.h"
     23 #include "gltrace_context.h"
     24 #include "gltrace_fixup.h"
     25 #include "gltrace_transport.h"
     26 
     27 namespace android {
     28 namespace gltrace {
     29 
     30 // Definitions for GL2 APIs
     31 
     32 void GLTrace_glActiveTexture(GLenum texture) {
     33     GLMessage glmsg;
     34     GLTraceContext *glContext = getGLTraceContext();
     35 
     36     glmsg.set_function(GLMessage::glActiveTexture);
     37 
     38     // copy argument texture
     39     GLMessage_DataType *arg_texture = glmsg.add_args();
     40     arg_texture->set_isarray(false);
     41     arg_texture->set_type(GLMessage::DataType::ENUM);
     42     arg_texture->add_intvalue((int)texture);
     43 
     44     // call function
     45     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
     46     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
     47     glContext->hooks->gl.glActiveTexture(texture);
     48     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
     49     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
     50 
     51     void *pointerArgs[] = {
     52     };
     53 
     54     fixupGLMessage(glContext, wallStartTime, wallEndTime,
     55                               threadStartTime, threadEndTime,
     56                               &glmsg, pointerArgs);
     57     glContext->traceGLMessage(&glmsg);
     58 }
     59 
     60 void GLTrace_glAttachShader(GLuint program, GLuint shader) {
     61     GLMessage glmsg;
     62     GLTraceContext *glContext = getGLTraceContext();
     63 
     64     glmsg.set_function(GLMessage::glAttachShader);
     65 
     66     // copy argument program
     67     GLMessage_DataType *arg_program = glmsg.add_args();
     68     arg_program->set_isarray(false);
     69     arg_program->set_type(GLMessage::DataType::INT);
     70     arg_program->add_intvalue(program);
     71 
     72     // copy argument shader
     73     GLMessage_DataType *arg_shader = glmsg.add_args();
     74     arg_shader->set_isarray(false);
     75     arg_shader->set_type(GLMessage::DataType::INT);
     76     arg_shader->add_intvalue(shader);
     77 
     78     // call function
     79     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
     80     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
     81     glContext->hooks->gl.glAttachShader(program, shader);
     82     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
     83     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
     84 
     85     void *pointerArgs[] = {
     86     };
     87 
     88     fixupGLMessage(glContext, wallStartTime, wallEndTime,
     89                               threadStartTime, threadEndTime,
     90                               &glmsg, pointerArgs);
     91     glContext->traceGLMessage(&glmsg);
     92 }
     93 
     94 void GLTrace_glBindAttribLocation(GLuint program, GLuint index, const GLchar * name) {
     95     GLMessage glmsg;
     96     GLTraceContext *glContext = getGLTraceContext();
     97 
     98     glmsg.set_function(GLMessage::glBindAttribLocation);
     99 
    100     // copy argument program
    101     GLMessage_DataType *arg_program = glmsg.add_args();
    102     arg_program->set_isarray(false);
    103     arg_program->set_type(GLMessage::DataType::INT);
    104     arg_program->add_intvalue(program);
    105 
    106     // copy argument index
    107     GLMessage_DataType *arg_index = glmsg.add_args();
    108     arg_index->set_isarray(false);
    109     arg_index->set_type(GLMessage::DataType::INT);
    110     arg_index->add_intvalue(index);
    111 
    112     // copy argument name
    113     GLMessage_DataType *arg_name = glmsg.add_args();
    114     arg_name->set_isarray(false);
    115     arg_name->set_type(GLMessage::DataType::INT64);
    116     arg_name->add_int64value((uintptr_t)name);
    117 
    118     // call function
    119     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    120     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    121     glContext->hooks->gl.glBindAttribLocation(program, index, name);
    122     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    123     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    124 
    125     void *pointerArgs[] = {
    126         (void *) name,
    127     };
    128 
    129     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    130                               threadStartTime, threadEndTime,
    131                               &glmsg, pointerArgs);
    132     glContext->traceGLMessage(&glmsg);
    133 }
    134 
    135 void GLTrace_glBindBuffer(GLenum target, GLuint buffer) {
    136     GLMessage glmsg;
    137     GLTraceContext *glContext = getGLTraceContext();
    138 
    139     glmsg.set_function(GLMessage::glBindBuffer);
    140 
    141     // copy argument target
    142     GLMessage_DataType *arg_target = glmsg.add_args();
    143     arg_target->set_isarray(false);
    144     arg_target->set_type(GLMessage::DataType::ENUM);
    145     arg_target->add_intvalue((int)target);
    146 
    147     // copy argument buffer
    148     GLMessage_DataType *arg_buffer = glmsg.add_args();
    149     arg_buffer->set_isarray(false);
    150     arg_buffer->set_type(GLMessage::DataType::INT);
    151     arg_buffer->add_intvalue(buffer);
    152 
    153     // call function
    154     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    155     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    156     glContext->hooks->gl.glBindBuffer(target, buffer);
    157     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    158     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    159 
    160     void *pointerArgs[] = {
    161     };
    162 
    163     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    164                               threadStartTime, threadEndTime,
    165                               &glmsg, pointerArgs);
    166     glContext->traceGLMessage(&glmsg);
    167 }
    168 
    169 void GLTrace_glBindFramebuffer(GLenum target, GLuint framebuffer) {
    170     GLMessage glmsg;
    171     GLTraceContext *glContext = getGLTraceContext();
    172 
    173     glmsg.set_function(GLMessage::glBindFramebuffer);
    174 
    175     // copy argument target
    176     GLMessage_DataType *arg_target = glmsg.add_args();
    177     arg_target->set_isarray(false);
    178     arg_target->set_type(GLMessage::DataType::ENUM);
    179     arg_target->add_intvalue((int)target);
    180 
    181     // copy argument framebuffer
    182     GLMessage_DataType *arg_framebuffer = glmsg.add_args();
    183     arg_framebuffer->set_isarray(false);
    184     arg_framebuffer->set_type(GLMessage::DataType::INT);
    185     arg_framebuffer->add_intvalue(framebuffer);
    186 
    187     // call function
    188     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    189     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    190     glContext->hooks->gl.glBindFramebuffer(target, framebuffer);
    191     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    192     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    193 
    194     void *pointerArgs[] = {
    195     };
    196 
    197     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    198                               threadStartTime, threadEndTime,
    199                               &glmsg, pointerArgs);
    200     glContext->traceGLMessage(&glmsg);
    201 }
    202 
    203 void GLTrace_glBindRenderbuffer(GLenum target, GLuint renderbuffer) {
    204     GLMessage glmsg;
    205     GLTraceContext *glContext = getGLTraceContext();
    206 
    207     glmsg.set_function(GLMessage::glBindRenderbuffer);
    208 
    209     // copy argument target
    210     GLMessage_DataType *arg_target = glmsg.add_args();
    211     arg_target->set_isarray(false);
    212     arg_target->set_type(GLMessage::DataType::ENUM);
    213     arg_target->add_intvalue((int)target);
    214 
    215     // copy argument renderbuffer
    216     GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
    217     arg_renderbuffer->set_isarray(false);
    218     arg_renderbuffer->set_type(GLMessage::DataType::INT);
    219     arg_renderbuffer->add_intvalue(renderbuffer);
    220 
    221     // call function
    222     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    223     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    224     glContext->hooks->gl.glBindRenderbuffer(target, renderbuffer);
    225     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    226     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    227 
    228     void *pointerArgs[] = {
    229     };
    230 
    231     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    232                               threadStartTime, threadEndTime,
    233                               &glmsg, pointerArgs);
    234     glContext->traceGLMessage(&glmsg);
    235 }
    236 
    237 void GLTrace_glBindTexture(GLenum target, GLuint texture) {
    238     GLMessage glmsg;
    239     GLTraceContext *glContext = getGLTraceContext();
    240 
    241     glmsg.set_function(GLMessage::glBindTexture);
    242 
    243     // copy argument target
    244     GLMessage_DataType *arg_target = glmsg.add_args();
    245     arg_target->set_isarray(false);
    246     arg_target->set_type(GLMessage::DataType::ENUM);
    247     arg_target->add_intvalue((int)target);
    248 
    249     // copy argument texture
    250     GLMessage_DataType *arg_texture = glmsg.add_args();
    251     arg_texture->set_isarray(false);
    252     arg_texture->set_type(GLMessage::DataType::INT);
    253     arg_texture->add_intvalue(texture);
    254 
    255     // call function
    256     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    257     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    258     glContext->hooks->gl.glBindTexture(target, texture);
    259     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    260     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    261 
    262     void *pointerArgs[] = {
    263     };
    264 
    265     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    266                               threadStartTime, threadEndTime,
    267                               &glmsg, pointerArgs);
    268     glContext->traceGLMessage(&glmsg);
    269 }
    270 
    271 void GLTrace_glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
    272     GLMessage glmsg;
    273     GLTraceContext *glContext = getGLTraceContext();
    274 
    275     glmsg.set_function(GLMessage::glBlendColor);
    276 
    277     // copy argument red
    278     GLMessage_DataType *arg_red = glmsg.add_args();
    279     arg_red->set_isarray(false);
    280     arg_red->set_type(GLMessage::DataType::FLOAT);
    281     arg_red->add_floatvalue(red);
    282 
    283     // copy argument green
    284     GLMessage_DataType *arg_green = glmsg.add_args();
    285     arg_green->set_isarray(false);
    286     arg_green->set_type(GLMessage::DataType::FLOAT);
    287     arg_green->add_floatvalue(green);
    288 
    289     // copy argument blue
    290     GLMessage_DataType *arg_blue = glmsg.add_args();
    291     arg_blue->set_isarray(false);
    292     arg_blue->set_type(GLMessage::DataType::FLOAT);
    293     arg_blue->add_floatvalue(blue);
    294 
    295     // copy argument alpha
    296     GLMessage_DataType *arg_alpha = glmsg.add_args();
    297     arg_alpha->set_isarray(false);
    298     arg_alpha->set_type(GLMessage::DataType::FLOAT);
    299     arg_alpha->add_floatvalue(alpha);
    300 
    301     // call function
    302     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    303     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    304     glContext->hooks->gl.glBlendColor(red, green, blue, alpha);
    305     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    306     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    307 
    308     void *pointerArgs[] = {
    309     };
    310 
    311     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    312                               threadStartTime, threadEndTime,
    313                               &glmsg, pointerArgs);
    314     glContext->traceGLMessage(&glmsg);
    315 }
    316 
    317 void GLTrace_glBlendEquation(GLenum mode) {
    318     GLMessage glmsg;
    319     GLTraceContext *glContext = getGLTraceContext();
    320 
    321     glmsg.set_function(GLMessage::glBlendEquation);
    322 
    323     // copy argument mode
    324     GLMessage_DataType *arg_mode = glmsg.add_args();
    325     arg_mode->set_isarray(false);
    326     arg_mode->set_type(GLMessage::DataType::ENUM);
    327     arg_mode->add_intvalue((int)mode);
    328 
    329     // call function
    330     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    331     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    332     glContext->hooks->gl.glBlendEquation(mode);
    333     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    334     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    335 
    336     void *pointerArgs[] = {
    337     };
    338 
    339     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    340                               threadStartTime, threadEndTime,
    341                               &glmsg, pointerArgs);
    342     glContext->traceGLMessage(&glmsg);
    343 }
    344 
    345 void GLTrace_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {
    346     GLMessage glmsg;
    347     GLTraceContext *glContext = getGLTraceContext();
    348 
    349     glmsg.set_function(GLMessage::glBlendEquationSeparate);
    350 
    351     // copy argument modeRGB
    352     GLMessage_DataType *arg_modeRGB = glmsg.add_args();
    353     arg_modeRGB->set_isarray(false);
    354     arg_modeRGB->set_type(GLMessage::DataType::ENUM);
    355     arg_modeRGB->add_intvalue((int)modeRGB);
    356 
    357     // copy argument modeAlpha
    358     GLMessage_DataType *arg_modeAlpha = glmsg.add_args();
    359     arg_modeAlpha->set_isarray(false);
    360     arg_modeAlpha->set_type(GLMessage::DataType::ENUM);
    361     arg_modeAlpha->add_intvalue((int)modeAlpha);
    362 
    363     // call function
    364     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    365     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    366     glContext->hooks->gl.glBlendEquationSeparate(modeRGB, modeAlpha);
    367     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    368     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    369 
    370     void *pointerArgs[] = {
    371     };
    372 
    373     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    374                               threadStartTime, threadEndTime,
    375                               &glmsg, pointerArgs);
    376     glContext->traceGLMessage(&glmsg);
    377 }
    378 
    379 void GLTrace_glBlendFunc(GLenum sfactor, GLenum dfactor) {
    380     GLMessage glmsg;
    381     GLTraceContext *glContext = getGLTraceContext();
    382 
    383     glmsg.set_function(GLMessage::glBlendFunc);
    384 
    385     // copy argument sfactor
    386     GLMessage_DataType *arg_sfactor = glmsg.add_args();
    387     arg_sfactor->set_isarray(false);
    388     arg_sfactor->set_type(GLMessage::DataType::ENUM);
    389     arg_sfactor->add_intvalue((int)sfactor);
    390 
    391     // copy argument dfactor
    392     GLMessage_DataType *arg_dfactor = glmsg.add_args();
    393     arg_dfactor->set_isarray(false);
    394     arg_dfactor->set_type(GLMessage::DataType::ENUM);
    395     arg_dfactor->add_intvalue((int)dfactor);
    396 
    397     // call function
    398     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    399     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    400     glContext->hooks->gl.glBlendFunc(sfactor, dfactor);
    401     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    402     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    403 
    404     void *pointerArgs[] = {
    405     };
    406 
    407     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    408                               threadStartTime, threadEndTime,
    409                               &glmsg, pointerArgs);
    410     glContext->traceGLMessage(&glmsg);
    411 }
    412 
    413 void GLTrace_glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {
    414     GLMessage glmsg;
    415     GLTraceContext *glContext = getGLTraceContext();
    416 
    417     glmsg.set_function(GLMessage::glBlendFuncSeparate);
    418 
    419     // copy argument sfactorRGB
    420     GLMessage_DataType *arg_sfactorRGB = glmsg.add_args();
    421     arg_sfactorRGB->set_isarray(false);
    422     arg_sfactorRGB->set_type(GLMessage::DataType::ENUM);
    423     arg_sfactorRGB->add_intvalue((int)sfactorRGB);
    424 
    425     // copy argument dfactorRGB
    426     GLMessage_DataType *arg_dfactorRGB = glmsg.add_args();
    427     arg_dfactorRGB->set_isarray(false);
    428     arg_dfactorRGB->set_type(GLMessage::DataType::ENUM);
    429     arg_dfactorRGB->add_intvalue((int)dfactorRGB);
    430 
    431     // copy argument sfactorAlpha
    432     GLMessage_DataType *arg_sfactorAlpha = glmsg.add_args();
    433     arg_sfactorAlpha->set_isarray(false);
    434     arg_sfactorAlpha->set_type(GLMessage::DataType::ENUM);
    435     arg_sfactorAlpha->add_intvalue((int)sfactorAlpha);
    436 
    437     // copy argument dfactorAlpha
    438     GLMessage_DataType *arg_dfactorAlpha = glmsg.add_args();
    439     arg_dfactorAlpha->set_isarray(false);
    440     arg_dfactorAlpha->set_type(GLMessage::DataType::ENUM);
    441     arg_dfactorAlpha->add_intvalue((int)dfactorAlpha);
    442 
    443     // call function
    444     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    445     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    446     glContext->hooks->gl.glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
    447     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    448     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    449 
    450     void *pointerArgs[] = {
    451     };
    452 
    453     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    454                               threadStartTime, threadEndTime,
    455                               &glmsg, pointerArgs);
    456     glContext->traceGLMessage(&glmsg);
    457 }
    458 
    459 void GLTrace_glBufferData(GLenum target, GLsizeiptr size, const void * data, GLenum usage) {
    460     GLMessage glmsg;
    461     GLTraceContext *glContext = getGLTraceContext();
    462 
    463     glmsg.set_function(GLMessage::glBufferData);
    464 
    465     // copy argument target
    466     GLMessage_DataType *arg_target = glmsg.add_args();
    467     arg_target->set_isarray(false);
    468     arg_target->set_type(GLMessage::DataType::ENUM);
    469     arg_target->add_intvalue((int)target);
    470 
    471     // copy argument size
    472     GLMessage_DataType *arg_size = glmsg.add_args();
    473     arg_size->set_isarray(false);
    474     arg_size->set_type(GLMessage::DataType::INT);
    475     arg_size->add_intvalue(size);
    476 
    477     // copy argument data
    478     GLMessage_DataType *arg_data = glmsg.add_args();
    479     arg_data->set_isarray(false);
    480     arg_data->set_type(GLMessage::DataType::INT64);
    481     arg_data->add_int64value((uintptr_t)data);
    482 
    483     // copy argument usage
    484     GLMessage_DataType *arg_usage = glmsg.add_args();
    485     arg_usage->set_isarray(false);
    486     arg_usage->set_type(GLMessage::DataType::ENUM);
    487     arg_usage->add_intvalue((int)usage);
    488 
    489     // call function
    490     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    491     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    492     glContext->hooks->gl.glBufferData(target, size, data, usage);
    493     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    494     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    495 
    496     void *pointerArgs[] = {
    497         (void *) data,
    498     };
    499 
    500     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    501                               threadStartTime, threadEndTime,
    502                               &glmsg, pointerArgs);
    503     glContext->traceGLMessage(&glmsg);
    504 }
    505 
    506 void GLTrace_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void * data) {
    507     GLMessage glmsg;
    508     GLTraceContext *glContext = getGLTraceContext();
    509 
    510     glmsg.set_function(GLMessage::glBufferSubData);
    511 
    512     // copy argument target
    513     GLMessage_DataType *arg_target = glmsg.add_args();
    514     arg_target->set_isarray(false);
    515     arg_target->set_type(GLMessage::DataType::ENUM);
    516     arg_target->add_intvalue((int)target);
    517 
    518     // copy argument offset
    519     GLMessage_DataType *arg_offset = glmsg.add_args();
    520     arg_offset->set_isarray(false);
    521     arg_offset->set_type(GLMessage::DataType::INT);
    522     arg_offset->add_intvalue(offset);
    523 
    524     // copy argument size
    525     GLMessage_DataType *arg_size = glmsg.add_args();
    526     arg_size->set_isarray(false);
    527     arg_size->set_type(GLMessage::DataType::INT);
    528     arg_size->add_intvalue(size);
    529 
    530     // copy argument data
    531     GLMessage_DataType *arg_data = glmsg.add_args();
    532     arg_data->set_isarray(false);
    533     arg_data->set_type(GLMessage::DataType::INT64);
    534     arg_data->add_int64value((uintptr_t)data);
    535 
    536     // call function
    537     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    538     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    539     glContext->hooks->gl.glBufferSubData(target, offset, size, data);
    540     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    541     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    542 
    543     void *pointerArgs[] = {
    544         (void *) data,
    545     };
    546 
    547     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    548                               threadStartTime, threadEndTime,
    549                               &glmsg, pointerArgs);
    550     glContext->traceGLMessage(&glmsg);
    551 }
    552 
    553 GLenum GLTrace_glCheckFramebufferStatus(GLenum target) {
    554     GLMessage glmsg;
    555     GLTraceContext *glContext = getGLTraceContext();
    556 
    557     glmsg.set_function(GLMessage::glCheckFramebufferStatus);
    558 
    559     // copy argument target
    560     GLMessage_DataType *arg_target = glmsg.add_args();
    561     arg_target->set_isarray(false);
    562     arg_target->set_type(GLMessage::DataType::ENUM);
    563     arg_target->add_intvalue((int)target);
    564 
    565     // call function
    566     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    567     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    568     GLenum retValue = glContext->hooks->gl.glCheckFramebufferStatus(target);
    569     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    570     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    571 
    572     // set return value
    573     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
    574     rt->set_isarray(false);
    575     rt->set_type(GLMessage::DataType::ENUM);
    576     rt->add_intvalue((int)retValue);
    577 
    578     void *pointerArgs[] = {
    579     };
    580 
    581     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    582                               threadStartTime, threadEndTime,
    583                               &glmsg, pointerArgs);
    584     glContext->traceGLMessage(&glmsg);
    585 
    586     return retValue;
    587 }
    588 
    589 void GLTrace_glClear(GLbitfield mask) {
    590     GLMessage glmsg;
    591     GLTraceContext *glContext = getGLTraceContext();
    592 
    593     glmsg.set_function(GLMessage::glClear);
    594 
    595     // copy argument mask
    596     GLMessage_DataType *arg_mask = glmsg.add_args();
    597     arg_mask->set_isarray(false);
    598     arg_mask->set_type(GLMessage::DataType::INT);
    599     arg_mask->add_intvalue(mask);
    600 
    601     // call function
    602     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    603     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    604     glContext->hooks->gl.glClear(mask);
    605     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    606     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    607 
    608     void *pointerArgs[] = {
    609     };
    610 
    611     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    612                               threadStartTime, threadEndTime,
    613                               &glmsg, pointerArgs);
    614     glContext->traceGLMessage(&glmsg);
    615 }
    616 
    617 void GLTrace_glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
    618     GLMessage glmsg;
    619     GLTraceContext *glContext = getGLTraceContext();
    620 
    621     glmsg.set_function(GLMessage::glClearColor);
    622 
    623     // copy argument red
    624     GLMessage_DataType *arg_red = glmsg.add_args();
    625     arg_red->set_isarray(false);
    626     arg_red->set_type(GLMessage::DataType::FLOAT);
    627     arg_red->add_floatvalue(red);
    628 
    629     // copy argument green
    630     GLMessage_DataType *arg_green = glmsg.add_args();
    631     arg_green->set_isarray(false);
    632     arg_green->set_type(GLMessage::DataType::FLOAT);
    633     arg_green->add_floatvalue(green);
    634 
    635     // copy argument blue
    636     GLMessage_DataType *arg_blue = glmsg.add_args();
    637     arg_blue->set_isarray(false);
    638     arg_blue->set_type(GLMessage::DataType::FLOAT);
    639     arg_blue->add_floatvalue(blue);
    640 
    641     // copy argument alpha
    642     GLMessage_DataType *arg_alpha = glmsg.add_args();
    643     arg_alpha->set_isarray(false);
    644     arg_alpha->set_type(GLMessage::DataType::FLOAT);
    645     arg_alpha->add_floatvalue(alpha);
    646 
    647     // call function
    648     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    649     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    650     glContext->hooks->gl.glClearColor(red, green, blue, alpha);
    651     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    652     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    653 
    654     void *pointerArgs[] = {
    655     };
    656 
    657     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    658                               threadStartTime, threadEndTime,
    659                               &glmsg, pointerArgs);
    660     glContext->traceGLMessage(&glmsg);
    661 }
    662 
    663 void GLTrace_glClearDepthf(GLfloat d) {
    664     GLMessage glmsg;
    665     GLTraceContext *glContext = getGLTraceContext();
    666 
    667     glmsg.set_function(GLMessage::glClearDepthf);
    668 
    669     // copy argument d
    670     GLMessage_DataType *arg_d = glmsg.add_args();
    671     arg_d->set_isarray(false);
    672     arg_d->set_type(GLMessage::DataType::FLOAT);
    673     arg_d->add_floatvalue(d);
    674 
    675     // call function
    676     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    677     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    678     glContext->hooks->gl.glClearDepthf(d);
    679     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    680     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    681 
    682     void *pointerArgs[] = {
    683     };
    684 
    685     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    686                               threadStartTime, threadEndTime,
    687                               &glmsg, pointerArgs);
    688     glContext->traceGLMessage(&glmsg);
    689 }
    690 
    691 void GLTrace_glClearStencil(GLint s) {
    692     GLMessage glmsg;
    693     GLTraceContext *glContext = getGLTraceContext();
    694 
    695     glmsg.set_function(GLMessage::glClearStencil);
    696 
    697     // copy argument s
    698     GLMessage_DataType *arg_s = glmsg.add_args();
    699     arg_s->set_isarray(false);
    700     arg_s->set_type(GLMessage::DataType::INT);
    701     arg_s->add_intvalue(s);
    702 
    703     // call function
    704     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    705     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    706     glContext->hooks->gl.glClearStencil(s);
    707     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    708     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    709 
    710     void *pointerArgs[] = {
    711     };
    712 
    713     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    714                               threadStartTime, threadEndTime,
    715                               &glmsg, pointerArgs);
    716     glContext->traceGLMessage(&glmsg);
    717 }
    718 
    719 void GLTrace_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
    720     GLMessage glmsg;
    721     GLTraceContext *glContext = getGLTraceContext();
    722 
    723     glmsg.set_function(GLMessage::glColorMask);
    724 
    725     // copy argument red
    726     GLMessage_DataType *arg_red = glmsg.add_args();
    727     arg_red->set_isarray(false);
    728     arg_red->set_type(GLMessage::DataType::BOOL);
    729     arg_red->add_boolvalue(red);
    730 
    731     // copy argument green
    732     GLMessage_DataType *arg_green = glmsg.add_args();
    733     arg_green->set_isarray(false);
    734     arg_green->set_type(GLMessage::DataType::BOOL);
    735     arg_green->add_boolvalue(green);
    736 
    737     // copy argument blue
    738     GLMessage_DataType *arg_blue = glmsg.add_args();
    739     arg_blue->set_isarray(false);
    740     arg_blue->set_type(GLMessage::DataType::BOOL);
    741     arg_blue->add_boolvalue(blue);
    742 
    743     // copy argument alpha
    744     GLMessage_DataType *arg_alpha = glmsg.add_args();
    745     arg_alpha->set_isarray(false);
    746     arg_alpha->set_type(GLMessage::DataType::BOOL);
    747     arg_alpha->add_boolvalue(alpha);
    748 
    749     // call function
    750     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    751     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    752     glContext->hooks->gl.glColorMask(red, green, blue, alpha);
    753     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    754     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    755 
    756     void *pointerArgs[] = {
    757     };
    758 
    759     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    760                               threadStartTime, threadEndTime,
    761                               &glmsg, pointerArgs);
    762     glContext->traceGLMessage(&glmsg);
    763 }
    764 
    765 void GLTrace_glCompileShader(GLuint shader) {
    766     GLMessage glmsg;
    767     GLTraceContext *glContext = getGLTraceContext();
    768 
    769     glmsg.set_function(GLMessage::glCompileShader);
    770 
    771     // copy argument shader
    772     GLMessage_DataType *arg_shader = glmsg.add_args();
    773     arg_shader->set_isarray(false);
    774     arg_shader->set_type(GLMessage::DataType::INT);
    775     arg_shader->add_intvalue(shader);
    776 
    777     // call function
    778     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    779     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    780     glContext->hooks->gl.glCompileShader(shader);
    781     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    782     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    783 
    784     void *pointerArgs[] = {
    785     };
    786 
    787     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    788                               threadStartTime, threadEndTime,
    789                               &glmsg, pointerArgs);
    790     glContext->traceGLMessage(&glmsg);
    791 }
    792 
    793 void GLTrace_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data) {
    794     GLMessage glmsg;
    795     GLTraceContext *glContext = getGLTraceContext();
    796 
    797     glmsg.set_function(GLMessage::glCompressedTexImage2D);
    798 
    799     // copy argument target
    800     GLMessage_DataType *arg_target = glmsg.add_args();
    801     arg_target->set_isarray(false);
    802     arg_target->set_type(GLMessage::DataType::ENUM);
    803     arg_target->add_intvalue((int)target);
    804 
    805     // copy argument level
    806     GLMessage_DataType *arg_level = glmsg.add_args();
    807     arg_level->set_isarray(false);
    808     arg_level->set_type(GLMessage::DataType::INT);
    809     arg_level->add_intvalue(level);
    810 
    811     // copy argument internalformat
    812     GLMessage_DataType *arg_internalformat = glmsg.add_args();
    813     arg_internalformat->set_isarray(false);
    814     arg_internalformat->set_type(GLMessage::DataType::ENUM);
    815     arg_internalformat->add_intvalue((int)internalformat);
    816 
    817     // copy argument width
    818     GLMessage_DataType *arg_width = glmsg.add_args();
    819     arg_width->set_isarray(false);
    820     arg_width->set_type(GLMessage::DataType::INT);
    821     arg_width->add_intvalue(width);
    822 
    823     // copy argument height
    824     GLMessage_DataType *arg_height = glmsg.add_args();
    825     arg_height->set_isarray(false);
    826     arg_height->set_type(GLMessage::DataType::INT);
    827     arg_height->add_intvalue(height);
    828 
    829     // copy argument border
    830     GLMessage_DataType *arg_border = glmsg.add_args();
    831     arg_border->set_isarray(false);
    832     arg_border->set_type(GLMessage::DataType::INT);
    833     arg_border->add_intvalue(border);
    834 
    835     // copy argument imageSize
    836     GLMessage_DataType *arg_imageSize = glmsg.add_args();
    837     arg_imageSize->set_isarray(false);
    838     arg_imageSize->set_type(GLMessage::DataType::INT);
    839     arg_imageSize->add_intvalue(imageSize);
    840 
    841     // copy argument data
    842     GLMessage_DataType *arg_data = glmsg.add_args();
    843     arg_data->set_isarray(false);
    844     arg_data->set_type(GLMessage::DataType::INT64);
    845     arg_data->add_int64value((uintptr_t)data);
    846 
    847     // call function
    848     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    849     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    850     glContext->hooks->gl.glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
    851     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    852     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    853 
    854     void *pointerArgs[] = {
    855         (void *) data,
    856     };
    857 
    858     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    859                               threadStartTime, threadEndTime,
    860                               &glmsg, pointerArgs);
    861     glContext->traceGLMessage(&glmsg);
    862 }
    863 
    864 void GLTrace_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data) {
    865     GLMessage glmsg;
    866     GLTraceContext *glContext = getGLTraceContext();
    867 
    868     glmsg.set_function(GLMessage::glCompressedTexSubImage2D);
    869 
    870     // copy argument target
    871     GLMessage_DataType *arg_target = glmsg.add_args();
    872     arg_target->set_isarray(false);
    873     arg_target->set_type(GLMessage::DataType::ENUM);
    874     arg_target->add_intvalue((int)target);
    875 
    876     // copy argument level
    877     GLMessage_DataType *arg_level = glmsg.add_args();
    878     arg_level->set_isarray(false);
    879     arg_level->set_type(GLMessage::DataType::INT);
    880     arg_level->add_intvalue(level);
    881 
    882     // copy argument xoffset
    883     GLMessage_DataType *arg_xoffset = glmsg.add_args();
    884     arg_xoffset->set_isarray(false);
    885     arg_xoffset->set_type(GLMessage::DataType::INT);
    886     arg_xoffset->add_intvalue(xoffset);
    887 
    888     // copy argument yoffset
    889     GLMessage_DataType *arg_yoffset = glmsg.add_args();
    890     arg_yoffset->set_isarray(false);
    891     arg_yoffset->set_type(GLMessage::DataType::INT);
    892     arg_yoffset->add_intvalue(yoffset);
    893 
    894     // copy argument width
    895     GLMessage_DataType *arg_width = glmsg.add_args();
    896     arg_width->set_isarray(false);
    897     arg_width->set_type(GLMessage::DataType::INT);
    898     arg_width->add_intvalue(width);
    899 
    900     // copy argument height
    901     GLMessage_DataType *arg_height = glmsg.add_args();
    902     arg_height->set_isarray(false);
    903     arg_height->set_type(GLMessage::DataType::INT);
    904     arg_height->add_intvalue(height);
    905 
    906     // copy argument format
    907     GLMessage_DataType *arg_format = glmsg.add_args();
    908     arg_format->set_isarray(false);
    909     arg_format->set_type(GLMessage::DataType::ENUM);
    910     arg_format->add_intvalue((int)format);
    911 
    912     // copy argument imageSize
    913     GLMessage_DataType *arg_imageSize = glmsg.add_args();
    914     arg_imageSize->set_isarray(false);
    915     arg_imageSize->set_type(GLMessage::DataType::INT);
    916     arg_imageSize->add_intvalue(imageSize);
    917 
    918     // copy argument data
    919     GLMessage_DataType *arg_data = glmsg.add_args();
    920     arg_data->set_isarray(false);
    921     arg_data->set_type(GLMessage::DataType::INT64);
    922     arg_data->add_int64value((uintptr_t)data);
    923 
    924     // call function
    925     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    926     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    927     glContext->hooks->gl.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
    928     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
    929     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
    930 
    931     void *pointerArgs[] = {
    932         (void *) data,
    933     };
    934 
    935     fixupGLMessage(glContext, wallStartTime, wallEndTime,
    936                               threadStartTime, threadEndTime,
    937                               &glmsg, pointerArgs);
    938     glContext->traceGLMessage(&glmsg);
    939 }
    940 
    941 void GLTrace_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
    942     GLMessage glmsg;
    943     GLTraceContext *glContext = getGLTraceContext();
    944 
    945     glmsg.set_function(GLMessage::glCopyTexImage2D);
    946 
    947     // copy argument target
    948     GLMessage_DataType *arg_target = glmsg.add_args();
    949     arg_target->set_isarray(false);
    950     arg_target->set_type(GLMessage::DataType::ENUM);
    951     arg_target->add_intvalue((int)target);
    952 
    953     // copy argument level
    954     GLMessage_DataType *arg_level = glmsg.add_args();
    955     arg_level->set_isarray(false);
    956     arg_level->set_type(GLMessage::DataType::INT);
    957     arg_level->add_intvalue(level);
    958 
    959     // copy argument internalformat
    960     GLMessage_DataType *arg_internalformat = glmsg.add_args();
    961     arg_internalformat->set_isarray(false);
    962     arg_internalformat->set_type(GLMessage::DataType::ENUM);
    963     arg_internalformat->add_intvalue((int)internalformat);
    964 
    965     // copy argument x
    966     GLMessage_DataType *arg_x = glmsg.add_args();
    967     arg_x->set_isarray(false);
    968     arg_x->set_type(GLMessage::DataType::INT);
    969     arg_x->add_intvalue(x);
    970 
    971     // copy argument y
    972     GLMessage_DataType *arg_y = glmsg.add_args();
    973     arg_y->set_isarray(false);
    974     arg_y->set_type(GLMessage::DataType::INT);
    975     arg_y->add_intvalue(y);
    976 
    977     // copy argument width
    978     GLMessage_DataType *arg_width = glmsg.add_args();
    979     arg_width->set_isarray(false);
    980     arg_width->set_type(GLMessage::DataType::INT);
    981     arg_width->add_intvalue(width);
    982 
    983     // copy argument height
    984     GLMessage_DataType *arg_height = glmsg.add_args();
    985     arg_height->set_isarray(false);
    986     arg_height->set_type(GLMessage::DataType::INT);
    987     arg_height->add_intvalue(height);
    988 
    989     // copy argument border
    990     GLMessage_DataType *arg_border = glmsg.add_args();
    991     arg_border->set_isarray(false);
    992     arg_border->set_type(GLMessage::DataType::INT);
    993     arg_border->add_intvalue(border);
    994 
    995     // call function
    996     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
    997     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
    998     glContext->hooks->gl.glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
    999     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1000     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1001 
   1002     void *pointerArgs[] = {
   1003     };
   1004 
   1005     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1006                               threadStartTime, threadEndTime,
   1007                               &glmsg, pointerArgs);
   1008     glContext->traceGLMessage(&glmsg);
   1009 }
   1010 
   1011 void GLTrace_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
   1012     GLMessage glmsg;
   1013     GLTraceContext *glContext = getGLTraceContext();
   1014 
   1015     glmsg.set_function(GLMessage::glCopyTexSubImage2D);
   1016 
   1017     // copy argument target
   1018     GLMessage_DataType *arg_target = glmsg.add_args();
   1019     arg_target->set_isarray(false);
   1020     arg_target->set_type(GLMessage::DataType::ENUM);
   1021     arg_target->add_intvalue((int)target);
   1022 
   1023     // copy argument level
   1024     GLMessage_DataType *arg_level = glmsg.add_args();
   1025     arg_level->set_isarray(false);
   1026     arg_level->set_type(GLMessage::DataType::INT);
   1027     arg_level->add_intvalue(level);
   1028 
   1029     // copy argument xoffset
   1030     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   1031     arg_xoffset->set_isarray(false);
   1032     arg_xoffset->set_type(GLMessage::DataType::INT);
   1033     arg_xoffset->add_intvalue(xoffset);
   1034 
   1035     // copy argument yoffset
   1036     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   1037     arg_yoffset->set_isarray(false);
   1038     arg_yoffset->set_type(GLMessage::DataType::INT);
   1039     arg_yoffset->add_intvalue(yoffset);
   1040 
   1041     // copy argument x
   1042     GLMessage_DataType *arg_x = glmsg.add_args();
   1043     arg_x->set_isarray(false);
   1044     arg_x->set_type(GLMessage::DataType::INT);
   1045     arg_x->add_intvalue(x);
   1046 
   1047     // copy argument y
   1048     GLMessage_DataType *arg_y = glmsg.add_args();
   1049     arg_y->set_isarray(false);
   1050     arg_y->set_type(GLMessage::DataType::INT);
   1051     arg_y->add_intvalue(y);
   1052 
   1053     // copy argument width
   1054     GLMessage_DataType *arg_width = glmsg.add_args();
   1055     arg_width->set_isarray(false);
   1056     arg_width->set_type(GLMessage::DataType::INT);
   1057     arg_width->add_intvalue(width);
   1058 
   1059     // copy argument height
   1060     GLMessage_DataType *arg_height = glmsg.add_args();
   1061     arg_height->set_isarray(false);
   1062     arg_height->set_type(GLMessage::DataType::INT);
   1063     arg_height->add_intvalue(height);
   1064 
   1065     // call function
   1066     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1067     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1068     glContext->hooks->gl.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
   1069     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1070     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1071 
   1072     void *pointerArgs[] = {
   1073     };
   1074 
   1075     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1076                               threadStartTime, threadEndTime,
   1077                               &glmsg, pointerArgs);
   1078     glContext->traceGLMessage(&glmsg);
   1079 }
   1080 
   1081 GLuint GLTrace_glCreateProgram(void) {
   1082     GLMessage glmsg;
   1083     GLTraceContext *glContext = getGLTraceContext();
   1084 
   1085     glmsg.set_function(GLMessage::glCreateProgram);
   1086 
   1087     // call function
   1088     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1089     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1090     GLuint retValue = glContext->hooks->gl.glCreateProgram();
   1091     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1092     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1093 
   1094     // set return value
   1095     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   1096     rt->set_isarray(false);
   1097     rt->set_type(GLMessage::DataType::INT);
   1098     rt->add_intvalue(retValue);
   1099 
   1100     void *pointerArgs[] = {
   1101     };
   1102 
   1103     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1104                               threadStartTime, threadEndTime,
   1105                               &glmsg, pointerArgs);
   1106     glContext->traceGLMessage(&glmsg);
   1107 
   1108     return retValue;
   1109 }
   1110 
   1111 GLuint GLTrace_glCreateShader(GLenum type) {
   1112     GLMessage glmsg;
   1113     GLTraceContext *glContext = getGLTraceContext();
   1114 
   1115     glmsg.set_function(GLMessage::glCreateShader);
   1116 
   1117     // copy argument type
   1118     GLMessage_DataType *arg_type = glmsg.add_args();
   1119     arg_type->set_isarray(false);
   1120     arg_type->set_type(GLMessage::DataType::ENUM);
   1121     arg_type->add_intvalue((int)type);
   1122 
   1123     // call function
   1124     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1125     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1126     GLuint retValue = glContext->hooks->gl.glCreateShader(type);
   1127     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1128     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1129 
   1130     // set return value
   1131     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   1132     rt->set_isarray(false);
   1133     rt->set_type(GLMessage::DataType::INT);
   1134     rt->add_intvalue(retValue);
   1135 
   1136     void *pointerArgs[] = {
   1137     };
   1138 
   1139     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1140                               threadStartTime, threadEndTime,
   1141                               &glmsg, pointerArgs);
   1142     glContext->traceGLMessage(&glmsg);
   1143 
   1144     return retValue;
   1145 }
   1146 
   1147 void GLTrace_glCullFace(GLenum mode) {
   1148     GLMessage glmsg;
   1149     GLTraceContext *glContext = getGLTraceContext();
   1150 
   1151     glmsg.set_function(GLMessage::glCullFace);
   1152 
   1153     // copy argument mode
   1154     GLMessage_DataType *arg_mode = glmsg.add_args();
   1155     arg_mode->set_isarray(false);
   1156     arg_mode->set_type(GLMessage::DataType::ENUM);
   1157     arg_mode->add_intvalue((int)mode);
   1158 
   1159     // call function
   1160     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1161     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1162     glContext->hooks->gl.glCullFace(mode);
   1163     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1164     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1165 
   1166     void *pointerArgs[] = {
   1167     };
   1168 
   1169     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1170                               threadStartTime, threadEndTime,
   1171                               &glmsg, pointerArgs);
   1172     glContext->traceGLMessage(&glmsg);
   1173 }
   1174 
   1175 void GLTrace_glDeleteBuffers(GLsizei n, const GLuint * buffers) {
   1176     GLMessage glmsg;
   1177     GLTraceContext *glContext = getGLTraceContext();
   1178 
   1179     glmsg.set_function(GLMessage::glDeleteBuffers);
   1180 
   1181     // copy argument n
   1182     GLMessage_DataType *arg_n = glmsg.add_args();
   1183     arg_n->set_isarray(false);
   1184     arg_n->set_type(GLMessage::DataType::INT);
   1185     arg_n->add_intvalue(n);
   1186 
   1187     // copy argument buffers
   1188     GLMessage_DataType *arg_buffers = glmsg.add_args();
   1189     arg_buffers->set_isarray(false);
   1190     arg_buffers->set_type(GLMessage::DataType::INT64);
   1191     arg_buffers->add_int64value((uintptr_t)buffers);
   1192 
   1193     // call function
   1194     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1195     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1196     glContext->hooks->gl.glDeleteBuffers(n, buffers);
   1197     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1198     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1199 
   1200     void *pointerArgs[] = {
   1201         (void *) buffers,
   1202     };
   1203 
   1204     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1205                               threadStartTime, threadEndTime,
   1206                               &glmsg, pointerArgs);
   1207     glContext->traceGLMessage(&glmsg);
   1208 }
   1209 
   1210 void GLTrace_glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers) {
   1211     GLMessage glmsg;
   1212     GLTraceContext *glContext = getGLTraceContext();
   1213 
   1214     glmsg.set_function(GLMessage::glDeleteFramebuffers);
   1215 
   1216     // copy argument n
   1217     GLMessage_DataType *arg_n = glmsg.add_args();
   1218     arg_n->set_isarray(false);
   1219     arg_n->set_type(GLMessage::DataType::INT);
   1220     arg_n->add_intvalue(n);
   1221 
   1222     // copy argument framebuffers
   1223     GLMessage_DataType *arg_framebuffers = glmsg.add_args();
   1224     arg_framebuffers->set_isarray(false);
   1225     arg_framebuffers->set_type(GLMessage::DataType::INT64);
   1226     arg_framebuffers->add_int64value((uintptr_t)framebuffers);
   1227 
   1228     // call function
   1229     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1230     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1231     glContext->hooks->gl.glDeleteFramebuffers(n, framebuffers);
   1232     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1233     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1234 
   1235     void *pointerArgs[] = {
   1236         (void *) framebuffers,
   1237     };
   1238 
   1239     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1240                               threadStartTime, threadEndTime,
   1241                               &glmsg, pointerArgs);
   1242     glContext->traceGLMessage(&glmsg);
   1243 }
   1244 
   1245 void GLTrace_glDeleteProgram(GLuint program) {
   1246     GLMessage glmsg;
   1247     GLTraceContext *glContext = getGLTraceContext();
   1248 
   1249     glmsg.set_function(GLMessage::glDeleteProgram);
   1250 
   1251     // copy argument program
   1252     GLMessage_DataType *arg_program = glmsg.add_args();
   1253     arg_program->set_isarray(false);
   1254     arg_program->set_type(GLMessage::DataType::INT);
   1255     arg_program->add_intvalue(program);
   1256 
   1257     // call function
   1258     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1259     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1260     glContext->hooks->gl.glDeleteProgram(program);
   1261     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1262     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1263 
   1264     void *pointerArgs[] = {
   1265     };
   1266 
   1267     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1268                               threadStartTime, threadEndTime,
   1269                               &glmsg, pointerArgs);
   1270     glContext->traceGLMessage(&glmsg);
   1271 }
   1272 
   1273 void GLTrace_glDeleteRenderbuffers(GLsizei n, const GLuint * renderbuffers) {
   1274     GLMessage glmsg;
   1275     GLTraceContext *glContext = getGLTraceContext();
   1276 
   1277     glmsg.set_function(GLMessage::glDeleteRenderbuffers);
   1278 
   1279     // copy argument n
   1280     GLMessage_DataType *arg_n = glmsg.add_args();
   1281     arg_n->set_isarray(false);
   1282     arg_n->set_type(GLMessage::DataType::INT);
   1283     arg_n->add_intvalue(n);
   1284 
   1285     // copy argument renderbuffers
   1286     GLMessage_DataType *arg_renderbuffers = glmsg.add_args();
   1287     arg_renderbuffers->set_isarray(false);
   1288     arg_renderbuffers->set_type(GLMessage::DataType::INT64);
   1289     arg_renderbuffers->add_int64value((uintptr_t)renderbuffers);
   1290 
   1291     // call function
   1292     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1293     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1294     glContext->hooks->gl.glDeleteRenderbuffers(n, renderbuffers);
   1295     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1296     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1297 
   1298     void *pointerArgs[] = {
   1299         (void *) renderbuffers,
   1300     };
   1301 
   1302     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1303                               threadStartTime, threadEndTime,
   1304                               &glmsg, pointerArgs);
   1305     glContext->traceGLMessage(&glmsg);
   1306 }
   1307 
   1308 void GLTrace_glDeleteShader(GLuint shader) {
   1309     GLMessage glmsg;
   1310     GLTraceContext *glContext = getGLTraceContext();
   1311 
   1312     glmsg.set_function(GLMessage::glDeleteShader);
   1313 
   1314     // copy argument shader
   1315     GLMessage_DataType *arg_shader = glmsg.add_args();
   1316     arg_shader->set_isarray(false);
   1317     arg_shader->set_type(GLMessage::DataType::INT);
   1318     arg_shader->add_intvalue(shader);
   1319 
   1320     // call function
   1321     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1322     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1323     glContext->hooks->gl.glDeleteShader(shader);
   1324     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1325     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1326 
   1327     void *pointerArgs[] = {
   1328     };
   1329 
   1330     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1331                               threadStartTime, threadEndTime,
   1332                               &glmsg, pointerArgs);
   1333     glContext->traceGLMessage(&glmsg);
   1334 }
   1335 
   1336 void GLTrace_glDeleteTextures(GLsizei n, const GLuint * textures) {
   1337     GLMessage glmsg;
   1338     GLTraceContext *glContext = getGLTraceContext();
   1339 
   1340     glmsg.set_function(GLMessage::glDeleteTextures);
   1341 
   1342     // copy argument n
   1343     GLMessage_DataType *arg_n = glmsg.add_args();
   1344     arg_n->set_isarray(false);
   1345     arg_n->set_type(GLMessage::DataType::INT);
   1346     arg_n->add_intvalue(n);
   1347 
   1348     // copy argument textures
   1349     GLMessage_DataType *arg_textures = glmsg.add_args();
   1350     arg_textures->set_isarray(false);
   1351     arg_textures->set_type(GLMessage::DataType::INT64);
   1352     arg_textures->add_int64value((uintptr_t)textures);
   1353 
   1354     // call function
   1355     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1356     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1357     glContext->hooks->gl.glDeleteTextures(n, textures);
   1358     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1359     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1360 
   1361     void *pointerArgs[] = {
   1362         (void *) textures,
   1363     };
   1364 
   1365     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1366                               threadStartTime, threadEndTime,
   1367                               &glmsg, pointerArgs);
   1368     glContext->traceGLMessage(&glmsg);
   1369 }
   1370 
   1371 void GLTrace_glDepthFunc(GLenum func) {
   1372     GLMessage glmsg;
   1373     GLTraceContext *glContext = getGLTraceContext();
   1374 
   1375     glmsg.set_function(GLMessage::glDepthFunc);
   1376 
   1377     // copy argument func
   1378     GLMessage_DataType *arg_func = glmsg.add_args();
   1379     arg_func->set_isarray(false);
   1380     arg_func->set_type(GLMessage::DataType::ENUM);
   1381     arg_func->add_intvalue((int)func);
   1382 
   1383     // call function
   1384     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1385     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1386     glContext->hooks->gl.glDepthFunc(func);
   1387     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1388     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1389 
   1390     void *pointerArgs[] = {
   1391     };
   1392 
   1393     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1394                               threadStartTime, threadEndTime,
   1395                               &glmsg, pointerArgs);
   1396     glContext->traceGLMessage(&glmsg);
   1397 }
   1398 
   1399 void GLTrace_glDepthMask(GLboolean flag) {
   1400     GLMessage glmsg;
   1401     GLTraceContext *glContext = getGLTraceContext();
   1402 
   1403     glmsg.set_function(GLMessage::glDepthMask);
   1404 
   1405     // copy argument flag
   1406     GLMessage_DataType *arg_flag = glmsg.add_args();
   1407     arg_flag->set_isarray(false);
   1408     arg_flag->set_type(GLMessage::DataType::BOOL);
   1409     arg_flag->add_boolvalue(flag);
   1410 
   1411     // call function
   1412     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1413     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1414     glContext->hooks->gl.glDepthMask(flag);
   1415     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1416     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1417 
   1418     void *pointerArgs[] = {
   1419     };
   1420 
   1421     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1422                               threadStartTime, threadEndTime,
   1423                               &glmsg, pointerArgs);
   1424     glContext->traceGLMessage(&glmsg);
   1425 }
   1426 
   1427 void GLTrace_glDepthRangef(GLfloat n, GLfloat f) {
   1428     GLMessage glmsg;
   1429     GLTraceContext *glContext = getGLTraceContext();
   1430 
   1431     glmsg.set_function(GLMessage::glDepthRangef);
   1432 
   1433     // copy argument n
   1434     GLMessage_DataType *arg_n = glmsg.add_args();
   1435     arg_n->set_isarray(false);
   1436     arg_n->set_type(GLMessage::DataType::FLOAT);
   1437     arg_n->add_floatvalue(n);
   1438 
   1439     // copy argument f
   1440     GLMessage_DataType *arg_f = glmsg.add_args();
   1441     arg_f->set_isarray(false);
   1442     arg_f->set_type(GLMessage::DataType::FLOAT);
   1443     arg_f->add_floatvalue(f);
   1444 
   1445     // call function
   1446     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1447     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1448     glContext->hooks->gl.glDepthRangef(n, f);
   1449     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1450     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1451 
   1452     void *pointerArgs[] = {
   1453     };
   1454 
   1455     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1456                               threadStartTime, threadEndTime,
   1457                               &glmsg, pointerArgs);
   1458     glContext->traceGLMessage(&glmsg);
   1459 }
   1460 
   1461 void GLTrace_glDetachShader(GLuint program, GLuint shader) {
   1462     GLMessage glmsg;
   1463     GLTraceContext *glContext = getGLTraceContext();
   1464 
   1465     glmsg.set_function(GLMessage::glDetachShader);
   1466 
   1467     // copy argument program
   1468     GLMessage_DataType *arg_program = glmsg.add_args();
   1469     arg_program->set_isarray(false);
   1470     arg_program->set_type(GLMessage::DataType::INT);
   1471     arg_program->add_intvalue(program);
   1472 
   1473     // copy argument shader
   1474     GLMessage_DataType *arg_shader = glmsg.add_args();
   1475     arg_shader->set_isarray(false);
   1476     arg_shader->set_type(GLMessage::DataType::INT);
   1477     arg_shader->add_intvalue(shader);
   1478 
   1479     // call function
   1480     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1481     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1482     glContext->hooks->gl.glDetachShader(program, shader);
   1483     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1484     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1485 
   1486     void *pointerArgs[] = {
   1487     };
   1488 
   1489     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1490                               threadStartTime, threadEndTime,
   1491                               &glmsg, pointerArgs);
   1492     glContext->traceGLMessage(&glmsg);
   1493 }
   1494 
   1495 void GLTrace_glDisable(GLenum cap) {
   1496     GLMessage glmsg;
   1497     GLTraceContext *glContext = getGLTraceContext();
   1498 
   1499     glmsg.set_function(GLMessage::glDisable);
   1500 
   1501     // copy argument cap
   1502     GLMessage_DataType *arg_cap = glmsg.add_args();
   1503     arg_cap->set_isarray(false);
   1504     arg_cap->set_type(GLMessage::DataType::ENUM);
   1505     arg_cap->add_intvalue((int)cap);
   1506 
   1507     // call function
   1508     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1509     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1510     glContext->hooks->gl.glDisable(cap);
   1511     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1512     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1513 
   1514     void *pointerArgs[] = {
   1515     };
   1516 
   1517     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1518                               threadStartTime, threadEndTime,
   1519                               &glmsg, pointerArgs);
   1520     glContext->traceGLMessage(&glmsg);
   1521 }
   1522 
   1523 void GLTrace_glDisableVertexAttribArray(GLuint index) {
   1524     GLMessage glmsg;
   1525     GLTraceContext *glContext = getGLTraceContext();
   1526 
   1527     glmsg.set_function(GLMessage::glDisableVertexAttribArray);
   1528 
   1529     // copy argument index
   1530     GLMessage_DataType *arg_index = glmsg.add_args();
   1531     arg_index->set_isarray(false);
   1532     arg_index->set_type(GLMessage::DataType::INT);
   1533     arg_index->add_intvalue(index);
   1534 
   1535     // call function
   1536     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1537     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1538     glContext->hooks->gl.glDisableVertexAttribArray(index);
   1539     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1540     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1541 
   1542     void *pointerArgs[] = {
   1543     };
   1544 
   1545     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1546                               threadStartTime, threadEndTime,
   1547                               &glmsg, pointerArgs);
   1548     glContext->traceGLMessage(&glmsg);
   1549 }
   1550 
   1551 void GLTrace_glDrawArrays(GLenum mode, GLint first, GLsizei count) {
   1552     GLMessage glmsg;
   1553     GLTraceContext *glContext = getGLTraceContext();
   1554 
   1555     glmsg.set_function(GLMessage::glDrawArrays);
   1556 
   1557     // copy argument mode
   1558     GLMessage_DataType *arg_mode = glmsg.add_args();
   1559     arg_mode->set_isarray(false);
   1560     arg_mode->set_type(GLMessage::DataType::ENUM);
   1561     arg_mode->add_intvalue((int)mode);
   1562 
   1563     // copy argument first
   1564     GLMessage_DataType *arg_first = glmsg.add_args();
   1565     arg_first->set_isarray(false);
   1566     arg_first->set_type(GLMessage::DataType::INT);
   1567     arg_first->add_intvalue(first);
   1568 
   1569     // copy argument count
   1570     GLMessage_DataType *arg_count = glmsg.add_args();
   1571     arg_count->set_isarray(false);
   1572     arg_count->set_type(GLMessage::DataType::INT);
   1573     arg_count->add_intvalue(count);
   1574 
   1575     // call function
   1576     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1577     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1578     glContext->hooks->gl.glDrawArrays(mode, first, count);
   1579     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1580     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1581 
   1582     void *pointerArgs[] = {
   1583     };
   1584 
   1585     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1586                               threadStartTime, threadEndTime,
   1587                               &glmsg, pointerArgs);
   1588     glContext->traceGLMessage(&glmsg);
   1589 }
   1590 
   1591 void GLTrace_glDrawElements(GLenum mode, GLsizei count, GLenum type, const void * indices) {
   1592     GLMessage glmsg;
   1593     GLTraceContext *glContext = getGLTraceContext();
   1594 
   1595     glmsg.set_function(GLMessage::glDrawElements);
   1596 
   1597     // copy argument mode
   1598     GLMessage_DataType *arg_mode = glmsg.add_args();
   1599     arg_mode->set_isarray(false);
   1600     arg_mode->set_type(GLMessage::DataType::ENUM);
   1601     arg_mode->add_intvalue((int)mode);
   1602 
   1603     // copy argument count
   1604     GLMessage_DataType *arg_count = glmsg.add_args();
   1605     arg_count->set_isarray(false);
   1606     arg_count->set_type(GLMessage::DataType::INT);
   1607     arg_count->add_intvalue(count);
   1608 
   1609     // copy argument type
   1610     GLMessage_DataType *arg_type = glmsg.add_args();
   1611     arg_type->set_isarray(false);
   1612     arg_type->set_type(GLMessage::DataType::ENUM);
   1613     arg_type->add_intvalue((int)type);
   1614 
   1615     // copy argument indices
   1616     GLMessage_DataType *arg_indices = glmsg.add_args();
   1617     arg_indices->set_isarray(false);
   1618     arg_indices->set_type(GLMessage::DataType::INT64);
   1619     arg_indices->add_int64value((uintptr_t)indices);
   1620 
   1621     // call function
   1622     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1623     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1624     glContext->hooks->gl.glDrawElements(mode, count, type, indices);
   1625     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1626     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1627 
   1628     void *pointerArgs[] = {
   1629         (void *) indices,
   1630     };
   1631 
   1632     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1633                               threadStartTime, threadEndTime,
   1634                               &glmsg, pointerArgs);
   1635     glContext->traceGLMessage(&glmsg);
   1636 }
   1637 
   1638 void GLTrace_glEnable(GLenum cap) {
   1639     GLMessage glmsg;
   1640     GLTraceContext *glContext = getGLTraceContext();
   1641 
   1642     glmsg.set_function(GLMessage::glEnable);
   1643 
   1644     // copy argument cap
   1645     GLMessage_DataType *arg_cap = glmsg.add_args();
   1646     arg_cap->set_isarray(false);
   1647     arg_cap->set_type(GLMessage::DataType::ENUM);
   1648     arg_cap->add_intvalue((int)cap);
   1649 
   1650     // call function
   1651     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1652     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1653     glContext->hooks->gl.glEnable(cap);
   1654     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1655     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1656 
   1657     void *pointerArgs[] = {
   1658     };
   1659 
   1660     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1661                               threadStartTime, threadEndTime,
   1662                               &glmsg, pointerArgs);
   1663     glContext->traceGLMessage(&glmsg);
   1664 }
   1665 
   1666 void GLTrace_glEnableVertexAttribArray(GLuint index) {
   1667     GLMessage glmsg;
   1668     GLTraceContext *glContext = getGLTraceContext();
   1669 
   1670     glmsg.set_function(GLMessage::glEnableVertexAttribArray);
   1671 
   1672     // copy argument index
   1673     GLMessage_DataType *arg_index = glmsg.add_args();
   1674     arg_index->set_isarray(false);
   1675     arg_index->set_type(GLMessage::DataType::INT);
   1676     arg_index->add_intvalue(index);
   1677 
   1678     // call function
   1679     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1680     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1681     glContext->hooks->gl.glEnableVertexAttribArray(index);
   1682     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1683     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1684 
   1685     void *pointerArgs[] = {
   1686     };
   1687 
   1688     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1689                               threadStartTime, threadEndTime,
   1690                               &glmsg, pointerArgs);
   1691     glContext->traceGLMessage(&glmsg);
   1692 }
   1693 
   1694 void GLTrace_glFinish(void) {
   1695     GLMessage glmsg;
   1696     GLTraceContext *glContext = getGLTraceContext();
   1697 
   1698     glmsg.set_function(GLMessage::glFinish);
   1699 
   1700     // call function
   1701     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1702     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1703     glContext->hooks->gl.glFinish();
   1704     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1705     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1706 
   1707     void *pointerArgs[] = {
   1708     };
   1709 
   1710     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1711                               threadStartTime, threadEndTime,
   1712                               &glmsg, pointerArgs);
   1713     glContext->traceGLMessage(&glmsg);
   1714 }
   1715 
   1716 void GLTrace_glFlush(void) {
   1717     GLMessage glmsg;
   1718     GLTraceContext *glContext = getGLTraceContext();
   1719 
   1720     glmsg.set_function(GLMessage::glFlush);
   1721 
   1722     // call function
   1723     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1724     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1725     glContext->hooks->gl.glFlush();
   1726     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1727     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1728 
   1729     void *pointerArgs[] = {
   1730     };
   1731 
   1732     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1733                               threadStartTime, threadEndTime,
   1734                               &glmsg, pointerArgs);
   1735     glContext->traceGLMessage(&glmsg);
   1736 }
   1737 
   1738 void GLTrace_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {
   1739     GLMessage glmsg;
   1740     GLTraceContext *glContext = getGLTraceContext();
   1741 
   1742     glmsg.set_function(GLMessage::glFramebufferRenderbuffer);
   1743 
   1744     // copy argument target
   1745     GLMessage_DataType *arg_target = glmsg.add_args();
   1746     arg_target->set_isarray(false);
   1747     arg_target->set_type(GLMessage::DataType::ENUM);
   1748     arg_target->add_intvalue((int)target);
   1749 
   1750     // copy argument attachment
   1751     GLMessage_DataType *arg_attachment = glmsg.add_args();
   1752     arg_attachment->set_isarray(false);
   1753     arg_attachment->set_type(GLMessage::DataType::ENUM);
   1754     arg_attachment->add_intvalue((int)attachment);
   1755 
   1756     // copy argument renderbuffertarget
   1757     GLMessage_DataType *arg_renderbuffertarget = glmsg.add_args();
   1758     arg_renderbuffertarget->set_isarray(false);
   1759     arg_renderbuffertarget->set_type(GLMessage::DataType::ENUM);
   1760     arg_renderbuffertarget->add_intvalue((int)renderbuffertarget);
   1761 
   1762     // copy argument renderbuffer
   1763     GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
   1764     arg_renderbuffer->set_isarray(false);
   1765     arg_renderbuffer->set_type(GLMessage::DataType::INT);
   1766     arg_renderbuffer->add_intvalue(renderbuffer);
   1767 
   1768     // call function
   1769     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1770     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1771     glContext->hooks->gl.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
   1772     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1773     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1774 
   1775     void *pointerArgs[] = {
   1776     };
   1777 
   1778     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1779                               threadStartTime, threadEndTime,
   1780                               &glmsg, pointerArgs);
   1781     glContext->traceGLMessage(&glmsg);
   1782 }
   1783 
   1784 void GLTrace_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {
   1785     GLMessage glmsg;
   1786     GLTraceContext *glContext = getGLTraceContext();
   1787 
   1788     glmsg.set_function(GLMessage::glFramebufferTexture2D);
   1789 
   1790     // copy argument target
   1791     GLMessage_DataType *arg_target = glmsg.add_args();
   1792     arg_target->set_isarray(false);
   1793     arg_target->set_type(GLMessage::DataType::ENUM);
   1794     arg_target->add_intvalue((int)target);
   1795 
   1796     // copy argument attachment
   1797     GLMessage_DataType *arg_attachment = glmsg.add_args();
   1798     arg_attachment->set_isarray(false);
   1799     arg_attachment->set_type(GLMessage::DataType::ENUM);
   1800     arg_attachment->add_intvalue((int)attachment);
   1801 
   1802     // copy argument textarget
   1803     GLMessage_DataType *arg_textarget = glmsg.add_args();
   1804     arg_textarget->set_isarray(false);
   1805     arg_textarget->set_type(GLMessage::DataType::ENUM);
   1806     arg_textarget->add_intvalue((int)textarget);
   1807 
   1808     // copy argument texture
   1809     GLMessage_DataType *arg_texture = glmsg.add_args();
   1810     arg_texture->set_isarray(false);
   1811     arg_texture->set_type(GLMessage::DataType::INT);
   1812     arg_texture->add_intvalue(texture);
   1813 
   1814     // copy argument level
   1815     GLMessage_DataType *arg_level = glmsg.add_args();
   1816     arg_level->set_isarray(false);
   1817     arg_level->set_type(GLMessage::DataType::INT);
   1818     arg_level->add_intvalue(level);
   1819 
   1820     // call function
   1821     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1822     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1823     glContext->hooks->gl.glFramebufferTexture2D(target, attachment, textarget, texture, level);
   1824     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1825     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1826 
   1827     void *pointerArgs[] = {
   1828     };
   1829 
   1830     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1831                               threadStartTime, threadEndTime,
   1832                               &glmsg, pointerArgs);
   1833     glContext->traceGLMessage(&glmsg);
   1834 }
   1835 
   1836 void GLTrace_glFrontFace(GLenum mode) {
   1837     GLMessage glmsg;
   1838     GLTraceContext *glContext = getGLTraceContext();
   1839 
   1840     glmsg.set_function(GLMessage::glFrontFace);
   1841 
   1842     // copy argument mode
   1843     GLMessage_DataType *arg_mode = glmsg.add_args();
   1844     arg_mode->set_isarray(false);
   1845     arg_mode->set_type(GLMessage::DataType::ENUM);
   1846     arg_mode->add_intvalue((int)mode);
   1847 
   1848     // call function
   1849     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1850     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1851     glContext->hooks->gl.glFrontFace(mode);
   1852     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1853     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1854 
   1855     void *pointerArgs[] = {
   1856     };
   1857 
   1858     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1859                               threadStartTime, threadEndTime,
   1860                               &glmsg, pointerArgs);
   1861     glContext->traceGLMessage(&glmsg);
   1862 }
   1863 
   1864 void GLTrace_glGenBuffers(GLsizei n, GLuint * buffers) {
   1865     GLMessage glmsg;
   1866     GLTraceContext *glContext = getGLTraceContext();
   1867 
   1868     glmsg.set_function(GLMessage::glGenBuffers);
   1869 
   1870     // copy argument n
   1871     GLMessage_DataType *arg_n = glmsg.add_args();
   1872     arg_n->set_isarray(false);
   1873     arg_n->set_type(GLMessage::DataType::INT);
   1874     arg_n->add_intvalue(n);
   1875 
   1876     // copy argument buffers
   1877     GLMessage_DataType *arg_buffers = glmsg.add_args();
   1878     arg_buffers->set_isarray(false);
   1879     arg_buffers->set_type(GLMessage::DataType::INT64);
   1880     arg_buffers->add_int64value((uintptr_t)buffers);
   1881 
   1882     // call function
   1883     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1884     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1885     glContext->hooks->gl.glGenBuffers(n, buffers);
   1886     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1887     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1888 
   1889     void *pointerArgs[] = {
   1890         (void *) buffers,
   1891     };
   1892 
   1893     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1894                               threadStartTime, threadEndTime,
   1895                               &glmsg, pointerArgs);
   1896     glContext->traceGLMessage(&glmsg);
   1897 }
   1898 
   1899 void GLTrace_glGenerateMipmap(GLenum target) {
   1900     GLMessage glmsg;
   1901     GLTraceContext *glContext = getGLTraceContext();
   1902 
   1903     glmsg.set_function(GLMessage::glGenerateMipmap);
   1904 
   1905     // copy argument target
   1906     GLMessage_DataType *arg_target = glmsg.add_args();
   1907     arg_target->set_isarray(false);
   1908     arg_target->set_type(GLMessage::DataType::ENUM);
   1909     arg_target->add_intvalue((int)target);
   1910 
   1911     // call function
   1912     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1913     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1914     glContext->hooks->gl.glGenerateMipmap(target);
   1915     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1916     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1917 
   1918     void *pointerArgs[] = {
   1919     };
   1920 
   1921     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1922                               threadStartTime, threadEndTime,
   1923                               &glmsg, pointerArgs);
   1924     glContext->traceGLMessage(&glmsg);
   1925 }
   1926 
   1927 void GLTrace_glGenFramebuffers(GLsizei n, GLuint * framebuffers) {
   1928     GLMessage glmsg;
   1929     GLTraceContext *glContext = getGLTraceContext();
   1930 
   1931     glmsg.set_function(GLMessage::glGenFramebuffers);
   1932 
   1933     // copy argument n
   1934     GLMessage_DataType *arg_n = glmsg.add_args();
   1935     arg_n->set_isarray(false);
   1936     arg_n->set_type(GLMessage::DataType::INT);
   1937     arg_n->add_intvalue(n);
   1938 
   1939     // copy argument framebuffers
   1940     GLMessage_DataType *arg_framebuffers = glmsg.add_args();
   1941     arg_framebuffers->set_isarray(false);
   1942     arg_framebuffers->set_type(GLMessage::DataType::INT64);
   1943     arg_framebuffers->add_int64value((uintptr_t)framebuffers);
   1944 
   1945     // call function
   1946     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1947     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1948     glContext->hooks->gl.glGenFramebuffers(n, framebuffers);
   1949     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1950     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1951 
   1952     void *pointerArgs[] = {
   1953         (void *) framebuffers,
   1954     };
   1955 
   1956     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1957                               threadStartTime, threadEndTime,
   1958                               &glmsg, pointerArgs);
   1959     glContext->traceGLMessage(&glmsg);
   1960 }
   1961 
   1962 void GLTrace_glGenRenderbuffers(GLsizei n, GLuint * renderbuffers) {
   1963     GLMessage glmsg;
   1964     GLTraceContext *glContext = getGLTraceContext();
   1965 
   1966     glmsg.set_function(GLMessage::glGenRenderbuffers);
   1967 
   1968     // copy argument n
   1969     GLMessage_DataType *arg_n = glmsg.add_args();
   1970     arg_n->set_isarray(false);
   1971     arg_n->set_type(GLMessage::DataType::INT);
   1972     arg_n->add_intvalue(n);
   1973 
   1974     // copy argument renderbuffers
   1975     GLMessage_DataType *arg_renderbuffers = glmsg.add_args();
   1976     arg_renderbuffers->set_isarray(false);
   1977     arg_renderbuffers->set_type(GLMessage::DataType::INT64);
   1978     arg_renderbuffers->add_int64value((uintptr_t)renderbuffers);
   1979 
   1980     // call function
   1981     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1982     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   1983     glContext->hooks->gl.glGenRenderbuffers(n, renderbuffers);
   1984     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   1985     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   1986 
   1987     void *pointerArgs[] = {
   1988         (void *) renderbuffers,
   1989     };
   1990 
   1991     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   1992                               threadStartTime, threadEndTime,
   1993                               &glmsg, pointerArgs);
   1994     glContext->traceGLMessage(&glmsg);
   1995 }
   1996 
   1997 void GLTrace_glGenTextures(GLsizei n, GLuint * textures) {
   1998     GLMessage glmsg;
   1999     GLTraceContext *glContext = getGLTraceContext();
   2000 
   2001     glmsg.set_function(GLMessage::glGenTextures);
   2002 
   2003     // copy argument n
   2004     GLMessage_DataType *arg_n = glmsg.add_args();
   2005     arg_n->set_isarray(false);
   2006     arg_n->set_type(GLMessage::DataType::INT);
   2007     arg_n->add_intvalue(n);
   2008 
   2009     // copy argument textures
   2010     GLMessage_DataType *arg_textures = glmsg.add_args();
   2011     arg_textures->set_isarray(false);
   2012     arg_textures->set_type(GLMessage::DataType::INT64);
   2013     arg_textures->add_int64value((uintptr_t)textures);
   2014 
   2015     // call function
   2016     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2017     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2018     glContext->hooks->gl.glGenTextures(n, textures);
   2019     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2020     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2021 
   2022     void *pointerArgs[] = {
   2023         (void *) textures,
   2024     };
   2025 
   2026     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2027                               threadStartTime, threadEndTime,
   2028                               &glmsg, pointerArgs);
   2029     glContext->traceGLMessage(&glmsg);
   2030 }
   2031 
   2032 void GLTrace_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {
   2033     GLMessage glmsg;
   2034     GLTraceContext *glContext = getGLTraceContext();
   2035 
   2036     glmsg.set_function(GLMessage::glGetActiveAttrib);
   2037 
   2038     // copy argument program
   2039     GLMessage_DataType *arg_program = glmsg.add_args();
   2040     arg_program->set_isarray(false);
   2041     arg_program->set_type(GLMessage::DataType::INT);
   2042     arg_program->add_intvalue(program);
   2043 
   2044     // copy argument index
   2045     GLMessage_DataType *arg_index = glmsg.add_args();
   2046     arg_index->set_isarray(false);
   2047     arg_index->set_type(GLMessage::DataType::INT);
   2048     arg_index->add_intvalue(index);
   2049 
   2050     // copy argument bufSize
   2051     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   2052     arg_bufSize->set_isarray(false);
   2053     arg_bufSize->set_type(GLMessage::DataType::INT);
   2054     arg_bufSize->add_intvalue(bufSize);
   2055 
   2056     // copy argument length
   2057     GLMessage_DataType *arg_length = glmsg.add_args();
   2058     arg_length->set_isarray(false);
   2059     arg_length->set_type(GLMessage::DataType::INT64);
   2060     arg_length->add_int64value((uintptr_t)length);
   2061 
   2062     // copy argument size
   2063     GLMessage_DataType *arg_size = glmsg.add_args();
   2064     arg_size->set_isarray(false);
   2065     arg_size->set_type(GLMessage::DataType::INT64);
   2066     arg_size->add_int64value((uintptr_t)size);
   2067 
   2068     // copy argument type
   2069     GLMessage_DataType *arg_type = glmsg.add_args();
   2070     arg_type->set_isarray(false);
   2071     arg_type->set_type(GLMessage::DataType::INT64);
   2072     arg_type->add_int64value((uintptr_t)type);
   2073 
   2074     // copy argument name
   2075     GLMessage_DataType *arg_name = glmsg.add_args();
   2076     arg_name->set_isarray(false);
   2077     arg_name->set_type(GLMessage::DataType::INT64);
   2078     arg_name->add_int64value((uintptr_t)name);
   2079 
   2080     // call function
   2081     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2082     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2083     glContext->hooks->gl.glGetActiveAttrib(program, index, bufSize, length, size, type, name);
   2084     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2085     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2086 
   2087     void *pointerArgs[] = {
   2088         (void *) length,
   2089         (void *) size,
   2090         (void *) type,
   2091         (void *) name,
   2092     };
   2093 
   2094     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2095                               threadStartTime, threadEndTime,
   2096                               &glmsg, pointerArgs);
   2097     glContext->traceGLMessage(&glmsg);
   2098 }
   2099 
   2100 void GLTrace_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {
   2101     GLMessage glmsg;
   2102     GLTraceContext *glContext = getGLTraceContext();
   2103 
   2104     glmsg.set_function(GLMessage::glGetActiveUniform);
   2105 
   2106     // copy argument program
   2107     GLMessage_DataType *arg_program = glmsg.add_args();
   2108     arg_program->set_isarray(false);
   2109     arg_program->set_type(GLMessage::DataType::INT);
   2110     arg_program->add_intvalue(program);
   2111 
   2112     // copy argument index
   2113     GLMessage_DataType *arg_index = glmsg.add_args();
   2114     arg_index->set_isarray(false);
   2115     arg_index->set_type(GLMessage::DataType::INT);
   2116     arg_index->add_intvalue(index);
   2117 
   2118     // copy argument bufSize
   2119     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   2120     arg_bufSize->set_isarray(false);
   2121     arg_bufSize->set_type(GLMessage::DataType::INT);
   2122     arg_bufSize->add_intvalue(bufSize);
   2123 
   2124     // copy argument length
   2125     GLMessage_DataType *arg_length = glmsg.add_args();
   2126     arg_length->set_isarray(false);
   2127     arg_length->set_type(GLMessage::DataType::INT64);
   2128     arg_length->add_int64value((uintptr_t)length);
   2129 
   2130     // copy argument size
   2131     GLMessage_DataType *arg_size = glmsg.add_args();
   2132     arg_size->set_isarray(false);
   2133     arg_size->set_type(GLMessage::DataType::INT64);
   2134     arg_size->add_int64value((uintptr_t)size);
   2135 
   2136     // copy argument type
   2137     GLMessage_DataType *arg_type = glmsg.add_args();
   2138     arg_type->set_isarray(false);
   2139     arg_type->set_type(GLMessage::DataType::INT64);
   2140     arg_type->add_int64value((uintptr_t)type);
   2141 
   2142     // copy argument name
   2143     GLMessage_DataType *arg_name = glmsg.add_args();
   2144     arg_name->set_isarray(false);
   2145     arg_name->set_type(GLMessage::DataType::INT64);
   2146     arg_name->add_int64value((uintptr_t)name);
   2147 
   2148     // call function
   2149     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2150     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2151     glContext->hooks->gl.glGetActiveUniform(program, index, bufSize, length, size, type, name);
   2152     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2153     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2154 
   2155     void *pointerArgs[] = {
   2156         (void *) length,
   2157         (void *) size,
   2158         (void *) type,
   2159         (void *) name,
   2160     };
   2161 
   2162     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2163                               threadStartTime, threadEndTime,
   2164                               &glmsg, pointerArgs);
   2165     glContext->traceGLMessage(&glmsg);
   2166 }
   2167 
   2168 void GLTrace_glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders) {
   2169     GLMessage glmsg;
   2170     GLTraceContext *glContext = getGLTraceContext();
   2171 
   2172     glmsg.set_function(GLMessage::glGetAttachedShaders);
   2173 
   2174     // copy argument program
   2175     GLMessage_DataType *arg_program = glmsg.add_args();
   2176     arg_program->set_isarray(false);
   2177     arg_program->set_type(GLMessage::DataType::INT);
   2178     arg_program->add_intvalue(program);
   2179 
   2180     // copy argument maxCount
   2181     GLMessage_DataType *arg_maxCount = glmsg.add_args();
   2182     arg_maxCount->set_isarray(false);
   2183     arg_maxCount->set_type(GLMessage::DataType::INT);
   2184     arg_maxCount->add_intvalue(maxCount);
   2185 
   2186     // copy argument count
   2187     GLMessage_DataType *arg_count = glmsg.add_args();
   2188     arg_count->set_isarray(false);
   2189     arg_count->set_type(GLMessage::DataType::INT64);
   2190     arg_count->add_int64value((uintptr_t)count);
   2191 
   2192     // copy argument shaders
   2193     GLMessage_DataType *arg_shaders = glmsg.add_args();
   2194     arg_shaders->set_isarray(false);
   2195     arg_shaders->set_type(GLMessage::DataType::INT64);
   2196     arg_shaders->add_int64value((uintptr_t)shaders);
   2197 
   2198     // call function
   2199     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2200     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2201     glContext->hooks->gl.glGetAttachedShaders(program, maxCount, count, shaders);
   2202     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2203     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2204 
   2205     void *pointerArgs[] = {
   2206         (void *) count,
   2207         (void *) shaders,
   2208     };
   2209 
   2210     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2211                               threadStartTime, threadEndTime,
   2212                               &glmsg, pointerArgs);
   2213     glContext->traceGLMessage(&glmsg);
   2214 }
   2215 
   2216 GLint GLTrace_glGetAttribLocation(GLuint program, const GLchar * name) {
   2217     GLMessage glmsg;
   2218     GLTraceContext *glContext = getGLTraceContext();
   2219 
   2220     glmsg.set_function(GLMessage::glGetAttribLocation);
   2221 
   2222     // copy argument program
   2223     GLMessage_DataType *arg_program = glmsg.add_args();
   2224     arg_program->set_isarray(false);
   2225     arg_program->set_type(GLMessage::DataType::INT);
   2226     arg_program->add_intvalue(program);
   2227 
   2228     // copy argument name
   2229     GLMessage_DataType *arg_name = glmsg.add_args();
   2230     arg_name->set_isarray(false);
   2231     arg_name->set_type(GLMessage::DataType::INT64);
   2232     arg_name->add_int64value((uintptr_t)name);
   2233 
   2234     // call function
   2235     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2236     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2237     GLint retValue = glContext->hooks->gl.glGetAttribLocation(program, name);
   2238     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2239     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2240 
   2241     // set return value
   2242     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   2243     rt->set_isarray(false);
   2244     rt->set_type(GLMessage::DataType::INT);
   2245     rt->add_intvalue(retValue);
   2246 
   2247     void *pointerArgs[] = {
   2248         (void *) name,
   2249     };
   2250 
   2251     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2252                               threadStartTime, threadEndTime,
   2253                               &glmsg, pointerArgs);
   2254     glContext->traceGLMessage(&glmsg);
   2255 
   2256     return retValue;
   2257 }
   2258 
   2259 void GLTrace_glGetBooleanv(GLenum pname, GLboolean * data) {
   2260     GLMessage glmsg;
   2261     GLTraceContext *glContext = getGLTraceContext();
   2262 
   2263     glmsg.set_function(GLMessage::glGetBooleanv);
   2264 
   2265     // copy argument pname
   2266     GLMessage_DataType *arg_pname = glmsg.add_args();
   2267     arg_pname->set_isarray(false);
   2268     arg_pname->set_type(GLMessage::DataType::ENUM);
   2269     arg_pname->add_intvalue((int)pname);
   2270 
   2271     // copy argument data
   2272     GLMessage_DataType *arg_data = glmsg.add_args();
   2273     arg_data->set_isarray(false);
   2274     arg_data->set_type(GLMessage::DataType::INT64);
   2275     arg_data->add_int64value((uintptr_t)data);
   2276 
   2277     // call function
   2278     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2279     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2280     glContext->hooks->gl.glGetBooleanv(pname, data);
   2281     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2282     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2283 
   2284     void *pointerArgs[] = {
   2285         (void *) data,
   2286     };
   2287 
   2288     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2289                               threadStartTime, threadEndTime,
   2290                               &glmsg, pointerArgs);
   2291     glContext->traceGLMessage(&glmsg);
   2292 }
   2293 
   2294 void GLTrace_glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) {
   2295     GLMessage glmsg;
   2296     GLTraceContext *glContext = getGLTraceContext();
   2297 
   2298     glmsg.set_function(GLMessage::glGetBufferParameteriv);
   2299 
   2300     // copy argument target
   2301     GLMessage_DataType *arg_target = glmsg.add_args();
   2302     arg_target->set_isarray(false);
   2303     arg_target->set_type(GLMessage::DataType::ENUM);
   2304     arg_target->add_intvalue((int)target);
   2305 
   2306     // copy argument pname
   2307     GLMessage_DataType *arg_pname = glmsg.add_args();
   2308     arg_pname->set_isarray(false);
   2309     arg_pname->set_type(GLMessage::DataType::ENUM);
   2310     arg_pname->add_intvalue((int)pname);
   2311 
   2312     // copy argument params
   2313     GLMessage_DataType *arg_params = glmsg.add_args();
   2314     arg_params->set_isarray(false);
   2315     arg_params->set_type(GLMessage::DataType::INT64);
   2316     arg_params->add_int64value((uintptr_t)params);
   2317 
   2318     // call function
   2319     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2320     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2321     glContext->hooks->gl.glGetBufferParameteriv(target, pname, params);
   2322     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2323     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2324 
   2325     void *pointerArgs[] = {
   2326         (void *) params,
   2327     };
   2328 
   2329     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2330                               threadStartTime, threadEndTime,
   2331                               &glmsg, pointerArgs);
   2332     glContext->traceGLMessage(&glmsg);
   2333 }
   2334 
   2335 GLenum GLTrace_glGetError(void) {
   2336     GLMessage glmsg;
   2337     GLTraceContext *glContext = getGLTraceContext();
   2338 
   2339     glmsg.set_function(GLMessage::glGetError);
   2340 
   2341     // call function
   2342     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2343     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2344     GLenum retValue = glContext->hooks->gl.glGetError();
   2345     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2346     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2347 
   2348     // set return value
   2349     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   2350     rt->set_isarray(false);
   2351     rt->set_type(GLMessage::DataType::ENUM);
   2352     rt->add_intvalue((int)retValue);
   2353 
   2354     void *pointerArgs[] = {
   2355     };
   2356 
   2357     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2358                               threadStartTime, threadEndTime,
   2359                               &glmsg, pointerArgs);
   2360     glContext->traceGLMessage(&glmsg);
   2361 
   2362     return retValue;
   2363 }
   2364 
   2365 void GLTrace_glGetFloatv(GLenum pname, GLfloat * data) {
   2366     GLMessage glmsg;
   2367     GLTraceContext *glContext = getGLTraceContext();
   2368 
   2369     glmsg.set_function(GLMessage::glGetFloatv);
   2370 
   2371     // copy argument pname
   2372     GLMessage_DataType *arg_pname = glmsg.add_args();
   2373     arg_pname->set_isarray(false);
   2374     arg_pname->set_type(GLMessage::DataType::ENUM);
   2375     arg_pname->add_intvalue((int)pname);
   2376 
   2377     // copy argument data
   2378     GLMessage_DataType *arg_data = glmsg.add_args();
   2379     arg_data->set_isarray(false);
   2380     arg_data->set_type(GLMessage::DataType::INT64);
   2381     arg_data->add_int64value((uintptr_t)data);
   2382 
   2383     // call function
   2384     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2385     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2386     glContext->hooks->gl.glGetFloatv(pname, data);
   2387     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2388     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2389 
   2390     void *pointerArgs[] = {
   2391         (void *) data,
   2392     };
   2393 
   2394     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2395                               threadStartTime, threadEndTime,
   2396                               &glmsg, pointerArgs);
   2397     glContext->traceGLMessage(&glmsg);
   2398 }
   2399 
   2400 void GLTrace_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint * params) {
   2401     GLMessage glmsg;
   2402     GLTraceContext *glContext = getGLTraceContext();
   2403 
   2404     glmsg.set_function(GLMessage::glGetFramebufferAttachmentParameteriv);
   2405 
   2406     // copy argument target
   2407     GLMessage_DataType *arg_target = glmsg.add_args();
   2408     arg_target->set_isarray(false);
   2409     arg_target->set_type(GLMessage::DataType::ENUM);
   2410     arg_target->add_intvalue((int)target);
   2411 
   2412     // copy argument attachment
   2413     GLMessage_DataType *arg_attachment = glmsg.add_args();
   2414     arg_attachment->set_isarray(false);
   2415     arg_attachment->set_type(GLMessage::DataType::ENUM);
   2416     arg_attachment->add_intvalue((int)attachment);
   2417 
   2418     // copy argument pname
   2419     GLMessage_DataType *arg_pname = glmsg.add_args();
   2420     arg_pname->set_isarray(false);
   2421     arg_pname->set_type(GLMessage::DataType::ENUM);
   2422     arg_pname->add_intvalue((int)pname);
   2423 
   2424     // copy argument params
   2425     GLMessage_DataType *arg_params = glmsg.add_args();
   2426     arg_params->set_isarray(false);
   2427     arg_params->set_type(GLMessage::DataType::INT64);
   2428     arg_params->add_int64value((uintptr_t)params);
   2429 
   2430     // call function
   2431     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2432     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2433     glContext->hooks->gl.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
   2434     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2435     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2436 
   2437     void *pointerArgs[] = {
   2438         (void *) params,
   2439     };
   2440 
   2441     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2442                               threadStartTime, threadEndTime,
   2443                               &glmsg, pointerArgs);
   2444     glContext->traceGLMessage(&glmsg);
   2445 }
   2446 
   2447 void GLTrace_glGetIntegerv(GLenum pname, GLint * data) {
   2448     GLMessage glmsg;
   2449     GLTraceContext *glContext = getGLTraceContext();
   2450 
   2451     glmsg.set_function(GLMessage::glGetIntegerv);
   2452 
   2453     // copy argument pname
   2454     GLMessage_DataType *arg_pname = glmsg.add_args();
   2455     arg_pname->set_isarray(false);
   2456     arg_pname->set_type(GLMessage::DataType::ENUM);
   2457     arg_pname->add_intvalue((int)pname);
   2458 
   2459     // copy argument data
   2460     GLMessage_DataType *arg_data = glmsg.add_args();
   2461     arg_data->set_isarray(false);
   2462     arg_data->set_type(GLMessage::DataType::INT64);
   2463     arg_data->add_int64value((uintptr_t)data);
   2464 
   2465     // call function
   2466     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2467     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2468     glContext->hooks->gl.glGetIntegerv(pname, data);
   2469     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2470     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2471 
   2472     void *pointerArgs[] = {
   2473         (void *) data,
   2474     };
   2475 
   2476     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2477                               threadStartTime, threadEndTime,
   2478                               &glmsg, pointerArgs);
   2479     glContext->traceGLMessage(&glmsg);
   2480 }
   2481 
   2482 void GLTrace_glGetProgramiv(GLuint program, GLenum pname, GLint * params) {
   2483     GLMessage glmsg;
   2484     GLTraceContext *glContext = getGLTraceContext();
   2485 
   2486     glmsg.set_function(GLMessage::glGetProgramiv);
   2487 
   2488     // copy argument program
   2489     GLMessage_DataType *arg_program = glmsg.add_args();
   2490     arg_program->set_isarray(false);
   2491     arg_program->set_type(GLMessage::DataType::INT);
   2492     arg_program->add_intvalue(program);
   2493 
   2494     // copy argument pname
   2495     GLMessage_DataType *arg_pname = glmsg.add_args();
   2496     arg_pname->set_isarray(false);
   2497     arg_pname->set_type(GLMessage::DataType::ENUM);
   2498     arg_pname->add_intvalue((int)pname);
   2499 
   2500     // copy argument params
   2501     GLMessage_DataType *arg_params = glmsg.add_args();
   2502     arg_params->set_isarray(false);
   2503     arg_params->set_type(GLMessage::DataType::INT64);
   2504     arg_params->add_int64value((uintptr_t)params);
   2505 
   2506     // call function
   2507     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2508     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2509     glContext->hooks->gl.glGetProgramiv(program, pname, params);
   2510     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2511     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2512 
   2513     void *pointerArgs[] = {
   2514         (void *) params,
   2515     };
   2516 
   2517     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2518                               threadStartTime, threadEndTime,
   2519                               &glmsg, pointerArgs);
   2520     glContext->traceGLMessage(&glmsg);
   2521 }
   2522 
   2523 void GLTrace_glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {
   2524     GLMessage glmsg;
   2525     GLTraceContext *glContext = getGLTraceContext();
   2526 
   2527     glmsg.set_function(GLMessage::glGetProgramInfoLog);
   2528 
   2529     // copy argument program
   2530     GLMessage_DataType *arg_program = glmsg.add_args();
   2531     arg_program->set_isarray(false);
   2532     arg_program->set_type(GLMessage::DataType::INT);
   2533     arg_program->add_intvalue(program);
   2534 
   2535     // copy argument bufSize
   2536     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   2537     arg_bufSize->set_isarray(false);
   2538     arg_bufSize->set_type(GLMessage::DataType::INT);
   2539     arg_bufSize->add_intvalue(bufSize);
   2540 
   2541     // copy argument length
   2542     GLMessage_DataType *arg_length = glmsg.add_args();
   2543     arg_length->set_isarray(false);
   2544     arg_length->set_type(GLMessage::DataType::INT64);
   2545     arg_length->add_int64value((uintptr_t)length);
   2546 
   2547     // copy argument infoLog
   2548     GLMessage_DataType *arg_infoLog = glmsg.add_args();
   2549     arg_infoLog->set_isarray(false);
   2550     arg_infoLog->set_type(GLMessage::DataType::INT64);
   2551     arg_infoLog->add_int64value((uintptr_t)infoLog);
   2552 
   2553     // call function
   2554     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2555     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2556     glContext->hooks->gl.glGetProgramInfoLog(program, bufSize, length, infoLog);
   2557     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2558     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2559 
   2560     void *pointerArgs[] = {
   2561         (void *) length,
   2562         (void *) infoLog,
   2563     };
   2564 
   2565     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2566                               threadStartTime, threadEndTime,
   2567                               &glmsg, pointerArgs);
   2568     glContext->traceGLMessage(&glmsg);
   2569 }
   2570 
   2571 void GLTrace_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint * params) {
   2572     GLMessage glmsg;
   2573     GLTraceContext *glContext = getGLTraceContext();
   2574 
   2575     glmsg.set_function(GLMessage::glGetRenderbufferParameteriv);
   2576 
   2577     // copy argument target
   2578     GLMessage_DataType *arg_target = glmsg.add_args();
   2579     arg_target->set_isarray(false);
   2580     arg_target->set_type(GLMessage::DataType::ENUM);
   2581     arg_target->add_intvalue((int)target);
   2582 
   2583     // copy argument pname
   2584     GLMessage_DataType *arg_pname = glmsg.add_args();
   2585     arg_pname->set_isarray(false);
   2586     arg_pname->set_type(GLMessage::DataType::ENUM);
   2587     arg_pname->add_intvalue((int)pname);
   2588 
   2589     // copy argument params
   2590     GLMessage_DataType *arg_params = glmsg.add_args();
   2591     arg_params->set_isarray(false);
   2592     arg_params->set_type(GLMessage::DataType::INT64);
   2593     arg_params->add_int64value((uintptr_t)params);
   2594 
   2595     // call function
   2596     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2597     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2598     glContext->hooks->gl.glGetRenderbufferParameteriv(target, pname, params);
   2599     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2600     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2601 
   2602     void *pointerArgs[] = {
   2603         (void *) params,
   2604     };
   2605 
   2606     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2607                               threadStartTime, threadEndTime,
   2608                               &glmsg, pointerArgs);
   2609     glContext->traceGLMessage(&glmsg);
   2610 }
   2611 
   2612 void GLTrace_glGetShaderiv(GLuint shader, GLenum pname, GLint * params) {
   2613     GLMessage glmsg;
   2614     GLTraceContext *glContext = getGLTraceContext();
   2615 
   2616     glmsg.set_function(GLMessage::glGetShaderiv);
   2617 
   2618     // copy argument shader
   2619     GLMessage_DataType *arg_shader = glmsg.add_args();
   2620     arg_shader->set_isarray(false);
   2621     arg_shader->set_type(GLMessage::DataType::INT);
   2622     arg_shader->add_intvalue(shader);
   2623 
   2624     // copy argument pname
   2625     GLMessage_DataType *arg_pname = glmsg.add_args();
   2626     arg_pname->set_isarray(false);
   2627     arg_pname->set_type(GLMessage::DataType::ENUM);
   2628     arg_pname->add_intvalue((int)pname);
   2629 
   2630     // copy argument params
   2631     GLMessage_DataType *arg_params = glmsg.add_args();
   2632     arg_params->set_isarray(false);
   2633     arg_params->set_type(GLMessage::DataType::INT64);
   2634     arg_params->add_int64value((uintptr_t)params);
   2635 
   2636     // call function
   2637     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2638     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2639     glContext->hooks->gl.glGetShaderiv(shader, pname, params);
   2640     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2641     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2642 
   2643     void *pointerArgs[] = {
   2644         (void *) params,
   2645     };
   2646 
   2647     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2648                               threadStartTime, threadEndTime,
   2649                               &glmsg, pointerArgs);
   2650     glContext->traceGLMessage(&glmsg);
   2651 }
   2652 
   2653 void GLTrace_glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {
   2654     GLMessage glmsg;
   2655     GLTraceContext *glContext = getGLTraceContext();
   2656 
   2657     glmsg.set_function(GLMessage::glGetShaderInfoLog);
   2658 
   2659     // copy argument shader
   2660     GLMessage_DataType *arg_shader = glmsg.add_args();
   2661     arg_shader->set_isarray(false);
   2662     arg_shader->set_type(GLMessage::DataType::INT);
   2663     arg_shader->add_intvalue(shader);
   2664 
   2665     // copy argument bufSize
   2666     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   2667     arg_bufSize->set_isarray(false);
   2668     arg_bufSize->set_type(GLMessage::DataType::INT);
   2669     arg_bufSize->add_intvalue(bufSize);
   2670 
   2671     // copy argument length
   2672     GLMessage_DataType *arg_length = glmsg.add_args();
   2673     arg_length->set_isarray(false);
   2674     arg_length->set_type(GLMessage::DataType::INT64);
   2675     arg_length->add_int64value((uintptr_t)length);
   2676 
   2677     // copy argument infoLog
   2678     GLMessage_DataType *arg_infoLog = glmsg.add_args();
   2679     arg_infoLog->set_isarray(false);
   2680     arg_infoLog->set_type(GLMessage::DataType::INT64);
   2681     arg_infoLog->add_int64value((uintptr_t)infoLog);
   2682 
   2683     // call function
   2684     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2685     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2686     glContext->hooks->gl.glGetShaderInfoLog(shader, bufSize, length, infoLog);
   2687     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2688     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2689 
   2690     void *pointerArgs[] = {
   2691         (void *) length,
   2692         (void *) infoLog,
   2693     };
   2694 
   2695     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2696                               threadStartTime, threadEndTime,
   2697                               &glmsg, pointerArgs);
   2698     glContext->traceGLMessage(&glmsg);
   2699 }
   2700 
   2701 void GLTrace_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision) {
   2702     GLMessage glmsg;
   2703     GLTraceContext *glContext = getGLTraceContext();
   2704 
   2705     glmsg.set_function(GLMessage::glGetShaderPrecisionFormat);
   2706 
   2707     // copy argument shadertype
   2708     GLMessage_DataType *arg_shadertype = glmsg.add_args();
   2709     arg_shadertype->set_isarray(false);
   2710     arg_shadertype->set_type(GLMessage::DataType::ENUM);
   2711     arg_shadertype->add_intvalue((int)shadertype);
   2712 
   2713     // copy argument precisiontype
   2714     GLMessage_DataType *arg_precisiontype = glmsg.add_args();
   2715     arg_precisiontype->set_isarray(false);
   2716     arg_precisiontype->set_type(GLMessage::DataType::ENUM);
   2717     arg_precisiontype->add_intvalue((int)precisiontype);
   2718 
   2719     // copy argument range
   2720     GLMessage_DataType *arg_range = glmsg.add_args();
   2721     arg_range->set_isarray(false);
   2722     arg_range->set_type(GLMessage::DataType::INT64);
   2723     arg_range->add_int64value((uintptr_t)range);
   2724 
   2725     // copy argument precision
   2726     GLMessage_DataType *arg_precision = glmsg.add_args();
   2727     arg_precision->set_isarray(false);
   2728     arg_precision->set_type(GLMessage::DataType::INT64);
   2729     arg_precision->add_int64value((uintptr_t)precision);
   2730 
   2731     // call function
   2732     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2733     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2734     glContext->hooks->gl.glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
   2735     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2736     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2737 
   2738     void *pointerArgs[] = {
   2739         (void *) range,
   2740         (void *) precision,
   2741     };
   2742 
   2743     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2744                               threadStartTime, threadEndTime,
   2745                               &glmsg, pointerArgs);
   2746     glContext->traceGLMessage(&glmsg);
   2747 }
   2748 
   2749 void GLTrace_glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source) {
   2750     GLMessage glmsg;
   2751     GLTraceContext *glContext = getGLTraceContext();
   2752 
   2753     glmsg.set_function(GLMessage::glGetShaderSource);
   2754 
   2755     // copy argument shader
   2756     GLMessage_DataType *arg_shader = glmsg.add_args();
   2757     arg_shader->set_isarray(false);
   2758     arg_shader->set_type(GLMessage::DataType::INT);
   2759     arg_shader->add_intvalue(shader);
   2760 
   2761     // copy argument bufSize
   2762     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   2763     arg_bufSize->set_isarray(false);
   2764     arg_bufSize->set_type(GLMessage::DataType::INT);
   2765     arg_bufSize->add_intvalue(bufSize);
   2766 
   2767     // copy argument length
   2768     GLMessage_DataType *arg_length = glmsg.add_args();
   2769     arg_length->set_isarray(false);
   2770     arg_length->set_type(GLMessage::DataType::INT64);
   2771     arg_length->add_int64value((uintptr_t)length);
   2772 
   2773     // copy argument source
   2774     GLMessage_DataType *arg_source = glmsg.add_args();
   2775     arg_source->set_isarray(false);
   2776     arg_source->set_type(GLMessage::DataType::INT64);
   2777     arg_source->add_int64value((uintptr_t)source);
   2778 
   2779     // call function
   2780     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2781     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2782     glContext->hooks->gl.glGetShaderSource(shader, bufSize, length, source);
   2783     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2784     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2785 
   2786     void *pointerArgs[] = {
   2787         (void *) length,
   2788         (void *) source,
   2789     };
   2790 
   2791     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2792                               threadStartTime, threadEndTime,
   2793                               &glmsg, pointerArgs);
   2794     glContext->traceGLMessage(&glmsg);
   2795 }
   2796 
   2797 const GLubyte * GLTrace_glGetString(GLenum name) {
   2798     GLMessage glmsg;
   2799     GLTraceContext *glContext = getGLTraceContext();
   2800 
   2801     glmsg.set_function(GLMessage::glGetString);
   2802 
   2803     // copy argument name
   2804     GLMessage_DataType *arg_name = glmsg.add_args();
   2805     arg_name->set_isarray(false);
   2806     arg_name->set_type(GLMessage::DataType::ENUM);
   2807     arg_name->add_intvalue((int)name);
   2808 
   2809     // call function
   2810     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2811     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2812     const GLubyte * retValue = glContext->hooks->gl.glGetString(name);
   2813     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2814     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2815 
   2816     // set return value
   2817     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   2818     rt->set_isarray(false);
   2819     rt->set_type(GLMessage::DataType::INT64);
   2820     rt->add_int64value((uintptr_t)retValue);
   2821 
   2822     void *pointerArgs[] = {
   2823         (void *) retValue,
   2824     };
   2825 
   2826     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2827                               threadStartTime, threadEndTime,
   2828                               &glmsg, pointerArgs);
   2829     glContext->traceGLMessage(&glmsg);
   2830 
   2831     return retValue;
   2832 }
   2833 
   2834 void GLTrace_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params) {
   2835     GLMessage glmsg;
   2836     GLTraceContext *glContext = getGLTraceContext();
   2837 
   2838     glmsg.set_function(GLMessage::glGetTexParameterfv);
   2839 
   2840     // copy argument target
   2841     GLMessage_DataType *arg_target = glmsg.add_args();
   2842     arg_target->set_isarray(false);
   2843     arg_target->set_type(GLMessage::DataType::ENUM);
   2844     arg_target->add_intvalue((int)target);
   2845 
   2846     // copy argument pname
   2847     GLMessage_DataType *arg_pname = glmsg.add_args();
   2848     arg_pname->set_isarray(false);
   2849     arg_pname->set_type(GLMessage::DataType::ENUM);
   2850     arg_pname->add_intvalue((int)pname);
   2851 
   2852     // copy argument params
   2853     GLMessage_DataType *arg_params = glmsg.add_args();
   2854     arg_params->set_isarray(false);
   2855     arg_params->set_type(GLMessage::DataType::INT64);
   2856     arg_params->add_int64value((uintptr_t)params);
   2857 
   2858     // call function
   2859     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2860     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2861     glContext->hooks->gl.glGetTexParameterfv(target, pname, params);
   2862     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2863     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2864 
   2865     void *pointerArgs[] = {
   2866         (void *) params,
   2867     };
   2868 
   2869     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2870                               threadStartTime, threadEndTime,
   2871                               &glmsg, pointerArgs);
   2872     glContext->traceGLMessage(&glmsg);
   2873 }
   2874 
   2875 void GLTrace_glGetTexParameteriv(GLenum target, GLenum pname, GLint * params) {
   2876     GLMessage glmsg;
   2877     GLTraceContext *glContext = getGLTraceContext();
   2878 
   2879     glmsg.set_function(GLMessage::glGetTexParameteriv);
   2880 
   2881     // copy argument target
   2882     GLMessage_DataType *arg_target = glmsg.add_args();
   2883     arg_target->set_isarray(false);
   2884     arg_target->set_type(GLMessage::DataType::ENUM);
   2885     arg_target->add_intvalue((int)target);
   2886 
   2887     // copy argument pname
   2888     GLMessage_DataType *arg_pname = glmsg.add_args();
   2889     arg_pname->set_isarray(false);
   2890     arg_pname->set_type(GLMessage::DataType::ENUM);
   2891     arg_pname->add_intvalue((int)pname);
   2892 
   2893     // copy argument params
   2894     GLMessage_DataType *arg_params = glmsg.add_args();
   2895     arg_params->set_isarray(false);
   2896     arg_params->set_type(GLMessage::DataType::INT64);
   2897     arg_params->add_int64value((uintptr_t)params);
   2898 
   2899     // call function
   2900     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2901     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2902     glContext->hooks->gl.glGetTexParameteriv(target, pname, params);
   2903     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2904     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2905 
   2906     void *pointerArgs[] = {
   2907         (void *) params,
   2908     };
   2909 
   2910     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2911                               threadStartTime, threadEndTime,
   2912                               &glmsg, pointerArgs);
   2913     glContext->traceGLMessage(&glmsg);
   2914 }
   2915 
   2916 void GLTrace_glGetUniformfv(GLuint program, GLint location, GLfloat * params) {
   2917     GLMessage glmsg;
   2918     GLTraceContext *glContext = getGLTraceContext();
   2919 
   2920     glmsg.set_function(GLMessage::glGetUniformfv);
   2921 
   2922     // copy argument program
   2923     GLMessage_DataType *arg_program = glmsg.add_args();
   2924     arg_program->set_isarray(false);
   2925     arg_program->set_type(GLMessage::DataType::INT);
   2926     arg_program->add_intvalue(program);
   2927 
   2928     // copy argument location
   2929     GLMessage_DataType *arg_location = glmsg.add_args();
   2930     arg_location->set_isarray(false);
   2931     arg_location->set_type(GLMessage::DataType::INT);
   2932     arg_location->add_intvalue(location);
   2933 
   2934     // copy argument params
   2935     GLMessage_DataType *arg_params = glmsg.add_args();
   2936     arg_params->set_isarray(false);
   2937     arg_params->set_type(GLMessage::DataType::INT64);
   2938     arg_params->add_int64value((uintptr_t)params);
   2939 
   2940     // call function
   2941     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2942     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2943     glContext->hooks->gl.glGetUniformfv(program, location, params);
   2944     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2945     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2946 
   2947     void *pointerArgs[] = {
   2948         (void *) params,
   2949     };
   2950 
   2951     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2952                               threadStartTime, threadEndTime,
   2953                               &glmsg, pointerArgs);
   2954     glContext->traceGLMessage(&glmsg);
   2955 }
   2956 
   2957 void GLTrace_glGetUniformiv(GLuint program, GLint location, GLint * params) {
   2958     GLMessage glmsg;
   2959     GLTraceContext *glContext = getGLTraceContext();
   2960 
   2961     glmsg.set_function(GLMessage::glGetUniformiv);
   2962 
   2963     // copy argument program
   2964     GLMessage_DataType *arg_program = glmsg.add_args();
   2965     arg_program->set_isarray(false);
   2966     arg_program->set_type(GLMessage::DataType::INT);
   2967     arg_program->add_intvalue(program);
   2968 
   2969     // copy argument location
   2970     GLMessage_DataType *arg_location = glmsg.add_args();
   2971     arg_location->set_isarray(false);
   2972     arg_location->set_type(GLMessage::DataType::INT);
   2973     arg_location->add_intvalue(location);
   2974 
   2975     // copy argument params
   2976     GLMessage_DataType *arg_params = glmsg.add_args();
   2977     arg_params->set_isarray(false);
   2978     arg_params->set_type(GLMessage::DataType::INT64);
   2979     arg_params->add_int64value((uintptr_t)params);
   2980 
   2981     // call function
   2982     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2983     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   2984     glContext->hooks->gl.glGetUniformiv(program, location, params);
   2985     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   2986     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   2987 
   2988     void *pointerArgs[] = {
   2989         (void *) params,
   2990     };
   2991 
   2992     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   2993                               threadStartTime, threadEndTime,
   2994                               &glmsg, pointerArgs);
   2995     glContext->traceGLMessage(&glmsg);
   2996 }
   2997 
   2998 GLint GLTrace_glGetUniformLocation(GLuint program, const GLchar * name) {
   2999     GLMessage glmsg;
   3000     GLTraceContext *glContext = getGLTraceContext();
   3001 
   3002     glmsg.set_function(GLMessage::glGetUniformLocation);
   3003 
   3004     // copy argument program
   3005     GLMessage_DataType *arg_program = glmsg.add_args();
   3006     arg_program->set_isarray(false);
   3007     arg_program->set_type(GLMessage::DataType::INT);
   3008     arg_program->add_intvalue(program);
   3009 
   3010     // copy argument name
   3011     GLMessage_DataType *arg_name = glmsg.add_args();
   3012     arg_name->set_isarray(false);
   3013     arg_name->set_type(GLMessage::DataType::INT64);
   3014     arg_name->add_int64value((uintptr_t)name);
   3015 
   3016     // call function
   3017     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3018     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3019     GLint retValue = glContext->hooks->gl.glGetUniformLocation(program, name);
   3020     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3021     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3022 
   3023     // set return value
   3024     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3025     rt->set_isarray(false);
   3026     rt->set_type(GLMessage::DataType::INT);
   3027     rt->add_intvalue(retValue);
   3028 
   3029     void *pointerArgs[] = {
   3030         (void *) name,
   3031     };
   3032 
   3033     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3034                               threadStartTime, threadEndTime,
   3035                               &glmsg, pointerArgs);
   3036     glContext->traceGLMessage(&glmsg);
   3037 
   3038     return retValue;
   3039 }
   3040 
   3041 void GLTrace_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat * params) {
   3042     GLMessage glmsg;
   3043     GLTraceContext *glContext = getGLTraceContext();
   3044 
   3045     glmsg.set_function(GLMessage::glGetVertexAttribfv);
   3046 
   3047     // copy argument index
   3048     GLMessage_DataType *arg_index = glmsg.add_args();
   3049     arg_index->set_isarray(false);
   3050     arg_index->set_type(GLMessage::DataType::INT);
   3051     arg_index->add_intvalue(index);
   3052 
   3053     // copy argument pname
   3054     GLMessage_DataType *arg_pname = glmsg.add_args();
   3055     arg_pname->set_isarray(false);
   3056     arg_pname->set_type(GLMessage::DataType::ENUM);
   3057     arg_pname->add_intvalue((int)pname);
   3058 
   3059     // copy argument params
   3060     GLMessage_DataType *arg_params = glmsg.add_args();
   3061     arg_params->set_isarray(false);
   3062     arg_params->set_type(GLMessage::DataType::INT64);
   3063     arg_params->add_int64value((uintptr_t)params);
   3064 
   3065     // call function
   3066     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3067     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3068     glContext->hooks->gl.glGetVertexAttribfv(index, pname, params);
   3069     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3070     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3071 
   3072     void *pointerArgs[] = {
   3073         (void *) params,
   3074     };
   3075 
   3076     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3077                               threadStartTime, threadEndTime,
   3078                               &glmsg, pointerArgs);
   3079     glContext->traceGLMessage(&glmsg);
   3080 }
   3081 
   3082 void GLTrace_glGetVertexAttribiv(GLuint index, GLenum pname, GLint * params) {
   3083     GLMessage glmsg;
   3084     GLTraceContext *glContext = getGLTraceContext();
   3085 
   3086     glmsg.set_function(GLMessage::glGetVertexAttribiv);
   3087 
   3088     // copy argument index
   3089     GLMessage_DataType *arg_index = glmsg.add_args();
   3090     arg_index->set_isarray(false);
   3091     arg_index->set_type(GLMessage::DataType::INT);
   3092     arg_index->add_intvalue(index);
   3093 
   3094     // copy argument pname
   3095     GLMessage_DataType *arg_pname = glmsg.add_args();
   3096     arg_pname->set_isarray(false);
   3097     arg_pname->set_type(GLMessage::DataType::ENUM);
   3098     arg_pname->add_intvalue((int)pname);
   3099 
   3100     // copy argument params
   3101     GLMessage_DataType *arg_params = glmsg.add_args();
   3102     arg_params->set_isarray(false);
   3103     arg_params->set_type(GLMessage::DataType::INT64);
   3104     arg_params->add_int64value((uintptr_t)params);
   3105 
   3106     // call function
   3107     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3108     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3109     glContext->hooks->gl.glGetVertexAttribiv(index, pname, params);
   3110     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3111     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3112 
   3113     void *pointerArgs[] = {
   3114         (void *) params,
   3115     };
   3116 
   3117     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3118                               threadStartTime, threadEndTime,
   3119                               &glmsg, pointerArgs);
   3120     glContext->traceGLMessage(&glmsg);
   3121 }
   3122 
   3123 void GLTrace_glGetVertexAttribPointerv(GLuint index, GLenum pname, void ** pointer) {
   3124     GLMessage glmsg;
   3125     GLTraceContext *glContext = getGLTraceContext();
   3126 
   3127     glmsg.set_function(GLMessage::glGetVertexAttribPointerv);
   3128 
   3129     // copy argument index
   3130     GLMessage_DataType *arg_index = glmsg.add_args();
   3131     arg_index->set_isarray(false);
   3132     arg_index->set_type(GLMessage::DataType::INT);
   3133     arg_index->add_intvalue(index);
   3134 
   3135     // copy argument pname
   3136     GLMessage_DataType *arg_pname = glmsg.add_args();
   3137     arg_pname->set_isarray(false);
   3138     arg_pname->set_type(GLMessage::DataType::ENUM);
   3139     arg_pname->add_intvalue((int)pname);
   3140 
   3141     // copy argument pointer
   3142     GLMessage_DataType *arg_pointer = glmsg.add_args();
   3143     arg_pointer->set_isarray(false);
   3144     arg_pointer->set_type(GLMessage::DataType::INT64);
   3145     arg_pointer->add_int64value((uintptr_t)pointer);
   3146 
   3147     // call function
   3148     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3149     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3150     glContext->hooks->gl.glGetVertexAttribPointerv(index, pname, pointer);
   3151     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3152     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3153 
   3154     void *pointerArgs[] = {
   3155         (void *) pointer,
   3156     };
   3157 
   3158     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3159                               threadStartTime, threadEndTime,
   3160                               &glmsg, pointerArgs);
   3161     glContext->traceGLMessage(&glmsg);
   3162 }
   3163 
   3164 void GLTrace_glHint(GLenum target, GLenum mode) {
   3165     GLMessage glmsg;
   3166     GLTraceContext *glContext = getGLTraceContext();
   3167 
   3168     glmsg.set_function(GLMessage::glHint);
   3169 
   3170     // copy argument target
   3171     GLMessage_DataType *arg_target = glmsg.add_args();
   3172     arg_target->set_isarray(false);
   3173     arg_target->set_type(GLMessage::DataType::ENUM);
   3174     arg_target->add_intvalue((int)target);
   3175 
   3176     // copy argument mode
   3177     GLMessage_DataType *arg_mode = glmsg.add_args();
   3178     arg_mode->set_isarray(false);
   3179     arg_mode->set_type(GLMessage::DataType::ENUM);
   3180     arg_mode->add_intvalue((int)mode);
   3181 
   3182     // call function
   3183     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3184     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3185     glContext->hooks->gl.glHint(target, mode);
   3186     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3187     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3188 
   3189     void *pointerArgs[] = {
   3190     };
   3191 
   3192     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3193                               threadStartTime, threadEndTime,
   3194                               &glmsg, pointerArgs);
   3195     glContext->traceGLMessage(&glmsg);
   3196 }
   3197 
   3198 GLboolean GLTrace_glIsBuffer(GLuint buffer) {
   3199     GLMessage glmsg;
   3200     GLTraceContext *glContext = getGLTraceContext();
   3201 
   3202     glmsg.set_function(GLMessage::glIsBuffer);
   3203 
   3204     // copy argument buffer
   3205     GLMessage_DataType *arg_buffer = glmsg.add_args();
   3206     arg_buffer->set_isarray(false);
   3207     arg_buffer->set_type(GLMessage::DataType::INT);
   3208     arg_buffer->add_intvalue(buffer);
   3209 
   3210     // call function
   3211     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3212     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3213     GLboolean retValue = glContext->hooks->gl.glIsBuffer(buffer);
   3214     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3215     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3216 
   3217     // set return value
   3218     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3219     rt->set_isarray(false);
   3220     rt->set_type(GLMessage::DataType::BOOL);
   3221     rt->add_boolvalue(retValue);
   3222 
   3223     void *pointerArgs[] = {
   3224     };
   3225 
   3226     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3227                               threadStartTime, threadEndTime,
   3228                               &glmsg, pointerArgs);
   3229     glContext->traceGLMessage(&glmsg);
   3230 
   3231     return retValue;
   3232 }
   3233 
   3234 GLboolean GLTrace_glIsEnabled(GLenum cap) {
   3235     GLMessage glmsg;
   3236     GLTraceContext *glContext = getGLTraceContext();
   3237 
   3238     glmsg.set_function(GLMessage::glIsEnabled);
   3239 
   3240     // copy argument cap
   3241     GLMessage_DataType *arg_cap = glmsg.add_args();
   3242     arg_cap->set_isarray(false);
   3243     arg_cap->set_type(GLMessage::DataType::ENUM);
   3244     arg_cap->add_intvalue((int)cap);
   3245 
   3246     // call function
   3247     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3248     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3249     GLboolean retValue = glContext->hooks->gl.glIsEnabled(cap);
   3250     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3251     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3252 
   3253     // set return value
   3254     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3255     rt->set_isarray(false);
   3256     rt->set_type(GLMessage::DataType::BOOL);
   3257     rt->add_boolvalue(retValue);
   3258 
   3259     void *pointerArgs[] = {
   3260     };
   3261 
   3262     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3263                               threadStartTime, threadEndTime,
   3264                               &glmsg, pointerArgs);
   3265     glContext->traceGLMessage(&glmsg);
   3266 
   3267     return retValue;
   3268 }
   3269 
   3270 GLboolean GLTrace_glIsFramebuffer(GLuint framebuffer) {
   3271     GLMessage glmsg;
   3272     GLTraceContext *glContext = getGLTraceContext();
   3273 
   3274     glmsg.set_function(GLMessage::glIsFramebuffer);
   3275 
   3276     // copy argument framebuffer
   3277     GLMessage_DataType *arg_framebuffer = glmsg.add_args();
   3278     arg_framebuffer->set_isarray(false);
   3279     arg_framebuffer->set_type(GLMessage::DataType::INT);
   3280     arg_framebuffer->add_intvalue(framebuffer);
   3281 
   3282     // call function
   3283     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3284     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3285     GLboolean retValue = glContext->hooks->gl.glIsFramebuffer(framebuffer);
   3286     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3287     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3288 
   3289     // set return value
   3290     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3291     rt->set_isarray(false);
   3292     rt->set_type(GLMessage::DataType::BOOL);
   3293     rt->add_boolvalue(retValue);
   3294 
   3295     void *pointerArgs[] = {
   3296     };
   3297 
   3298     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3299                               threadStartTime, threadEndTime,
   3300                               &glmsg, pointerArgs);
   3301     glContext->traceGLMessage(&glmsg);
   3302 
   3303     return retValue;
   3304 }
   3305 
   3306 GLboolean GLTrace_glIsProgram(GLuint program) {
   3307     GLMessage glmsg;
   3308     GLTraceContext *glContext = getGLTraceContext();
   3309 
   3310     glmsg.set_function(GLMessage::glIsProgram);
   3311 
   3312     // copy argument program
   3313     GLMessage_DataType *arg_program = glmsg.add_args();
   3314     arg_program->set_isarray(false);
   3315     arg_program->set_type(GLMessage::DataType::INT);
   3316     arg_program->add_intvalue(program);
   3317 
   3318     // call function
   3319     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3320     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3321     GLboolean retValue = glContext->hooks->gl.glIsProgram(program);
   3322     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3323     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3324 
   3325     // set return value
   3326     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3327     rt->set_isarray(false);
   3328     rt->set_type(GLMessage::DataType::BOOL);
   3329     rt->add_boolvalue(retValue);
   3330 
   3331     void *pointerArgs[] = {
   3332     };
   3333 
   3334     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3335                               threadStartTime, threadEndTime,
   3336                               &glmsg, pointerArgs);
   3337     glContext->traceGLMessage(&glmsg);
   3338 
   3339     return retValue;
   3340 }
   3341 
   3342 GLboolean GLTrace_glIsRenderbuffer(GLuint renderbuffer) {
   3343     GLMessage glmsg;
   3344     GLTraceContext *glContext = getGLTraceContext();
   3345 
   3346     glmsg.set_function(GLMessage::glIsRenderbuffer);
   3347 
   3348     // copy argument renderbuffer
   3349     GLMessage_DataType *arg_renderbuffer = glmsg.add_args();
   3350     arg_renderbuffer->set_isarray(false);
   3351     arg_renderbuffer->set_type(GLMessage::DataType::INT);
   3352     arg_renderbuffer->add_intvalue(renderbuffer);
   3353 
   3354     // call function
   3355     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3356     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3357     GLboolean retValue = glContext->hooks->gl.glIsRenderbuffer(renderbuffer);
   3358     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3359     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3360 
   3361     // set return value
   3362     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3363     rt->set_isarray(false);
   3364     rt->set_type(GLMessage::DataType::BOOL);
   3365     rt->add_boolvalue(retValue);
   3366 
   3367     void *pointerArgs[] = {
   3368     };
   3369 
   3370     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3371                               threadStartTime, threadEndTime,
   3372                               &glmsg, pointerArgs);
   3373     glContext->traceGLMessage(&glmsg);
   3374 
   3375     return retValue;
   3376 }
   3377 
   3378 GLboolean GLTrace_glIsShader(GLuint shader) {
   3379     GLMessage glmsg;
   3380     GLTraceContext *glContext = getGLTraceContext();
   3381 
   3382     glmsg.set_function(GLMessage::glIsShader);
   3383 
   3384     // copy argument shader
   3385     GLMessage_DataType *arg_shader = glmsg.add_args();
   3386     arg_shader->set_isarray(false);
   3387     arg_shader->set_type(GLMessage::DataType::INT);
   3388     arg_shader->add_intvalue(shader);
   3389 
   3390     // call function
   3391     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3392     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3393     GLboolean retValue = glContext->hooks->gl.glIsShader(shader);
   3394     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3395     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3396 
   3397     // set return value
   3398     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3399     rt->set_isarray(false);
   3400     rt->set_type(GLMessage::DataType::BOOL);
   3401     rt->add_boolvalue(retValue);
   3402 
   3403     void *pointerArgs[] = {
   3404     };
   3405 
   3406     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3407                               threadStartTime, threadEndTime,
   3408                               &glmsg, pointerArgs);
   3409     glContext->traceGLMessage(&glmsg);
   3410 
   3411     return retValue;
   3412 }
   3413 
   3414 GLboolean GLTrace_glIsTexture(GLuint texture) {
   3415     GLMessage glmsg;
   3416     GLTraceContext *glContext = getGLTraceContext();
   3417 
   3418     glmsg.set_function(GLMessage::glIsTexture);
   3419 
   3420     // copy argument texture
   3421     GLMessage_DataType *arg_texture = glmsg.add_args();
   3422     arg_texture->set_isarray(false);
   3423     arg_texture->set_type(GLMessage::DataType::INT);
   3424     arg_texture->add_intvalue(texture);
   3425 
   3426     // call function
   3427     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3428     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3429     GLboolean retValue = glContext->hooks->gl.glIsTexture(texture);
   3430     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3431     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3432 
   3433     // set return value
   3434     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   3435     rt->set_isarray(false);
   3436     rt->set_type(GLMessage::DataType::BOOL);
   3437     rt->add_boolvalue(retValue);
   3438 
   3439     void *pointerArgs[] = {
   3440     };
   3441 
   3442     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3443                               threadStartTime, threadEndTime,
   3444                               &glmsg, pointerArgs);
   3445     glContext->traceGLMessage(&glmsg);
   3446 
   3447     return retValue;
   3448 }
   3449 
   3450 void GLTrace_glLineWidth(GLfloat width) {
   3451     GLMessage glmsg;
   3452     GLTraceContext *glContext = getGLTraceContext();
   3453 
   3454     glmsg.set_function(GLMessage::glLineWidth);
   3455 
   3456     // copy argument width
   3457     GLMessage_DataType *arg_width = glmsg.add_args();
   3458     arg_width->set_isarray(false);
   3459     arg_width->set_type(GLMessage::DataType::FLOAT);
   3460     arg_width->add_floatvalue(width);
   3461 
   3462     // call function
   3463     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3464     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3465     glContext->hooks->gl.glLineWidth(width);
   3466     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3467     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3468 
   3469     void *pointerArgs[] = {
   3470     };
   3471 
   3472     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3473                               threadStartTime, threadEndTime,
   3474                               &glmsg, pointerArgs);
   3475     glContext->traceGLMessage(&glmsg);
   3476 }
   3477 
   3478 void GLTrace_glLinkProgram(GLuint program) {
   3479     GLMessage glmsg;
   3480     GLTraceContext *glContext = getGLTraceContext();
   3481 
   3482     glmsg.set_function(GLMessage::glLinkProgram);
   3483 
   3484     // copy argument program
   3485     GLMessage_DataType *arg_program = glmsg.add_args();
   3486     arg_program->set_isarray(false);
   3487     arg_program->set_type(GLMessage::DataType::INT);
   3488     arg_program->add_intvalue(program);
   3489 
   3490     // call function
   3491     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3492     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3493     glContext->hooks->gl.glLinkProgram(program);
   3494     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3495     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3496 
   3497     void *pointerArgs[] = {
   3498     };
   3499 
   3500     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3501                               threadStartTime, threadEndTime,
   3502                               &glmsg, pointerArgs);
   3503     glContext->traceGLMessage(&glmsg);
   3504 }
   3505 
   3506 void GLTrace_glPixelStorei(GLenum pname, GLint param) {
   3507     GLMessage glmsg;
   3508     GLTraceContext *glContext = getGLTraceContext();
   3509 
   3510     glmsg.set_function(GLMessage::glPixelStorei);
   3511 
   3512     // copy argument pname
   3513     GLMessage_DataType *arg_pname = glmsg.add_args();
   3514     arg_pname->set_isarray(false);
   3515     arg_pname->set_type(GLMessage::DataType::ENUM);
   3516     arg_pname->add_intvalue((int)pname);
   3517 
   3518     // copy argument param
   3519     GLMessage_DataType *arg_param = glmsg.add_args();
   3520     arg_param->set_isarray(false);
   3521     arg_param->set_type(GLMessage::DataType::INT);
   3522     arg_param->add_intvalue(param);
   3523 
   3524     // call function
   3525     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3526     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3527     glContext->hooks->gl.glPixelStorei(pname, param);
   3528     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3529     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3530 
   3531     void *pointerArgs[] = {
   3532     };
   3533 
   3534     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3535                               threadStartTime, threadEndTime,
   3536                               &glmsg, pointerArgs);
   3537     glContext->traceGLMessage(&glmsg);
   3538 }
   3539 
   3540 void GLTrace_glPolygonOffset(GLfloat factor, GLfloat units) {
   3541     GLMessage glmsg;
   3542     GLTraceContext *glContext = getGLTraceContext();
   3543 
   3544     glmsg.set_function(GLMessage::glPolygonOffset);
   3545 
   3546     // copy argument factor
   3547     GLMessage_DataType *arg_factor = glmsg.add_args();
   3548     arg_factor->set_isarray(false);
   3549     arg_factor->set_type(GLMessage::DataType::FLOAT);
   3550     arg_factor->add_floatvalue(factor);
   3551 
   3552     // copy argument units
   3553     GLMessage_DataType *arg_units = glmsg.add_args();
   3554     arg_units->set_isarray(false);
   3555     arg_units->set_type(GLMessage::DataType::FLOAT);
   3556     arg_units->add_floatvalue(units);
   3557 
   3558     // call function
   3559     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3560     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3561     glContext->hooks->gl.glPolygonOffset(factor, units);
   3562     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3563     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3564 
   3565     void *pointerArgs[] = {
   3566     };
   3567 
   3568     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3569                               threadStartTime, threadEndTime,
   3570                               &glmsg, pointerArgs);
   3571     glContext->traceGLMessage(&glmsg);
   3572 }
   3573 
   3574 void GLTrace_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels) {
   3575     GLMessage glmsg;
   3576     GLTraceContext *glContext = getGLTraceContext();
   3577 
   3578     glmsg.set_function(GLMessage::glReadPixels);
   3579 
   3580     // copy argument x
   3581     GLMessage_DataType *arg_x = glmsg.add_args();
   3582     arg_x->set_isarray(false);
   3583     arg_x->set_type(GLMessage::DataType::INT);
   3584     arg_x->add_intvalue(x);
   3585 
   3586     // copy argument y
   3587     GLMessage_DataType *arg_y = glmsg.add_args();
   3588     arg_y->set_isarray(false);
   3589     arg_y->set_type(GLMessage::DataType::INT);
   3590     arg_y->add_intvalue(y);
   3591 
   3592     // copy argument width
   3593     GLMessage_DataType *arg_width = glmsg.add_args();
   3594     arg_width->set_isarray(false);
   3595     arg_width->set_type(GLMessage::DataType::INT);
   3596     arg_width->add_intvalue(width);
   3597 
   3598     // copy argument height
   3599     GLMessage_DataType *arg_height = glmsg.add_args();
   3600     arg_height->set_isarray(false);
   3601     arg_height->set_type(GLMessage::DataType::INT);
   3602     arg_height->add_intvalue(height);
   3603 
   3604     // copy argument format
   3605     GLMessage_DataType *arg_format = glmsg.add_args();
   3606     arg_format->set_isarray(false);
   3607     arg_format->set_type(GLMessage::DataType::ENUM);
   3608     arg_format->add_intvalue((int)format);
   3609 
   3610     // copy argument type
   3611     GLMessage_DataType *arg_type = glmsg.add_args();
   3612     arg_type->set_isarray(false);
   3613     arg_type->set_type(GLMessage::DataType::ENUM);
   3614     arg_type->add_intvalue((int)type);
   3615 
   3616     // copy argument pixels
   3617     GLMessage_DataType *arg_pixels = glmsg.add_args();
   3618     arg_pixels->set_isarray(false);
   3619     arg_pixels->set_type(GLMessage::DataType::INT64);
   3620     arg_pixels->add_int64value((uintptr_t)pixels);
   3621 
   3622     // call function
   3623     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3624     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3625     glContext->hooks->gl.glReadPixels(x, y, width, height, format, type, pixels);
   3626     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3627     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3628 
   3629     void *pointerArgs[] = {
   3630         (void *) pixels,
   3631     };
   3632 
   3633     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3634                               threadStartTime, threadEndTime,
   3635                               &glmsg, pointerArgs);
   3636     glContext->traceGLMessage(&glmsg);
   3637 }
   3638 
   3639 void GLTrace_glReleaseShaderCompiler(void) {
   3640     GLMessage glmsg;
   3641     GLTraceContext *glContext = getGLTraceContext();
   3642 
   3643     glmsg.set_function(GLMessage::glReleaseShaderCompiler);
   3644 
   3645     // call function
   3646     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3647     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3648     glContext->hooks->gl.glReleaseShaderCompiler();
   3649     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3650     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3651 
   3652     void *pointerArgs[] = {
   3653     };
   3654 
   3655     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3656                               threadStartTime, threadEndTime,
   3657                               &glmsg, pointerArgs);
   3658     glContext->traceGLMessage(&glmsg);
   3659 }
   3660 
   3661 void GLTrace_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
   3662     GLMessage glmsg;
   3663     GLTraceContext *glContext = getGLTraceContext();
   3664 
   3665     glmsg.set_function(GLMessage::glRenderbufferStorage);
   3666 
   3667     // copy argument target
   3668     GLMessage_DataType *arg_target = glmsg.add_args();
   3669     arg_target->set_isarray(false);
   3670     arg_target->set_type(GLMessage::DataType::ENUM);
   3671     arg_target->add_intvalue((int)target);
   3672 
   3673     // copy argument internalformat
   3674     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   3675     arg_internalformat->set_isarray(false);
   3676     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   3677     arg_internalformat->add_intvalue((int)internalformat);
   3678 
   3679     // copy argument width
   3680     GLMessage_DataType *arg_width = glmsg.add_args();
   3681     arg_width->set_isarray(false);
   3682     arg_width->set_type(GLMessage::DataType::INT);
   3683     arg_width->add_intvalue(width);
   3684 
   3685     // copy argument height
   3686     GLMessage_DataType *arg_height = glmsg.add_args();
   3687     arg_height->set_isarray(false);
   3688     arg_height->set_type(GLMessage::DataType::INT);
   3689     arg_height->add_intvalue(height);
   3690 
   3691     // call function
   3692     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3693     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3694     glContext->hooks->gl.glRenderbufferStorage(target, internalformat, width, height);
   3695     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3696     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3697 
   3698     void *pointerArgs[] = {
   3699     };
   3700 
   3701     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3702                               threadStartTime, threadEndTime,
   3703                               &glmsg, pointerArgs);
   3704     glContext->traceGLMessage(&glmsg);
   3705 }
   3706 
   3707 void GLTrace_glSampleCoverage(GLfloat value, GLboolean invert) {
   3708     GLMessage glmsg;
   3709     GLTraceContext *glContext = getGLTraceContext();
   3710 
   3711     glmsg.set_function(GLMessage::glSampleCoverage);
   3712 
   3713     // copy argument value
   3714     GLMessage_DataType *arg_value = glmsg.add_args();
   3715     arg_value->set_isarray(false);
   3716     arg_value->set_type(GLMessage::DataType::FLOAT);
   3717     arg_value->add_floatvalue(value);
   3718 
   3719     // copy argument invert
   3720     GLMessage_DataType *arg_invert = glmsg.add_args();
   3721     arg_invert->set_isarray(false);
   3722     arg_invert->set_type(GLMessage::DataType::BOOL);
   3723     arg_invert->add_boolvalue(invert);
   3724 
   3725     // call function
   3726     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3727     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3728     glContext->hooks->gl.glSampleCoverage(value, invert);
   3729     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3730     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3731 
   3732     void *pointerArgs[] = {
   3733     };
   3734 
   3735     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3736                               threadStartTime, threadEndTime,
   3737                               &glmsg, pointerArgs);
   3738     glContext->traceGLMessage(&glmsg);
   3739 }
   3740 
   3741 void GLTrace_glScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
   3742     GLMessage glmsg;
   3743     GLTraceContext *glContext = getGLTraceContext();
   3744 
   3745     glmsg.set_function(GLMessage::glScissor);
   3746 
   3747     // copy argument x
   3748     GLMessage_DataType *arg_x = glmsg.add_args();
   3749     arg_x->set_isarray(false);
   3750     arg_x->set_type(GLMessage::DataType::INT);
   3751     arg_x->add_intvalue(x);
   3752 
   3753     // copy argument y
   3754     GLMessage_DataType *arg_y = glmsg.add_args();
   3755     arg_y->set_isarray(false);
   3756     arg_y->set_type(GLMessage::DataType::INT);
   3757     arg_y->add_intvalue(y);
   3758 
   3759     // copy argument width
   3760     GLMessage_DataType *arg_width = glmsg.add_args();
   3761     arg_width->set_isarray(false);
   3762     arg_width->set_type(GLMessage::DataType::INT);
   3763     arg_width->add_intvalue(width);
   3764 
   3765     // copy argument height
   3766     GLMessage_DataType *arg_height = glmsg.add_args();
   3767     arg_height->set_isarray(false);
   3768     arg_height->set_type(GLMessage::DataType::INT);
   3769     arg_height->add_intvalue(height);
   3770 
   3771     // call function
   3772     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3773     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3774     glContext->hooks->gl.glScissor(x, y, width, height);
   3775     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3776     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3777 
   3778     void *pointerArgs[] = {
   3779     };
   3780 
   3781     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3782                               threadStartTime, threadEndTime,
   3783                               &glmsg, pointerArgs);
   3784     glContext->traceGLMessage(&glmsg);
   3785 }
   3786 
   3787 void GLTrace_glShaderBinary(GLsizei count, const GLuint * shaders, GLenum binaryformat, const void * binary, GLsizei length) {
   3788     GLMessage glmsg;
   3789     GLTraceContext *glContext = getGLTraceContext();
   3790 
   3791     glmsg.set_function(GLMessage::glShaderBinary);
   3792 
   3793     // copy argument count
   3794     GLMessage_DataType *arg_count = glmsg.add_args();
   3795     arg_count->set_isarray(false);
   3796     arg_count->set_type(GLMessage::DataType::INT);
   3797     arg_count->add_intvalue(count);
   3798 
   3799     // copy argument shaders
   3800     GLMessage_DataType *arg_shaders = glmsg.add_args();
   3801     arg_shaders->set_isarray(false);
   3802     arg_shaders->set_type(GLMessage::DataType::INT64);
   3803     arg_shaders->add_int64value((uintptr_t)shaders);
   3804 
   3805     // copy argument binaryformat
   3806     GLMessage_DataType *arg_binaryformat = glmsg.add_args();
   3807     arg_binaryformat->set_isarray(false);
   3808     arg_binaryformat->set_type(GLMessage::DataType::ENUM);
   3809     arg_binaryformat->add_intvalue((int)binaryformat);
   3810 
   3811     // copy argument binary
   3812     GLMessage_DataType *arg_binary = glmsg.add_args();
   3813     arg_binary->set_isarray(false);
   3814     arg_binary->set_type(GLMessage::DataType::INT64);
   3815     arg_binary->add_int64value((uintptr_t)binary);
   3816 
   3817     // copy argument length
   3818     GLMessage_DataType *arg_length = glmsg.add_args();
   3819     arg_length->set_isarray(false);
   3820     arg_length->set_type(GLMessage::DataType::INT);
   3821     arg_length->add_intvalue(length);
   3822 
   3823     // call function
   3824     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3825     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3826     glContext->hooks->gl.glShaderBinary(count, shaders, binaryformat, binary, length);
   3827     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3828     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3829 
   3830     void *pointerArgs[] = {
   3831         (void *) shaders,
   3832         (void *) binary,
   3833     };
   3834 
   3835     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3836                               threadStartTime, threadEndTime,
   3837                               &glmsg, pointerArgs);
   3838     glContext->traceGLMessage(&glmsg);
   3839 }
   3840 
   3841 void GLTrace_glShaderSource(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length) {
   3842     GLMessage glmsg;
   3843     GLTraceContext *glContext = getGLTraceContext();
   3844 
   3845     glmsg.set_function(GLMessage::glShaderSource);
   3846 
   3847     // copy argument shader
   3848     GLMessage_DataType *arg_shader = glmsg.add_args();
   3849     arg_shader->set_isarray(false);
   3850     arg_shader->set_type(GLMessage::DataType::INT);
   3851     arg_shader->add_intvalue(shader);
   3852 
   3853     // copy argument count
   3854     GLMessage_DataType *arg_count = glmsg.add_args();
   3855     arg_count->set_isarray(false);
   3856     arg_count->set_type(GLMessage::DataType::INT);
   3857     arg_count->add_intvalue(count);
   3858 
   3859     // copy argument string
   3860     GLMessage_DataType *arg_string = glmsg.add_args();
   3861     arg_string->set_isarray(false);
   3862     arg_string->set_type(GLMessage::DataType::INT64);
   3863     arg_string->add_int64value((uintptr_t)string);
   3864 
   3865     // copy argument length
   3866     GLMessage_DataType *arg_length = glmsg.add_args();
   3867     arg_length->set_isarray(false);
   3868     arg_length->set_type(GLMessage::DataType::INT64);
   3869     arg_length->add_int64value((uintptr_t)length);
   3870 
   3871     // call function
   3872     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3873     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3874     glContext->hooks->gl.glShaderSource(shader, count, string, length);
   3875     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3876     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3877 
   3878     void *pointerArgs[] = {
   3879         (void *) string,
   3880         (void *) length,
   3881     };
   3882 
   3883     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3884                               threadStartTime, threadEndTime,
   3885                               &glmsg, pointerArgs);
   3886     glContext->traceGLMessage(&glmsg);
   3887 }
   3888 
   3889 void GLTrace_glStencilFunc(GLenum func, GLint ref, GLuint mask) {
   3890     GLMessage glmsg;
   3891     GLTraceContext *glContext = getGLTraceContext();
   3892 
   3893     glmsg.set_function(GLMessage::glStencilFunc);
   3894 
   3895     // copy argument func
   3896     GLMessage_DataType *arg_func = glmsg.add_args();
   3897     arg_func->set_isarray(false);
   3898     arg_func->set_type(GLMessage::DataType::ENUM);
   3899     arg_func->add_intvalue((int)func);
   3900 
   3901     // copy argument ref
   3902     GLMessage_DataType *arg_ref = glmsg.add_args();
   3903     arg_ref->set_isarray(false);
   3904     arg_ref->set_type(GLMessage::DataType::INT);
   3905     arg_ref->add_intvalue(ref);
   3906 
   3907     // copy argument mask
   3908     GLMessage_DataType *arg_mask = glmsg.add_args();
   3909     arg_mask->set_isarray(false);
   3910     arg_mask->set_type(GLMessage::DataType::INT);
   3911     arg_mask->add_intvalue(mask);
   3912 
   3913     // call function
   3914     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3915     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3916     glContext->hooks->gl.glStencilFunc(func, ref, mask);
   3917     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3918     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3919 
   3920     void *pointerArgs[] = {
   3921     };
   3922 
   3923     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3924                               threadStartTime, threadEndTime,
   3925                               &glmsg, pointerArgs);
   3926     glContext->traceGLMessage(&glmsg);
   3927 }
   3928 
   3929 void GLTrace_glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {
   3930     GLMessage glmsg;
   3931     GLTraceContext *glContext = getGLTraceContext();
   3932 
   3933     glmsg.set_function(GLMessage::glStencilFuncSeparate);
   3934 
   3935     // copy argument face
   3936     GLMessage_DataType *arg_face = glmsg.add_args();
   3937     arg_face->set_isarray(false);
   3938     arg_face->set_type(GLMessage::DataType::ENUM);
   3939     arg_face->add_intvalue((int)face);
   3940 
   3941     // copy argument func
   3942     GLMessage_DataType *arg_func = glmsg.add_args();
   3943     arg_func->set_isarray(false);
   3944     arg_func->set_type(GLMessage::DataType::ENUM);
   3945     arg_func->add_intvalue((int)func);
   3946 
   3947     // copy argument ref
   3948     GLMessage_DataType *arg_ref = glmsg.add_args();
   3949     arg_ref->set_isarray(false);
   3950     arg_ref->set_type(GLMessage::DataType::INT);
   3951     arg_ref->add_intvalue(ref);
   3952 
   3953     // copy argument mask
   3954     GLMessage_DataType *arg_mask = glmsg.add_args();
   3955     arg_mask->set_isarray(false);
   3956     arg_mask->set_type(GLMessage::DataType::INT);
   3957     arg_mask->add_intvalue(mask);
   3958 
   3959     // call function
   3960     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3961     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3962     glContext->hooks->gl.glStencilFuncSeparate(face, func, ref, mask);
   3963     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3964     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3965 
   3966     void *pointerArgs[] = {
   3967     };
   3968 
   3969     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3970                               threadStartTime, threadEndTime,
   3971                               &glmsg, pointerArgs);
   3972     glContext->traceGLMessage(&glmsg);
   3973 }
   3974 
   3975 void GLTrace_glStencilMask(GLuint mask) {
   3976     GLMessage glmsg;
   3977     GLTraceContext *glContext = getGLTraceContext();
   3978 
   3979     glmsg.set_function(GLMessage::glStencilMask);
   3980 
   3981     // copy argument mask
   3982     GLMessage_DataType *arg_mask = glmsg.add_args();
   3983     arg_mask->set_isarray(false);
   3984     arg_mask->set_type(GLMessage::DataType::INT);
   3985     arg_mask->add_intvalue(mask);
   3986 
   3987     // call function
   3988     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3989     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   3990     glContext->hooks->gl.glStencilMask(mask);
   3991     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   3992     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   3993 
   3994     void *pointerArgs[] = {
   3995     };
   3996 
   3997     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   3998                               threadStartTime, threadEndTime,
   3999                               &glmsg, pointerArgs);
   4000     glContext->traceGLMessage(&glmsg);
   4001 }
   4002 
   4003 void GLTrace_glStencilMaskSeparate(GLenum face, GLuint mask) {
   4004     GLMessage glmsg;
   4005     GLTraceContext *glContext = getGLTraceContext();
   4006 
   4007     glmsg.set_function(GLMessage::glStencilMaskSeparate);
   4008 
   4009     // copy argument face
   4010     GLMessage_DataType *arg_face = glmsg.add_args();
   4011     arg_face->set_isarray(false);
   4012     arg_face->set_type(GLMessage::DataType::ENUM);
   4013     arg_face->add_intvalue((int)face);
   4014 
   4015     // copy argument mask
   4016     GLMessage_DataType *arg_mask = glmsg.add_args();
   4017     arg_mask->set_isarray(false);
   4018     arg_mask->set_type(GLMessage::DataType::INT);
   4019     arg_mask->add_intvalue(mask);
   4020 
   4021     // call function
   4022     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4023     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4024     glContext->hooks->gl.glStencilMaskSeparate(face, mask);
   4025     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4026     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4027 
   4028     void *pointerArgs[] = {
   4029     };
   4030 
   4031     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4032                               threadStartTime, threadEndTime,
   4033                               &glmsg, pointerArgs);
   4034     glContext->traceGLMessage(&glmsg);
   4035 }
   4036 
   4037 void GLTrace_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
   4038     GLMessage glmsg;
   4039     GLTraceContext *glContext = getGLTraceContext();
   4040 
   4041     glmsg.set_function(GLMessage::glStencilOp);
   4042 
   4043     // copy argument fail
   4044     GLMessage_DataType *arg_fail = glmsg.add_args();
   4045     arg_fail->set_isarray(false);
   4046     arg_fail->set_type(GLMessage::DataType::ENUM);
   4047     arg_fail->add_intvalue((int)fail);
   4048 
   4049     // copy argument zfail
   4050     GLMessage_DataType *arg_zfail = glmsg.add_args();
   4051     arg_zfail->set_isarray(false);
   4052     arg_zfail->set_type(GLMessage::DataType::ENUM);
   4053     arg_zfail->add_intvalue((int)zfail);
   4054 
   4055     // copy argument zpass
   4056     GLMessage_DataType *arg_zpass = glmsg.add_args();
   4057     arg_zpass->set_isarray(false);
   4058     arg_zpass->set_type(GLMessage::DataType::ENUM);
   4059     arg_zpass->add_intvalue((int)zpass);
   4060 
   4061     // call function
   4062     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4063     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4064     glContext->hooks->gl.glStencilOp(fail, zfail, zpass);
   4065     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4066     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4067 
   4068     void *pointerArgs[] = {
   4069     };
   4070 
   4071     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4072                               threadStartTime, threadEndTime,
   4073                               &glmsg, pointerArgs);
   4074     glContext->traceGLMessage(&glmsg);
   4075 }
   4076 
   4077 void GLTrace_glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) {
   4078     GLMessage glmsg;
   4079     GLTraceContext *glContext = getGLTraceContext();
   4080 
   4081     glmsg.set_function(GLMessage::glStencilOpSeparate);
   4082 
   4083     // copy argument face
   4084     GLMessage_DataType *arg_face = glmsg.add_args();
   4085     arg_face->set_isarray(false);
   4086     arg_face->set_type(GLMessage::DataType::ENUM);
   4087     arg_face->add_intvalue((int)face);
   4088 
   4089     // copy argument sfail
   4090     GLMessage_DataType *arg_sfail = glmsg.add_args();
   4091     arg_sfail->set_isarray(false);
   4092     arg_sfail->set_type(GLMessage::DataType::ENUM);
   4093     arg_sfail->add_intvalue((int)sfail);
   4094 
   4095     // copy argument dpfail
   4096     GLMessage_DataType *arg_dpfail = glmsg.add_args();
   4097     arg_dpfail->set_isarray(false);
   4098     arg_dpfail->set_type(GLMessage::DataType::ENUM);
   4099     arg_dpfail->add_intvalue((int)dpfail);
   4100 
   4101     // copy argument dppass
   4102     GLMessage_DataType *arg_dppass = glmsg.add_args();
   4103     arg_dppass->set_isarray(false);
   4104     arg_dppass->set_type(GLMessage::DataType::ENUM);
   4105     arg_dppass->add_intvalue((int)dppass);
   4106 
   4107     // call function
   4108     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4109     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4110     glContext->hooks->gl.glStencilOpSeparate(face, sfail, dpfail, dppass);
   4111     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4112     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4113 
   4114     void *pointerArgs[] = {
   4115     };
   4116 
   4117     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4118                               threadStartTime, threadEndTime,
   4119                               &glmsg, pointerArgs);
   4120     glContext->traceGLMessage(&glmsg);
   4121 }
   4122 
   4123 void GLTrace_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels) {
   4124     GLMessage glmsg;
   4125     GLTraceContext *glContext = getGLTraceContext();
   4126 
   4127     glmsg.set_function(GLMessage::glTexImage2D);
   4128 
   4129     // copy argument target
   4130     GLMessage_DataType *arg_target = glmsg.add_args();
   4131     arg_target->set_isarray(false);
   4132     arg_target->set_type(GLMessage::DataType::ENUM);
   4133     arg_target->add_intvalue((int)target);
   4134 
   4135     // copy argument level
   4136     GLMessage_DataType *arg_level = glmsg.add_args();
   4137     arg_level->set_isarray(false);
   4138     arg_level->set_type(GLMessage::DataType::INT);
   4139     arg_level->add_intvalue(level);
   4140 
   4141     // copy argument internalformat
   4142     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   4143     arg_internalformat->set_isarray(false);
   4144     arg_internalformat->set_type(GLMessage::DataType::INT);
   4145     arg_internalformat->add_intvalue(internalformat);
   4146 
   4147     // copy argument width
   4148     GLMessage_DataType *arg_width = glmsg.add_args();
   4149     arg_width->set_isarray(false);
   4150     arg_width->set_type(GLMessage::DataType::INT);
   4151     arg_width->add_intvalue(width);
   4152 
   4153     // copy argument height
   4154     GLMessage_DataType *arg_height = glmsg.add_args();
   4155     arg_height->set_isarray(false);
   4156     arg_height->set_type(GLMessage::DataType::INT);
   4157     arg_height->add_intvalue(height);
   4158 
   4159     // copy argument border
   4160     GLMessage_DataType *arg_border = glmsg.add_args();
   4161     arg_border->set_isarray(false);
   4162     arg_border->set_type(GLMessage::DataType::INT);
   4163     arg_border->add_intvalue(border);
   4164 
   4165     // copy argument format
   4166     GLMessage_DataType *arg_format = glmsg.add_args();
   4167     arg_format->set_isarray(false);
   4168     arg_format->set_type(GLMessage::DataType::ENUM);
   4169     arg_format->add_intvalue((int)format);
   4170 
   4171     // copy argument type
   4172     GLMessage_DataType *arg_type = glmsg.add_args();
   4173     arg_type->set_isarray(false);
   4174     arg_type->set_type(GLMessage::DataType::ENUM);
   4175     arg_type->add_intvalue((int)type);
   4176 
   4177     // copy argument pixels
   4178     GLMessage_DataType *arg_pixels = glmsg.add_args();
   4179     arg_pixels->set_isarray(false);
   4180     arg_pixels->set_type(GLMessage::DataType::INT64);
   4181     arg_pixels->add_int64value((uintptr_t)pixels);
   4182 
   4183     // call function
   4184     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4185     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4186     glContext->hooks->gl.glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
   4187     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4188     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4189 
   4190     void *pointerArgs[] = {
   4191         (void *) pixels,
   4192     };
   4193 
   4194     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4195                               threadStartTime, threadEndTime,
   4196                               &glmsg, pointerArgs);
   4197     glContext->traceGLMessage(&glmsg);
   4198 }
   4199 
   4200 void GLTrace_glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
   4201     GLMessage glmsg;
   4202     GLTraceContext *glContext = getGLTraceContext();
   4203 
   4204     glmsg.set_function(GLMessage::glTexParameterf);
   4205 
   4206     // copy argument target
   4207     GLMessage_DataType *arg_target = glmsg.add_args();
   4208     arg_target->set_isarray(false);
   4209     arg_target->set_type(GLMessage::DataType::ENUM);
   4210     arg_target->add_intvalue((int)target);
   4211 
   4212     // copy argument pname
   4213     GLMessage_DataType *arg_pname = glmsg.add_args();
   4214     arg_pname->set_isarray(false);
   4215     arg_pname->set_type(GLMessage::DataType::ENUM);
   4216     arg_pname->add_intvalue((int)pname);
   4217 
   4218     // copy argument param
   4219     GLMessage_DataType *arg_param = glmsg.add_args();
   4220     arg_param->set_isarray(false);
   4221     arg_param->set_type(GLMessage::DataType::FLOAT);
   4222     arg_param->add_floatvalue(param);
   4223 
   4224     // call function
   4225     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4226     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4227     glContext->hooks->gl.glTexParameterf(target, pname, param);
   4228     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4229     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4230 
   4231     void *pointerArgs[] = {
   4232     };
   4233 
   4234     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4235                               threadStartTime, threadEndTime,
   4236                               &glmsg, pointerArgs);
   4237     glContext->traceGLMessage(&glmsg);
   4238 }
   4239 
   4240 void GLTrace_glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params) {
   4241     GLMessage glmsg;
   4242     GLTraceContext *glContext = getGLTraceContext();
   4243 
   4244     glmsg.set_function(GLMessage::glTexParameterfv);
   4245 
   4246     // copy argument target
   4247     GLMessage_DataType *arg_target = glmsg.add_args();
   4248     arg_target->set_isarray(false);
   4249     arg_target->set_type(GLMessage::DataType::ENUM);
   4250     arg_target->add_intvalue((int)target);
   4251 
   4252     // copy argument pname
   4253     GLMessage_DataType *arg_pname = glmsg.add_args();
   4254     arg_pname->set_isarray(false);
   4255     arg_pname->set_type(GLMessage::DataType::ENUM);
   4256     arg_pname->add_intvalue((int)pname);
   4257 
   4258     // copy argument params
   4259     GLMessage_DataType *arg_params = glmsg.add_args();
   4260     arg_params->set_isarray(false);
   4261     arg_params->set_type(GLMessage::DataType::INT64);
   4262     arg_params->add_int64value((uintptr_t)params);
   4263 
   4264     // call function
   4265     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4266     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4267     glContext->hooks->gl.glTexParameterfv(target, pname, params);
   4268     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4269     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4270 
   4271     void *pointerArgs[] = {
   4272         (void *) params,
   4273     };
   4274 
   4275     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4276                               threadStartTime, threadEndTime,
   4277                               &glmsg, pointerArgs);
   4278     glContext->traceGLMessage(&glmsg);
   4279 }
   4280 
   4281 void GLTrace_glTexParameteri(GLenum target, GLenum pname, GLint param) {
   4282     GLMessage glmsg;
   4283     GLTraceContext *glContext = getGLTraceContext();
   4284 
   4285     glmsg.set_function(GLMessage::glTexParameteri);
   4286 
   4287     // copy argument target
   4288     GLMessage_DataType *arg_target = glmsg.add_args();
   4289     arg_target->set_isarray(false);
   4290     arg_target->set_type(GLMessage::DataType::ENUM);
   4291     arg_target->add_intvalue((int)target);
   4292 
   4293     // copy argument pname
   4294     GLMessage_DataType *arg_pname = glmsg.add_args();
   4295     arg_pname->set_isarray(false);
   4296     arg_pname->set_type(GLMessage::DataType::ENUM);
   4297     arg_pname->add_intvalue((int)pname);
   4298 
   4299     // copy argument param
   4300     GLMessage_DataType *arg_param = glmsg.add_args();
   4301     arg_param->set_isarray(false);
   4302     arg_param->set_type(GLMessage::DataType::INT);
   4303     arg_param->add_intvalue(param);
   4304 
   4305     // call function
   4306     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4307     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4308     glContext->hooks->gl.glTexParameteri(target, pname, param);
   4309     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4310     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4311 
   4312     void *pointerArgs[] = {
   4313     };
   4314 
   4315     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4316                               threadStartTime, threadEndTime,
   4317                               &glmsg, pointerArgs);
   4318     glContext->traceGLMessage(&glmsg);
   4319 }
   4320 
   4321 void GLTrace_glTexParameteriv(GLenum target, GLenum pname, const GLint * params) {
   4322     GLMessage glmsg;
   4323     GLTraceContext *glContext = getGLTraceContext();
   4324 
   4325     glmsg.set_function(GLMessage::glTexParameteriv);
   4326 
   4327     // copy argument target
   4328     GLMessage_DataType *arg_target = glmsg.add_args();
   4329     arg_target->set_isarray(false);
   4330     arg_target->set_type(GLMessage::DataType::ENUM);
   4331     arg_target->add_intvalue((int)target);
   4332 
   4333     // copy argument pname
   4334     GLMessage_DataType *arg_pname = glmsg.add_args();
   4335     arg_pname->set_isarray(false);
   4336     arg_pname->set_type(GLMessage::DataType::ENUM);
   4337     arg_pname->add_intvalue((int)pname);
   4338 
   4339     // copy argument params
   4340     GLMessage_DataType *arg_params = glmsg.add_args();
   4341     arg_params->set_isarray(false);
   4342     arg_params->set_type(GLMessage::DataType::INT64);
   4343     arg_params->add_int64value((uintptr_t)params);
   4344 
   4345     // call function
   4346     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4347     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4348     glContext->hooks->gl.glTexParameteriv(target, pname, params);
   4349     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4350     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4351 
   4352     void *pointerArgs[] = {
   4353         (void *) params,
   4354     };
   4355 
   4356     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4357                               threadStartTime, threadEndTime,
   4358                               &glmsg, pointerArgs);
   4359     glContext->traceGLMessage(&glmsg);
   4360 }
   4361 
   4362 void GLTrace_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels) {
   4363     GLMessage glmsg;
   4364     GLTraceContext *glContext = getGLTraceContext();
   4365 
   4366     glmsg.set_function(GLMessage::glTexSubImage2D);
   4367 
   4368     // copy argument target
   4369     GLMessage_DataType *arg_target = glmsg.add_args();
   4370     arg_target->set_isarray(false);
   4371     arg_target->set_type(GLMessage::DataType::ENUM);
   4372     arg_target->add_intvalue((int)target);
   4373 
   4374     // copy argument level
   4375     GLMessage_DataType *arg_level = glmsg.add_args();
   4376     arg_level->set_isarray(false);
   4377     arg_level->set_type(GLMessage::DataType::INT);
   4378     arg_level->add_intvalue(level);
   4379 
   4380     // copy argument xoffset
   4381     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   4382     arg_xoffset->set_isarray(false);
   4383     arg_xoffset->set_type(GLMessage::DataType::INT);
   4384     arg_xoffset->add_intvalue(xoffset);
   4385 
   4386     // copy argument yoffset
   4387     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   4388     arg_yoffset->set_isarray(false);
   4389     arg_yoffset->set_type(GLMessage::DataType::INT);
   4390     arg_yoffset->add_intvalue(yoffset);
   4391 
   4392     // copy argument width
   4393     GLMessage_DataType *arg_width = glmsg.add_args();
   4394     arg_width->set_isarray(false);
   4395     arg_width->set_type(GLMessage::DataType::INT);
   4396     arg_width->add_intvalue(width);
   4397 
   4398     // copy argument height
   4399     GLMessage_DataType *arg_height = glmsg.add_args();
   4400     arg_height->set_isarray(false);
   4401     arg_height->set_type(GLMessage::DataType::INT);
   4402     arg_height->add_intvalue(height);
   4403 
   4404     // copy argument format
   4405     GLMessage_DataType *arg_format = glmsg.add_args();
   4406     arg_format->set_isarray(false);
   4407     arg_format->set_type(GLMessage::DataType::ENUM);
   4408     arg_format->add_intvalue((int)format);
   4409 
   4410     // copy argument type
   4411     GLMessage_DataType *arg_type = glmsg.add_args();
   4412     arg_type->set_isarray(false);
   4413     arg_type->set_type(GLMessage::DataType::ENUM);
   4414     arg_type->add_intvalue((int)type);
   4415 
   4416     // copy argument pixels
   4417     GLMessage_DataType *arg_pixels = glmsg.add_args();
   4418     arg_pixels->set_isarray(false);
   4419     arg_pixels->set_type(GLMessage::DataType::INT64);
   4420     arg_pixels->add_int64value((uintptr_t)pixels);
   4421 
   4422     // call function
   4423     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4424     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4425     glContext->hooks->gl.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
   4426     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4427     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4428 
   4429     void *pointerArgs[] = {
   4430         (void *) pixels,
   4431     };
   4432 
   4433     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4434                               threadStartTime, threadEndTime,
   4435                               &glmsg, pointerArgs);
   4436     glContext->traceGLMessage(&glmsg);
   4437 }
   4438 
   4439 void GLTrace_glUniform1f(GLint location, GLfloat v0) {
   4440     GLMessage glmsg;
   4441     GLTraceContext *glContext = getGLTraceContext();
   4442 
   4443     glmsg.set_function(GLMessage::glUniform1f);
   4444 
   4445     // copy argument location
   4446     GLMessage_DataType *arg_location = glmsg.add_args();
   4447     arg_location->set_isarray(false);
   4448     arg_location->set_type(GLMessage::DataType::INT);
   4449     arg_location->add_intvalue(location);
   4450 
   4451     // copy argument v0
   4452     GLMessage_DataType *arg_v0 = glmsg.add_args();
   4453     arg_v0->set_isarray(false);
   4454     arg_v0->set_type(GLMessage::DataType::FLOAT);
   4455     arg_v0->add_floatvalue(v0);
   4456 
   4457     // call function
   4458     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4459     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4460     glContext->hooks->gl.glUniform1f(location, v0);
   4461     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4462     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4463 
   4464     void *pointerArgs[] = {
   4465     };
   4466 
   4467     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4468                               threadStartTime, threadEndTime,
   4469                               &glmsg, pointerArgs);
   4470     glContext->traceGLMessage(&glmsg);
   4471 }
   4472 
   4473 void GLTrace_glUniform1fv(GLint location, GLsizei count, const GLfloat * value) {
   4474     GLMessage glmsg;
   4475     GLTraceContext *glContext = getGLTraceContext();
   4476 
   4477     glmsg.set_function(GLMessage::glUniform1fv);
   4478 
   4479     // copy argument location
   4480     GLMessage_DataType *arg_location = glmsg.add_args();
   4481     arg_location->set_isarray(false);
   4482     arg_location->set_type(GLMessage::DataType::INT);
   4483     arg_location->add_intvalue(location);
   4484 
   4485     // copy argument count
   4486     GLMessage_DataType *arg_count = glmsg.add_args();
   4487     arg_count->set_isarray(false);
   4488     arg_count->set_type(GLMessage::DataType::INT);
   4489     arg_count->add_intvalue(count);
   4490 
   4491     // copy argument value
   4492     GLMessage_DataType *arg_value = glmsg.add_args();
   4493     arg_value->set_isarray(false);
   4494     arg_value->set_type(GLMessage::DataType::INT64);
   4495     arg_value->add_int64value((uintptr_t)value);
   4496 
   4497     // call function
   4498     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4499     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4500     glContext->hooks->gl.glUniform1fv(location, count, value);
   4501     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4502     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4503 
   4504     void *pointerArgs[] = {
   4505         (void *) value,
   4506     };
   4507 
   4508     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4509                               threadStartTime, threadEndTime,
   4510                               &glmsg, pointerArgs);
   4511     glContext->traceGLMessage(&glmsg);
   4512 }
   4513 
   4514 void GLTrace_glUniform1i(GLint location, GLint v0) {
   4515     GLMessage glmsg;
   4516     GLTraceContext *glContext = getGLTraceContext();
   4517 
   4518     glmsg.set_function(GLMessage::glUniform1i);
   4519 
   4520     // copy argument location
   4521     GLMessage_DataType *arg_location = glmsg.add_args();
   4522     arg_location->set_isarray(false);
   4523     arg_location->set_type(GLMessage::DataType::INT);
   4524     arg_location->add_intvalue(location);
   4525 
   4526     // copy argument v0
   4527     GLMessage_DataType *arg_v0 = glmsg.add_args();
   4528     arg_v0->set_isarray(false);
   4529     arg_v0->set_type(GLMessage::DataType::INT);
   4530     arg_v0->add_intvalue(v0);
   4531 
   4532     // call function
   4533     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4534     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4535     glContext->hooks->gl.glUniform1i(location, v0);
   4536     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4537     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4538 
   4539     void *pointerArgs[] = {
   4540     };
   4541 
   4542     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4543                               threadStartTime, threadEndTime,
   4544                               &glmsg, pointerArgs);
   4545     glContext->traceGLMessage(&glmsg);
   4546 }
   4547 
   4548 void GLTrace_glUniform1iv(GLint location, GLsizei count, const GLint * value) {
   4549     GLMessage glmsg;
   4550     GLTraceContext *glContext = getGLTraceContext();
   4551 
   4552     glmsg.set_function(GLMessage::glUniform1iv);
   4553 
   4554     // copy argument location
   4555     GLMessage_DataType *arg_location = glmsg.add_args();
   4556     arg_location->set_isarray(false);
   4557     arg_location->set_type(GLMessage::DataType::INT);
   4558     arg_location->add_intvalue(location);
   4559 
   4560     // copy argument count
   4561     GLMessage_DataType *arg_count = glmsg.add_args();
   4562     arg_count->set_isarray(false);
   4563     arg_count->set_type(GLMessage::DataType::INT);
   4564     arg_count->add_intvalue(count);
   4565 
   4566     // copy argument value
   4567     GLMessage_DataType *arg_value = glmsg.add_args();
   4568     arg_value->set_isarray(false);
   4569     arg_value->set_type(GLMessage::DataType::INT64);
   4570     arg_value->add_int64value((uintptr_t)value);
   4571 
   4572     // call function
   4573     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4574     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4575     glContext->hooks->gl.glUniform1iv(location, count, value);
   4576     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4577     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4578 
   4579     void *pointerArgs[] = {
   4580         (void *) value,
   4581     };
   4582 
   4583     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4584                               threadStartTime, threadEndTime,
   4585                               &glmsg, pointerArgs);
   4586     glContext->traceGLMessage(&glmsg);
   4587 }
   4588 
   4589 void GLTrace_glUniform2f(GLint location, GLfloat v0, GLfloat v1) {
   4590     GLMessage glmsg;
   4591     GLTraceContext *glContext = getGLTraceContext();
   4592 
   4593     glmsg.set_function(GLMessage::glUniform2f);
   4594 
   4595     // copy argument location
   4596     GLMessage_DataType *arg_location = glmsg.add_args();
   4597     arg_location->set_isarray(false);
   4598     arg_location->set_type(GLMessage::DataType::INT);
   4599     arg_location->add_intvalue(location);
   4600 
   4601     // copy argument v0
   4602     GLMessage_DataType *arg_v0 = glmsg.add_args();
   4603     arg_v0->set_isarray(false);
   4604     arg_v0->set_type(GLMessage::DataType::FLOAT);
   4605     arg_v0->add_floatvalue(v0);
   4606 
   4607     // copy argument v1
   4608     GLMessage_DataType *arg_v1 = glmsg.add_args();
   4609     arg_v1->set_isarray(false);
   4610     arg_v1->set_type(GLMessage::DataType::FLOAT);
   4611     arg_v1->add_floatvalue(v1);
   4612 
   4613     // call function
   4614     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4615     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4616     glContext->hooks->gl.glUniform2f(location, v0, v1);
   4617     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4618     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4619 
   4620     void *pointerArgs[] = {
   4621     };
   4622 
   4623     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4624                               threadStartTime, threadEndTime,
   4625                               &glmsg, pointerArgs);
   4626     glContext->traceGLMessage(&glmsg);
   4627 }
   4628 
   4629 void GLTrace_glUniform2fv(GLint location, GLsizei count, const GLfloat * value) {
   4630     GLMessage glmsg;
   4631     GLTraceContext *glContext = getGLTraceContext();
   4632 
   4633     glmsg.set_function(GLMessage::glUniform2fv);
   4634 
   4635     // copy argument location
   4636     GLMessage_DataType *arg_location = glmsg.add_args();
   4637     arg_location->set_isarray(false);
   4638     arg_location->set_type(GLMessage::DataType::INT);
   4639     arg_location->add_intvalue(location);
   4640 
   4641     // copy argument count
   4642     GLMessage_DataType *arg_count = glmsg.add_args();
   4643     arg_count->set_isarray(false);
   4644     arg_count->set_type(GLMessage::DataType::INT);
   4645     arg_count->add_intvalue(count);
   4646 
   4647     // copy argument value
   4648     GLMessage_DataType *arg_value = glmsg.add_args();
   4649     arg_value->set_isarray(false);
   4650     arg_value->set_type(GLMessage::DataType::INT64);
   4651     arg_value->add_int64value((uintptr_t)value);
   4652 
   4653     // call function
   4654     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4655     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4656     glContext->hooks->gl.glUniform2fv(location, count, value);
   4657     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4658     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4659 
   4660     void *pointerArgs[] = {
   4661         (void *) value,
   4662     };
   4663 
   4664     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4665                               threadStartTime, threadEndTime,
   4666                               &glmsg, pointerArgs);
   4667     glContext->traceGLMessage(&glmsg);
   4668 }
   4669 
   4670 void GLTrace_glUniform2i(GLint location, GLint v0, GLint v1) {
   4671     GLMessage glmsg;
   4672     GLTraceContext *glContext = getGLTraceContext();
   4673 
   4674     glmsg.set_function(GLMessage::glUniform2i);
   4675 
   4676     // copy argument location
   4677     GLMessage_DataType *arg_location = glmsg.add_args();
   4678     arg_location->set_isarray(false);
   4679     arg_location->set_type(GLMessage::DataType::INT);
   4680     arg_location->add_intvalue(location);
   4681 
   4682     // copy argument v0
   4683     GLMessage_DataType *arg_v0 = glmsg.add_args();
   4684     arg_v0->set_isarray(false);
   4685     arg_v0->set_type(GLMessage::DataType::INT);
   4686     arg_v0->add_intvalue(v0);
   4687 
   4688     // copy argument v1
   4689     GLMessage_DataType *arg_v1 = glmsg.add_args();
   4690     arg_v1->set_isarray(false);
   4691     arg_v1->set_type(GLMessage::DataType::INT);
   4692     arg_v1->add_intvalue(v1);
   4693 
   4694     // call function
   4695     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4696     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4697     glContext->hooks->gl.glUniform2i(location, v0, v1);
   4698     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4699     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4700 
   4701     void *pointerArgs[] = {
   4702     };
   4703 
   4704     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4705                               threadStartTime, threadEndTime,
   4706                               &glmsg, pointerArgs);
   4707     glContext->traceGLMessage(&glmsg);
   4708 }
   4709 
   4710 void GLTrace_glUniform2iv(GLint location, GLsizei count, const GLint * value) {
   4711     GLMessage glmsg;
   4712     GLTraceContext *glContext = getGLTraceContext();
   4713 
   4714     glmsg.set_function(GLMessage::glUniform2iv);
   4715 
   4716     // copy argument location
   4717     GLMessage_DataType *arg_location = glmsg.add_args();
   4718     arg_location->set_isarray(false);
   4719     arg_location->set_type(GLMessage::DataType::INT);
   4720     arg_location->add_intvalue(location);
   4721 
   4722     // copy argument count
   4723     GLMessage_DataType *arg_count = glmsg.add_args();
   4724     arg_count->set_isarray(false);
   4725     arg_count->set_type(GLMessage::DataType::INT);
   4726     arg_count->add_intvalue(count);
   4727 
   4728     // copy argument value
   4729     GLMessage_DataType *arg_value = glmsg.add_args();
   4730     arg_value->set_isarray(false);
   4731     arg_value->set_type(GLMessage::DataType::INT64);
   4732     arg_value->add_int64value((uintptr_t)value);
   4733 
   4734     // call function
   4735     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4736     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4737     glContext->hooks->gl.glUniform2iv(location, count, value);
   4738     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4739     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4740 
   4741     void *pointerArgs[] = {
   4742         (void *) value,
   4743     };
   4744 
   4745     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4746                               threadStartTime, threadEndTime,
   4747                               &glmsg, pointerArgs);
   4748     glContext->traceGLMessage(&glmsg);
   4749 }
   4750 
   4751 void GLTrace_glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
   4752     GLMessage glmsg;
   4753     GLTraceContext *glContext = getGLTraceContext();
   4754 
   4755     glmsg.set_function(GLMessage::glUniform3f);
   4756 
   4757     // copy argument location
   4758     GLMessage_DataType *arg_location = glmsg.add_args();
   4759     arg_location->set_isarray(false);
   4760     arg_location->set_type(GLMessage::DataType::INT);
   4761     arg_location->add_intvalue(location);
   4762 
   4763     // copy argument v0
   4764     GLMessage_DataType *arg_v0 = glmsg.add_args();
   4765     arg_v0->set_isarray(false);
   4766     arg_v0->set_type(GLMessage::DataType::FLOAT);
   4767     arg_v0->add_floatvalue(v0);
   4768 
   4769     // copy argument v1
   4770     GLMessage_DataType *arg_v1 = glmsg.add_args();
   4771     arg_v1->set_isarray(false);
   4772     arg_v1->set_type(GLMessage::DataType::FLOAT);
   4773     arg_v1->add_floatvalue(v1);
   4774 
   4775     // copy argument v2
   4776     GLMessage_DataType *arg_v2 = glmsg.add_args();
   4777     arg_v2->set_isarray(false);
   4778     arg_v2->set_type(GLMessage::DataType::FLOAT);
   4779     arg_v2->add_floatvalue(v2);
   4780 
   4781     // call function
   4782     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4783     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4784     glContext->hooks->gl.glUniform3f(location, v0, v1, v2);
   4785     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4786     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4787 
   4788     void *pointerArgs[] = {
   4789     };
   4790 
   4791     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4792                               threadStartTime, threadEndTime,
   4793                               &glmsg, pointerArgs);
   4794     glContext->traceGLMessage(&glmsg);
   4795 }
   4796 
   4797 void GLTrace_glUniform3fv(GLint location, GLsizei count, const GLfloat * value) {
   4798     GLMessage glmsg;
   4799     GLTraceContext *glContext = getGLTraceContext();
   4800 
   4801     glmsg.set_function(GLMessage::glUniform3fv);
   4802 
   4803     // copy argument location
   4804     GLMessage_DataType *arg_location = glmsg.add_args();
   4805     arg_location->set_isarray(false);
   4806     arg_location->set_type(GLMessage::DataType::INT);
   4807     arg_location->add_intvalue(location);
   4808 
   4809     // copy argument count
   4810     GLMessage_DataType *arg_count = glmsg.add_args();
   4811     arg_count->set_isarray(false);
   4812     arg_count->set_type(GLMessage::DataType::INT);
   4813     arg_count->add_intvalue(count);
   4814 
   4815     // copy argument value
   4816     GLMessage_DataType *arg_value = glmsg.add_args();
   4817     arg_value->set_isarray(false);
   4818     arg_value->set_type(GLMessage::DataType::INT64);
   4819     arg_value->add_int64value((uintptr_t)value);
   4820 
   4821     // call function
   4822     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4823     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4824     glContext->hooks->gl.glUniform3fv(location, count, value);
   4825     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4826     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4827 
   4828     void *pointerArgs[] = {
   4829         (void *) value,
   4830     };
   4831 
   4832     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4833                               threadStartTime, threadEndTime,
   4834                               &glmsg, pointerArgs);
   4835     glContext->traceGLMessage(&glmsg);
   4836 }
   4837 
   4838 void GLTrace_glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {
   4839     GLMessage glmsg;
   4840     GLTraceContext *glContext = getGLTraceContext();
   4841 
   4842     glmsg.set_function(GLMessage::glUniform3i);
   4843 
   4844     // copy argument location
   4845     GLMessage_DataType *arg_location = glmsg.add_args();
   4846     arg_location->set_isarray(false);
   4847     arg_location->set_type(GLMessage::DataType::INT);
   4848     arg_location->add_intvalue(location);
   4849 
   4850     // copy argument v0
   4851     GLMessage_DataType *arg_v0 = glmsg.add_args();
   4852     arg_v0->set_isarray(false);
   4853     arg_v0->set_type(GLMessage::DataType::INT);
   4854     arg_v0->add_intvalue(v0);
   4855 
   4856     // copy argument v1
   4857     GLMessage_DataType *arg_v1 = glmsg.add_args();
   4858     arg_v1->set_isarray(false);
   4859     arg_v1->set_type(GLMessage::DataType::INT);
   4860     arg_v1->add_intvalue(v1);
   4861 
   4862     // copy argument v2
   4863     GLMessage_DataType *arg_v2 = glmsg.add_args();
   4864     arg_v2->set_isarray(false);
   4865     arg_v2->set_type(GLMessage::DataType::INT);
   4866     arg_v2->add_intvalue(v2);
   4867 
   4868     // call function
   4869     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4870     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4871     glContext->hooks->gl.glUniform3i(location, v0, v1, v2);
   4872     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4873     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4874 
   4875     void *pointerArgs[] = {
   4876     };
   4877 
   4878     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4879                               threadStartTime, threadEndTime,
   4880                               &glmsg, pointerArgs);
   4881     glContext->traceGLMessage(&glmsg);
   4882 }
   4883 
   4884 void GLTrace_glUniform3iv(GLint location, GLsizei count, const GLint * value) {
   4885     GLMessage glmsg;
   4886     GLTraceContext *glContext = getGLTraceContext();
   4887 
   4888     glmsg.set_function(GLMessage::glUniform3iv);
   4889 
   4890     // copy argument location
   4891     GLMessage_DataType *arg_location = glmsg.add_args();
   4892     arg_location->set_isarray(false);
   4893     arg_location->set_type(GLMessage::DataType::INT);
   4894     arg_location->add_intvalue(location);
   4895 
   4896     // copy argument count
   4897     GLMessage_DataType *arg_count = glmsg.add_args();
   4898     arg_count->set_isarray(false);
   4899     arg_count->set_type(GLMessage::DataType::INT);
   4900     arg_count->add_intvalue(count);
   4901 
   4902     // copy argument value
   4903     GLMessage_DataType *arg_value = glmsg.add_args();
   4904     arg_value->set_isarray(false);
   4905     arg_value->set_type(GLMessage::DataType::INT64);
   4906     arg_value->add_int64value((uintptr_t)value);
   4907 
   4908     // call function
   4909     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4910     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4911     glContext->hooks->gl.glUniform3iv(location, count, value);
   4912     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4913     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4914 
   4915     void *pointerArgs[] = {
   4916         (void *) value,
   4917     };
   4918 
   4919     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4920                               threadStartTime, threadEndTime,
   4921                               &glmsg, pointerArgs);
   4922     glContext->traceGLMessage(&glmsg);
   4923 }
   4924 
   4925 void GLTrace_glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {
   4926     GLMessage glmsg;
   4927     GLTraceContext *glContext = getGLTraceContext();
   4928 
   4929     glmsg.set_function(GLMessage::glUniform4f);
   4930 
   4931     // copy argument location
   4932     GLMessage_DataType *arg_location = glmsg.add_args();
   4933     arg_location->set_isarray(false);
   4934     arg_location->set_type(GLMessage::DataType::INT);
   4935     arg_location->add_intvalue(location);
   4936 
   4937     // copy argument v0
   4938     GLMessage_DataType *arg_v0 = glmsg.add_args();
   4939     arg_v0->set_isarray(false);
   4940     arg_v0->set_type(GLMessage::DataType::FLOAT);
   4941     arg_v0->add_floatvalue(v0);
   4942 
   4943     // copy argument v1
   4944     GLMessage_DataType *arg_v1 = glmsg.add_args();
   4945     arg_v1->set_isarray(false);
   4946     arg_v1->set_type(GLMessage::DataType::FLOAT);
   4947     arg_v1->add_floatvalue(v1);
   4948 
   4949     // copy argument v2
   4950     GLMessage_DataType *arg_v2 = glmsg.add_args();
   4951     arg_v2->set_isarray(false);
   4952     arg_v2->set_type(GLMessage::DataType::FLOAT);
   4953     arg_v2->add_floatvalue(v2);
   4954 
   4955     // copy argument v3
   4956     GLMessage_DataType *arg_v3 = glmsg.add_args();
   4957     arg_v3->set_isarray(false);
   4958     arg_v3->set_type(GLMessage::DataType::FLOAT);
   4959     arg_v3->add_floatvalue(v3);
   4960 
   4961     // call function
   4962     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4963     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   4964     glContext->hooks->gl.glUniform4f(location, v0, v1, v2, v3);
   4965     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   4966     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   4967 
   4968     void *pointerArgs[] = {
   4969     };
   4970 
   4971     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   4972                               threadStartTime, threadEndTime,
   4973                               &glmsg, pointerArgs);
   4974     glContext->traceGLMessage(&glmsg);
   4975 }
   4976 
   4977 void GLTrace_glUniform4fv(GLint location, GLsizei count, const GLfloat * value) {
   4978     GLMessage glmsg;
   4979     GLTraceContext *glContext = getGLTraceContext();
   4980 
   4981     glmsg.set_function(GLMessage::glUniform4fv);
   4982 
   4983     // copy argument location
   4984     GLMessage_DataType *arg_location = glmsg.add_args();
   4985     arg_location->set_isarray(false);
   4986     arg_location->set_type(GLMessage::DataType::INT);
   4987     arg_location->add_intvalue(location);
   4988 
   4989     // copy argument count
   4990     GLMessage_DataType *arg_count = glmsg.add_args();
   4991     arg_count->set_isarray(false);
   4992     arg_count->set_type(GLMessage::DataType::INT);
   4993     arg_count->add_intvalue(count);
   4994 
   4995     // copy argument value
   4996     GLMessage_DataType *arg_value = glmsg.add_args();
   4997     arg_value->set_isarray(false);
   4998     arg_value->set_type(GLMessage::DataType::INT64);
   4999     arg_value->add_int64value((uintptr_t)value);
   5000 
   5001     // call function
   5002     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5003     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5004     glContext->hooks->gl.glUniform4fv(location, count, value);
   5005     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5006     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5007 
   5008     void *pointerArgs[] = {
   5009         (void *) value,
   5010     };
   5011 
   5012     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5013                               threadStartTime, threadEndTime,
   5014                               &glmsg, pointerArgs);
   5015     glContext->traceGLMessage(&glmsg);
   5016 }
   5017 
   5018 void GLTrace_glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {
   5019     GLMessage glmsg;
   5020     GLTraceContext *glContext = getGLTraceContext();
   5021 
   5022     glmsg.set_function(GLMessage::glUniform4i);
   5023 
   5024     // copy argument location
   5025     GLMessage_DataType *arg_location = glmsg.add_args();
   5026     arg_location->set_isarray(false);
   5027     arg_location->set_type(GLMessage::DataType::INT);
   5028     arg_location->add_intvalue(location);
   5029 
   5030     // copy argument v0
   5031     GLMessage_DataType *arg_v0 = glmsg.add_args();
   5032     arg_v0->set_isarray(false);
   5033     arg_v0->set_type(GLMessage::DataType::INT);
   5034     arg_v0->add_intvalue(v0);
   5035 
   5036     // copy argument v1
   5037     GLMessage_DataType *arg_v1 = glmsg.add_args();
   5038     arg_v1->set_isarray(false);
   5039     arg_v1->set_type(GLMessage::DataType::INT);
   5040     arg_v1->add_intvalue(v1);
   5041 
   5042     // copy argument v2
   5043     GLMessage_DataType *arg_v2 = glmsg.add_args();
   5044     arg_v2->set_isarray(false);
   5045     arg_v2->set_type(GLMessage::DataType::INT);
   5046     arg_v2->add_intvalue(v2);
   5047 
   5048     // copy argument v3
   5049     GLMessage_DataType *arg_v3 = glmsg.add_args();
   5050     arg_v3->set_isarray(false);
   5051     arg_v3->set_type(GLMessage::DataType::INT);
   5052     arg_v3->add_intvalue(v3);
   5053 
   5054     // call function
   5055     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5056     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5057     glContext->hooks->gl.glUniform4i(location, v0, v1, v2, v3);
   5058     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5059     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5060 
   5061     void *pointerArgs[] = {
   5062     };
   5063 
   5064     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5065                               threadStartTime, threadEndTime,
   5066                               &glmsg, pointerArgs);
   5067     glContext->traceGLMessage(&glmsg);
   5068 }
   5069 
   5070 void GLTrace_glUniform4iv(GLint location, GLsizei count, const GLint * value) {
   5071     GLMessage glmsg;
   5072     GLTraceContext *glContext = getGLTraceContext();
   5073 
   5074     glmsg.set_function(GLMessage::glUniform4iv);
   5075 
   5076     // copy argument location
   5077     GLMessage_DataType *arg_location = glmsg.add_args();
   5078     arg_location->set_isarray(false);
   5079     arg_location->set_type(GLMessage::DataType::INT);
   5080     arg_location->add_intvalue(location);
   5081 
   5082     // copy argument count
   5083     GLMessage_DataType *arg_count = glmsg.add_args();
   5084     arg_count->set_isarray(false);
   5085     arg_count->set_type(GLMessage::DataType::INT);
   5086     arg_count->add_intvalue(count);
   5087 
   5088     // copy argument value
   5089     GLMessage_DataType *arg_value = glmsg.add_args();
   5090     arg_value->set_isarray(false);
   5091     arg_value->set_type(GLMessage::DataType::INT64);
   5092     arg_value->add_int64value((uintptr_t)value);
   5093 
   5094     // call function
   5095     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5096     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5097     glContext->hooks->gl.glUniform4iv(location, count, value);
   5098     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5099     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5100 
   5101     void *pointerArgs[] = {
   5102         (void *) value,
   5103     };
   5104 
   5105     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5106                               threadStartTime, threadEndTime,
   5107                               &glmsg, pointerArgs);
   5108     glContext->traceGLMessage(&glmsg);
   5109 }
   5110 
   5111 void GLTrace_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   5112     GLMessage glmsg;
   5113     GLTraceContext *glContext = getGLTraceContext();
   5114 
   5115     glmsg.set_function(GLMessage::glUniformMatrix2fv);
   5116 
   5117     // copy argument location
   5118     GLMessage_DataType *arg_location = glmsg.add_args();
   5119     arg_location->set_isarray(false);
   5120     arg_location->set_type(GLMessage::DataType::INT);
   5121     arg_location->add_intvalue(location);
   5122 
   5123     // copy argument count
   5124     GLMessage_DataType *arg_count = glmsg.add_args();
   5125     arg_count->set_isarray(false);
   5126     arg_count->set_type(GLMessage::DataType::INT);
   5127     arg_count->add_intvalue(count);
   5128 
   5129     // copy argument transpose
   5130     GLMessage_DataType *arg_transpose = glmsg.add_args();
   5131     arg_transpose->set_isarray(false);
   5132     arg_transpose->set_type(GLMessage::DataType::BOOL);
   5133     arg_transpose->add_boolvalue(transpose);
   5134 
   5135     // copy argument value
   5136     GLMessage_DataType *arg_value = glmsg.add_args();
   5137     arg_value->set_isarray(false);
   5138     arg_value->set_type(GLMessage::DataType::INT64);
   5139     arg_value->add_int64value((uintptr_t)value);
   5140 
   5141     // call function
   5142     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5143     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5144     glContext->hooks->gl.glUniformMatrix2fv(location, count, transpose, value);
   5145     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5146     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5147 
   5148     void *pointerArgs[] = {
   5149         (void *) value,
   5150     };
   5151 
   5152     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5153                               threadStartTime, threadEndTime,
   5154                               &glmsg, pointerArgs);
   5155     glContext->traceGLMessage(&glmsg);
   5156 }
   5157 
   5158 void GLTrace_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   5159     GLMessage glmsg;
   5160     GLTraceContext *glContext = getGLTraceContext();
   5161 
   5162     glmsg.set_function(GLMessage::glUniformMatrix3fv);
   5163 
   5164     // copy argument location
   5165     GLMessage_DataType *arg_location = glmsg.add_args();
   5166     arg_location->set_isarray(false);
   5167     arg_location->set_type(GLMessage::DataType::INT);
   5168     arg_location->add_intvalue(location);
   5169 
   5170     // copy argument count
   5171     GLMessage_DataType *arg_count = glmsg.add_args();
   5172     arg_count->set_isarray(false);
   5173     arg_count->set_type(GLMessage::DataType::INT);
   5174     arg_count->add_intvalue(count);
   5175 
   5176     // copy argument transpose
   5177     GLMessage_DataType *arg_transpose = glmsg.add_args();
   5178     arg_transpose->set_isarray(false);
   5179     arg_transpose->set_type(GLMessage::DataType::BOOL);
   5180     arg_transpose->add_boolvalue(transpose);
   5181 
   5182     // copy argument value
   5183     GLMessage_DataType *arg_value = glmsg.add_args();
   5184     arg_value->set_isarray(false);
   5185     arg_value->set_type(GLMessage::DataType::INT64);
   5186     arg_value->add_int64value((uintptr_t)value);
   5187 
   5188     // call function
   5189     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5190     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5191     glContext->hooks->gl.glUniformMatrix3fv(location, count, transpose, value);
   5192     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5193     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5194 
   5195     void *pointerArgs[] = {
   5196         (void *) value,
   5197     };
   5198 
   5199     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5200                               threadStartTime, threadEndTime,
   5201                               &glmsg, pointerArgs);
   5202     glContext->traceGLMessage(&glmsg);
   5203 }
   5204 
   5205 void GLTrace_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   5206     GLMessage glmsg;
   5207     GLTraceContext *glContext = getGLTraceContext();
   5208 
   5209     glmsg.set_function(GLMessage::glUniformMatrix4fv);
   5210 
   5211     // copy argument location
   5212     GLMessage_DataType *arg_location = glmsg.add_args();
   5213     arg_location->set_isarray(false);
   5214     arg_location->set_type(GLMessage::DataType::INT);
   5215     arg_location->add_intvalue(location);
   5216 
   5217     // copy argument count
   5218     GLMessage_DataType *arg_count = glmsg.add_args();
   5219     arg_count->set_isarray(false);
   5220     arg_count->set_type(GLMessage::DataType::INT);
   5221     arg_count->add_intvalue(count);
   5222 
   5223     // copy argument transpose
   5224     GLMessage_DataType *arg_transpose = glmsg.add_args();
   5225     arg_transpose->set_isarray(false);
   5226     arg_transpose->set_type(GLMessage::DataType::BOOL);
   5227     arg_transpose->add_boolvalue(transpose);
   5228 
   5229     // copy argument value
   5230     GLMessage_DataType *arg_value = glmsg.add_args();
   5231     arg_value->set_isarray(false);
   5232     arg_value->set_type(GLMessage::DataType::INT64);
   5233     arg_value->add_int64value((uintptr_t)value);
   5234 
   5235     // call function
   5236     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5237     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5238     glContext->hooks->gl.glUniformMatrix4fv(location, count, transpose, value);
   5239     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5240     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5241 
   5242     void *pointerArgs[] = {
   5243         (void *) value,
   5244     };
   5245 
   5246     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5247                               threadStartTime, threadEndTime,
   5248                               &glmsg, pointerArgs);
   5249     glContext->traceGLMessage(&glmsg);
   5250 }
   5251 
   5252 void GLTrace_glUseProgram(GLuint program) {
   5253     GLMessage glmsg;
   5254     GLTraceContext *glContext = getGLTraceContext();
   5255 
   5256     glmsg.set_function(GLMessage::glUseProgram);
   5257 
   5258     // copy argument program
   5259     GLMessage_DataType *arg_program = glmsg.add_args();
   5260     arg_program->set_isarray(false);
   5261     arg_program->set_type(GLMessage::DataType::INT);
   5262     arg_program->add_intvalue(program);
   5263 
   5264     // call function
   5265     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5266     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5267     glContext->hooks->gl.glUseProgram(program);
   5268     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5269     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5270 
   5271     void *pointerArgs[] = {
   5272     };
   5273 
   5274     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5275                               threadStartTime, threadEndTime,
   5276                               &glmsg, pointerArgs);
   5277     glContext->traceGLMessage(&glmsg);
   5278 }
   5279 
   5280 void GLTrace_glValidateProgram(GLuint program) {
   5281     GLMessage glmsg;
   5282     GLTraceContext *glContext = getGLTraceContext();
   5283 
   5284     glmsg.set_function(GLMessage::glValidateProgram);
   5285 
   5286     // copy argument program
   5287     GLMessage_DataType *arg_program = glmsg.add_args();
   5288     arg_program->set_isarray(false);
   5289     arg_program->set_type(GLMessage::DataType::INT);
   5290     arg_program->add_intvalue(program);
   5291 
   5292     // call function
   5293     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5294     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5295     glContext->hooks->gl.glValidateProgram(program);
   5296     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5297     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5298 
   5299     void *pointerArgs[] = {
   5300     };
   5301 
   5302     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5303                               threadStartTime, threadEndTime,
   5304                               &glmsg, pointerArgs);
   5305     glContext->traceGLMessage(&glmsg);
   5306 }
   5307 
   5308 void GLTrace_glVertexAttrib1f(GLuint index, GLfloat x) {
   5309     GLMessage glmsg;
   5310     GLTraceContext *glContext = getGLTraceContext();
   5311 
   5312     glmsg.set_function(GLMessage::glVertexAttrib1f);
   5313 
   5314     // copy argument index
   5315     GLMessage_DataType *arg_index = glmsg.add_args();
   5316     arg_index->set_isarray(false);
   5317     arg_index->set_type(GLMessage::DataType::INT);
   5318     arg_index->add_intvalue(index);
   5319 
   5320     // copy argument x
   5321     GLMessage_DataType *arg_x = glmsg.add_args();
   5322     arg_x->set_isarray(false);
   5323     arg_x->set_type(GLMessage::DataType::FLOAT);
   5324     arg_x->add_floatvalue(x);
   5325 
   5326     // call function
   5327     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5328     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5329     glContext->hooks->gl.glVertexAttrib1f(index, x);
   5330     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5331     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5332 
   5333     void *pointerArgs[] = {
   5334     };
   5335 
   5336     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5337                               threadStartTime, threadEndTime,
   5338                               &glmsg, pointerArgs);
   5339     glContext->traceGLMessage(&glmsg);
   5340 }
   5341 
   5342 void GLTrace_glVertexAttrib1fv(GLuint index, const GLfloat * v) {
   5343     GLMessage glmsg;
   5344     GLTraceContext *glContext = getGLTraceContext();
   5345 
   5346     glmsg.set_function(GLMessage::glVertexAttrib1fv);
   5347 
   5348     // copy argument index
   5349     GLMessage_DataType *arg_index = glmsg.add_args();
   5350     arg_index->set_isarray(false);
   5351     arg_index->set_type(GLMessage::DataType::INT);
   5352     arg_index->add_intvalue(index);
   5353 
   5354     // copy argument v
   5355     GLMessage_DataType *arg_v = glmsg.add_args();
   5356     arg_v->set_isarray(false);
   5357     arg_v->set_type(GLMessage::DataType::INT64);
   5358     arg_v->add_int64value((uintptr_t)v);
   5359 
   5360     // call function
   5361     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5362     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5363     glContext->hooks->gl.glVertexAttrib1fv(index, v);
   5364     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5365     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5366 
   5367     void *pointerArgs[] = {
   5368         (void *) v,
   5369     };
   5370 
   5371     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5372                               threadStartTime, threadEndTime,
   5373                               &glmsg, pointerArgs);
   5374     glContext->traceGLMessage(&glmsg);
   5375 }
   5376 
   5377 void GLTrace_glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) {
   5378     GLMessage glmsg;
   5379     GLTraceContext *glContext = getGLTraceContext();
   5380 
   5381     glmsg.set_function(GLMessage::glVertexAttrib2f);
   5382 
   5383     // copy argument index
   5384     GLMessage_DataType *arg_index = glmsg.add_args();
   5385     arg_index->set_isarray(false);
   5386     arg_index->set_type(GLMessage::DataType::INT);
   5387     arg_index->add_intvalue(index);
   5388 
   5389     // copy argument x
   5390     GLMessage_DataType *arg_x = glmsg.add_args();
   5391     arg_x->set_isarray(false);
   5392     arg_x->set_type(GLMessage::DataType::FLOAT);
   5393     arg_x->add_floatvalue(x);
   5394 
   5395     // copy argument y
   5396     GLMessage_DataType *arg_y = glmsg.add_args();
   5397     arg_y->set_isarray(false);
   5398     arg_y->set_type(GLMessage::DataType::FLOAT);
   5399     arg_y->add_floatvalue(y);
   5400 
   5401     // call function
   5402     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5403     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5404     glContext->hooks->gl.glVertexAttrib2f(index, x, y);
   5405     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5406     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5407 
   5408     void *pointerArgs[] = {
   5409     };
   5410 
   5411     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5412                               threadStartTime, threadEndTime,
   5413                               &glmsg, pointerArgs);
   5414     glContext->traceGLMessage(&glmsg);
   5415 }
   5416 
   5417 void GLTrace_glVertexAttrib2fv(GLuint index, const GLfloat * v) {
   5418     GLMessage glmsg;
   5419     GLTraceContext *glContext = getGLTraceContext();
   5420 
   5421     glmsg.set_function(GLMessage::glVertexAttrib2fv);
   5422 
   5423     // copy argument index
   5424     GLMessage_DataType *arg_index = glmsg.add_args();
   5425     arg_index->set_isarray(false);
   5426     arg_index->set_type(GLMessage::DataType::INT);
   5427     arg_index->add_intvalue(index);
   5428 
   5429     // copy argument v
   5430     GLMessage_DataType *arg_v = glmsg.add_args();
   5431     arg_v->set_isarray(false);
   5432     arg_v->set_type(GLMessage::DataType::INT64);
   5433     arg_v->add_int64value((uintptr_t)v);
   5434 
   5435     // call function
   5436     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5437     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5438     glContext->hooks->gl.glVertexAttrib2fv(index, v);
   5439     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5440     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5441 
   5442     void *pointerArgs[] = {
   5443         (void *) v,
   5444     };
   5445 
   5446     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5447                               threadStartTime, threadEndTime,
   5448                               &glmsg, pointerArgs);
   5449     glContext->traceGLMessage(&glmsg);
   5450 }
   5451 
   5452 void GLTrace_glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) {
   5453     GLMessage glmsg;
   5454     GLTraceContext *glContext = getGLTraceContext();
   5455 
   5456     glmsg.set_function(GLMessage::glVertexAttrib3f);
   5457 
   5458     // copy argument index
   5459     GLMessage_DataType *arg_index = glmsg.add_args();
   5460     arg_index->set_isarray(false);
   5461     arg_index->set_type(GLMessage::DataType::INT);
   5462     arg_index->add_intvalue(index);
   5463 
   5464     // copy argument x
   5465     GLMessage_DataType *arg_x = glmsg.add_args();
   5466     arg_x->set_isarray(false);
   5467     arg_x->set_type(GLMessage::DataType::FLOAT);
   5468     arg_x->add_floatvalue(x);
   5469 
   5470     // copy argument y
   5471     GLMessage_DataType *arg_y = glmsg.add_args();
   5472     arg_y->set_isarray(false);
   5473     arg_y->set_type(GLMessage::DataType::FLOAT);
   5474     arg_y->add_floatvalue(y);
   5475 
   5476     // copy argument z
   5477     GLMessage_DataType *arg_z = glmsg.add_args();
   5478     arg_z->set_isarray(false);
   5479     arg_z->set_type(GLMessage::DataType::FLOAT);
   5480     arg_z->add_floatvalue(z);
   5481 
   5482     // call function
   5483     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5484     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5485     glContext->hooks->gl.glVertexAttrib3f(index, x, y, z);
   5486     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5487     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5488 
   5489     void *pointerArgs[] = {
   5490     };
   5491 
   5492     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5493                               threadStartTime, threadEndTime,
   5494                               &glmsg, pointerArgs);
   5495     glContext->traceGLMessage(&glmsg);
   5496 }
   5497 
   5498 void GLTrace_glVertexAttrib3fv(GLuint index, const GLfloat * v) {
   5499     GLMessage glmsg;
   5500     GLTraceContext *glContext = getGLTraceContext();
   5501 
   5502     glmsg.set_function(GLMessage::glVertexAttrib3fv);
   5503 
   5504     // copy argument index
   5505     GLMessage_DataType *arg_index = glmsg.add_args();
   5506     arg_index->set_isarray(false);
   5507     arg_index->set_type(GLMessage::DataType::INT);
   5508     arg_index->add_intvalue(index);
   5509 
   5510     // copy argument v
   5511     GLMessage_DataType *arg_v = glmsg.add_args();
   5512     arg_v->set_isarray(false);
   5513     arg_v->set_type(GLMessage::DataType::INT64);
   5514     arg_v->add_int64value((uintptr_t)v);
   5515 
   5516     // call function
   5517     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5518     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5519     glContext->hooks->gl.glVertexAttrib3fv(index, v);
   5520     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5521     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5522 
   5523     void *pointerArgs[] = {
   5524         (void *) v,
   5525     };
   5526 
   5527     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5528                               threadStartTime, threadEndTime,
   5529                               &glmsg, pointerArgs);
   5530     glContext->traceGLMessage(&glmsg);
   5531 }
   5532 
   5533 void GLTrace_glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
   5534     GLMessage glmsg;
   5535     GLTraceContext *glContext = getGLTraceContext();
   5536 
   5537     glmsg.set_function(GLMessage::glVertexAttrib4f);
   5538 
   5539     // copy argument index
   5540     GLMessage_DataType *arg_index = glmsg.add_args();
   5541     arg_index->set_isarray(false);
   5542     arg_index->set_type(GLMessage::DataType::INT);
   5543     arg_index->add_intvalue(index);
   5544 
   5545     // copy argument x
   5546     GLMessage_DataType *arg_x = glmsg.add_args();
   5547     arg_x->set_isarray(false);
   5548     arg_x->set_type(GLMessage::DataType::FLOAT);
   5549     arg_x->add_floatvalue(x);
   5550 
   5551     // copy argument y
   5552     GLMessage_DataType *arg_y = glmsg.add_args();
   5553     arg_y->set_isarray(false);
   5554     arg_y->set_type(GLMessage::DataType::FLOAT);
   5555     arg_y->add_floatvalue(y);
   5556 
   5557     // copy argument z
   5558     GLMessage_DataType *arg_z = glmsg.add_args();
   5559     arg_z->set_isarray(false);
   5560     arg_z->set_type(GLMessage::DataType::FLOAT);
   5561     arg_z->add_floatvalue(z);
   5562 
   5563     // copy argument w
   5564     GLMessage_DataType *arg_w = glmsg.add_args();
   5565     arg_w->set_isarray(false);
   5566     arg_w->set_type(GLMessage::DataType::FLOAT);
   5567     arg_w->add_floatvalue(w);
   5568 
   5569     // call function
   5570     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5571     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5572     glContext->hooks->gl.glVertexAttrib4f(index, x, y, z, w);
   5573     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5574     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5575 
   5576     void *pointerArgs[] = {
   5577     };
   5578 
   5579     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5580                               threadStartTime, threadEndTime,
   5581                               &glmsg, pointerArgs);
   5582     glContext->traceGLMessage(&glmsg);
   5583 }
   5584 
   5585 void GLTrace_glVertexAttrib4fv(GLuint index, const GLfloat * v) {
   5586     GLMessage glmsg;
   5587     GLTraceContext *glContext = getGLTraceContext();
   5588 
   5589     glmsg.set_function(GLMessage::glVertexAttrib4fv);
   5590 
   5591     // copy argument index
   5592     GLMessage_DataType *arg_index = glmsg.add_args();
   5593     arg_index->set_isarray(false);
   5594     arg_index->set_type(GLMessage::DataType::INT);
   5595     arg_index->add_intvalue(index);
   5596 
   5597     // copy argument v
   5598     GLMessage_DataType *arg_v = glmsg.add_args();
   5599     arg_v->set_isarray(false);
   5600     arg_v->set_type(GLMessage::DataType::INT64);
   5601     arg_v->add_int64value((uintptr_t)v);
   5602 
   5603     // call function
   5604     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5605     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5606     glContext->hooks->gl.glVertexAttrib4fv(index, v);
   5607     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5608     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5609 
   5610     void *pointerArgs[] = {
   5611         (void *) v,
   5612     };
   5613 
   5614     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5615                               threadStartTime, threadEndTime,
   5616                               &glmsg, pointerArgs);
   5617     glContext->traceGLMessage(&glmsg);
   5618 }
   5619 
   5620 void GLTrace_glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer) {
   5621     GLMessage glmsg;
   5622     GLTraceContext *glContext = getGLTraceContext();
   5623 
   5624     glmsg.set_function(GLMessage::glVertexAttribPointer);
   5625 
   5626     // copy argument index
   5627     GLMessage_DataType *arg_index = glmsg.add_args();
   5628     arg_index->set_isarray(false);
   5629     arg_index->set_type(GLMessage::DataType::INT);
   5630     arg_index->add_intvalue(index);
   5631 
   5632     // copy argument size
   5633     GLMessage_DataType *arg_size = glmsg.add_args();
   5634     arg_size->set_isarray(false);
   5635     arg_size->set_type(GLMessage::DataType::INT);
   5636     arg_size->add_intvalue(size);
   5637 
   5638     // copy argument type
   5639     GLMessage_DataType *arg_type = glmsg.add_args();
   5640     arg_type->set_isarray(false);
   5641     arg_type->set_type(GLMessage::DataType::ENUM);
   5642     arg_type->add_intvalue((int)type);
   5643 
   5644     // copy argument normalized
   5645     GLMessage_DataType *arg_normalized = glmsg.add_args();
   5646     arg_normalized->set_isarray(false);
   5647     arg_normalized->set_type(GLMessage::DataType::BOOL);
   5648     arg_normalized->add_boolvalue(normalized);
   5649 
   5650     // copy argument stride
   5651     GLMessage_DataType *arg_stride = glmsg.add_args();
   5652     arg_stride->set_isarray(false);
   5653     arg_stride->set_type(GLMessage::DataType::INT);
   5654     arg_stride->add_intvalue(stride);
   5655 
   5656     // copy argument pointer
   5657     GLMessage_DataType *arg_pointer = glmsg.add_args();
   5658     arg_pointer->set_isarray(false);
   5659     arg_pointer->set_type(GLMessage::DataType::INT64);
   5660     arg_pointer->add_int64value((uintptr_t)pointer);
   5661 
   5662     // call function
   5663     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5664     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5665     glContext->hooks->gl.glVertexAttribPointer(index, size, type, normalized, stride, pointer);
   5666     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5667     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5668 
   5669     void *pointerArgs[] = {
   5670         (void *) pointer,
   5671     };
   5672 
   5673     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5674                               threadStartTime, threadEndTime,
   5675                               &glmsg, pointerArgs);
   5676     glContext->traceGLMessage(&glmsg);
   5677 }
   5678 
   5679 void GLTrace_glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
   5680     GLMessage glmsg;
   5681     GLTraceContext *glContext = getGLTraceContext();
   5682 
   5683     glmsg.set_function(GLMessage::glViewport);
   5684 
   5685     // copy argument x
   5686     GLMessage_DataType *arg_x = glmsg.add_args();
   5687     arg_x->set_isarray(false);
   5688     arg_x->set_type(GLMessage::DataType::INT);
   5689     arg_x->add_intvalue(x);
   5690 
   5691     // copy argument y
   5692     GLMessage_DataType *arg_y = glmsg.add_args();
   5693     arg_y->set_isarray(false);
   5694     arg_y->set_type(GLMessage::DataType::INT);
   5695     arg_y->add_intvalue(y);
   5696 
   5697     // copy argument width
   5698     GLMessage_DataType *arg_width = glmsg.add_args();
   5699     arg_width->set_isarray(false);
   5700     arg_width->set_type(GLMessage::DataType::INT);
   5701     arg_width->add_intvalue(width);
   5702 
   5703     // copy argument height
   5704     GLMessage_DataType *arg_height = glmsg.add_args();
   5705     arg_height->set_isarray(false);
   5706     arg_height->set_type(GLMessage::DataType::INT);
   5707     arg_height->add_intvalue(height);
   5708 
   5709     // call function
   5710     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5711     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5712     glContext->hooks->gl.glViewport(x, y, width, height);
   5713     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5714     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5715 
   5716     void *pointerArgs[] = {
   5717     };
   5718 
   5719     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5720                               threadStartTime, threadEndTime,
   5721                               &glmsg, pointerArgs);
   5722     glContext->traceGLMessage(&glmsg);
   5723 }
   5724 
   5725 void GLTrace_glReadBuffer(GLenum mode) {
   5726     GLMessage glmsg;
   5727     GLTraceContext *glContext = getGLTraceContext();
   5728 
   5729     glmsg.set_function(GLMessage::glReadBuffer);
   5730 
   5731     // copy argument mode
   5732     GLMessage_DataType *arg_mode = glmsg.add_args();
   5733     arg_mode->set_isarray(false);
   5734     arg_mode->set_type(GLMessage::DataType::ENUM);
   5735     arg_mode->add_intvalue((int)mode);
   5736 
   5737     // call function
   5738     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5739     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5740     glContext->hooks->gl.glReadBuffer(mode);
   5741     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5742     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5743 
   5744     void *pointerArgs[] = {
   5745     };
   5746 
   5747     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5748                               threadStartTime, threadEndTime,
   5749                               &glmsg, pointerArgs);
   5750     glContext->traceGLMessage(&glmsg);
   5751 }
   5752 
   5753 void GLTrace_glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices) {
   5754     GLMessage glmsg;
   5755     GLTraceContext *glContext = getGLTraceContext();
   5756 
   5757     glmsg.set_function(GLMessage::glDrawRangeElements);
   5758 
   5759     // copy argument mode
   5760     GLMessage_DataType *arg_mode = glmsg.add_args();
   5761     arg_mode->set_isarray(false);
   5762     arg_mode->set_type(GLMessage::DataType::ENUM);
   5763     arg_mode->add_intvalue((int)mode);
   5764 
   5765     // copy argument start
   5766     GLMessage_DataType *arg_start = glmsg.add_args();
   5767     arg_start->set_isarray(false);
   5768     arg_start->set_type(GLMessage::DataType::INT);
   5769     arg_start->add_intvalue(start);
   5770 
   5771     // copy argument end
   5772     GLMessage_DataType *arg_end = glmsg.add_args();
   5773     arg_end->set_isarray(false);
   5774     arg_end->set_type(GLMessage::DataType::INT);
   5775     arg_end->add_intvalue(end);
   5776 
   5777     // copy argument count
   5778     GLMessage_DataType *arg_count = glmsg.add_args();
   5779     arg_count->set_isarray(false);
   5780     arg_count->set_type(GLMessage::DataType::INT);
   5781     arg_count->add_intvalue(count);
   5782 
   5783     // copy argument type
   5784     GLMessage_DataType *arg_type = glmsg.add_args();
   5785     arg_type->set_isarray(false);
   5786     arg_type->set_type(GLMessage::DataType::ENUM);
   5787     arg_type->add_intvalue((int)type);
   5788 
   5789     // copy argument indices
   5790     GLMessage_DataType *arg_indices = glmsg.add_args();
   5791     arg_indices->set_isarray(false);
   5792     arg_indices->set_type(GLMessage::DataType::INT64);
   5793     arg_indices->add_int64value((uintptr_t)indices);
   5794 
   5795     // call function
   5796     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5797     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5798     glContext->hooks->gl.glDrawRangeElements(mode, start, end, count, type, indices);
   5799     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5800     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5801 
   5802     void *pointerArgs[] = {
   5803         (void *) indices,
   5804     };
   5805 
   5806     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5807                               threadStartTime, threadEndTime,
   5808                               &glmsg, pointerArgs);
   5809     glContext->traceGLMessage(&glmsg);
   5810 }
   5811 
   5812 void GLTrace_glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels) {
   5813     GLMessage glmsg;
   5814     GLTraceContext *glContext = getGLTraceContext();
   5815 
   5816     glmsg.set_function(GLMessage::glTexImage3D);
   5817 
   5818     // copy argument target
   5819     GLMessage_DataType *arg_target = glmsg.add_args();
   5820     arg_target->set_isarray(false);
   5821     arg_target->set_type(GLMessage::DataType::ENUM);
   5822     arg_target->add_intvalue((int)target);
   5823 
   5824     // copy argument level
   5825     GLMessage_DataType *arg_level = glmsg.add_args();
   5826     arg_level->set_isarray(false);
   5827     arg_level->set_type(GLMessage::DataType::INT);
   5828     arg_level->add_intvalue(level);
   5829 
   5830     // copy argument internalformat
   5831     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   5832     arg_internalformat->set_isarray(false);
   5833     arg_internalformat->set_type(GLMessage::DataType::INT);
   5834     arg_internalformat->add_intvalue(internalformat);
   5835 
   5836     // copy argument width
   5837     GLMessage_DataType *arg_width = glmsg.add_args();
   5838     arg_width->set_isarray(false);
   5839     arg_width->set_type(GLMessage::DataType::INT);
   5840     arg_width->add_intvalue(width);
   5841 
   5842     // copy argument height
   5843     GLMessage_DataType *arg_height = glmsg.add_args();
   5844     arg_height->set_isarray(false);
   5845     arg_height->set_type(GLMessage::DataType::INT);
   5846     arg_height->add_intvalue(height);
   5847 
   5848     // copy argument depth
   5849     GLMessage_DataType *arg_depth = glmsg.add_args();
   5850     arg_depth->set_isarray(false);
   5851     arg_depth->set_type(GLMessage::DataType::INT);
   5852     arg_depth->add_intvalue(depth);
   5853 
   5854     // copy argument border
   5855     GLMessage_DataType *arg_border = glmsg.add_args();
   5856     arg_border->set_isarray(false);
   5857     arg_border->set_type(GLMessage::DataType::INT);
   5858     arg_border->add_intvalue(border);
   5859 
   5860     // copy argument format
   5861     GLMessage_DataType *arg_format = glmsg.add_args();
   5862     arg_format->set_isarray(false);
   5863     arg_format->set_type(GLMessage::DataType::ENUM);
   5864     arg_format->add_intvalue((int)format);
   5865 
   5866     // copy argument type
   5867     GLMessage_DataType *arg_type = glmsg.add_args();
   5868     arg_type->set_isarray(false);
   5869     arg_type->set_type(GLMessage::DataType::ENUM);
   5870     arg_type->add_intvalue((int)type);
   5871 
   5872     // copy argument pixels
   5873     GLMessage_DataType *arg_pixels = glmsg.add_args();
   5874     arg_pixels->set_isarray(false);
   5875     arg_pixels->set_type(GLMessage::DataType::INT64);
   5876     arg_pixels->add_int64value((uintptr_t)pixels);
   5877 
   5878     // call function
   5879     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5880     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5881     glContext->hooks->gl.glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
   5882     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5883     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5884 
   5885     void *pointerArgs[] = {
   5886         (void *) pixels,
   5887     };
   5888 
   5889     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5890                               threadStartTime, threadEndTime,
   5891                               &glmsg, pointerArgs);
   5892     glContext->traceGLMessage(&glmsg);
   5893 }
   5894 
   5895 void GLTrace_glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels) {
   5896     GLMessage glmsg;
   5897     GLTraceContext *glContext = getGLTraceContext();
   5898 
   5899     glmsg.set_function(GLMessage::glTexSubImage3D);
   5900 
   5901     // copy argument target
   5902     GLMessage_DataType *arg_target = glmsg.add_args();
   5903     arg_target->set_isarray(false);
   5904     arg_target->set_type(GLMessage::DataType::ENUM);
   5905     arg_target->add_intvalue((int)target);
   5906 
   5907     // copy argument level
   5908     GLMessage_DataType *arg_level = glmsg.add_args();
   5909     arg_level->set_isarray(false);
   5910     arg_level->set_type(GLMessage::DataType::INT);
   5911     arg_level->add_intvalue(level);
   5912 
   5913     // copy argument xoffset
   5914     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   5915     arg_xoffset->set_isarray(false);
   5916     arg_xoffset->set_type(GLMessage::DataType::INT);
   5917     arg_xoffset->add_intvalue(xoffset);
   5918 
   5919     // copy argument yoffset
   5920     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   5921     arg_yoffset->set_isarray(false);
   5922     arg_yoffset->set_type(GLMessage::DataType::INT);
   5923     arg_yoffset->add_intvalue(yoffset);
   5924 
   5925     // copy argument zoffset
   5926     GLMessage_DataType *arg_zoffset = glmsg.add_args();
   5927     arg_zoffset->set_isarray(false);
   5928     arg_zoffset->set_type(GLMessage::DataType::INT);
   5929     arg_zoffset->add_intvalue(zoffset);
   5930 
   5931     // copy argument width
   5932     GLMessage_DataType *arg_width = glmsg.add_args();
   5933     arg_width->set_isarray(false);
   5934     arg_width->set_type(GLMessage::DataType::INT);
   5935     arg_width->add_intvalue(width);
   5936 
   5937     // copy argument height
   5938     GLMessage_DataType *arg_height = glmsg.add_args();
   5939     arg_height->set_isarray(false);
   5940     arg_height->set_type(GLMessage::DataType::INT);
   5941     arg_height->add_intvalue(height);
   5942 
   5943     // copy argument depth
   5944     GLMessage_DataType *arg_depth = glmsg.add_args();
   5945     arg_depth->set_isarray(false);
   5946     arg_depth->set_type(GLMessage::DataType::INT);
   5947     arg_depth->add_intvalue(depth);
   5948 
   5949     // copy argument format
   5950     GLMessage_DataType *arg_format = glmsg.add_args();
   5951     arg_format->set_isarray(false);
   5952     arg_format->set_type(GLMessage::DataType::ENUM);
   5953     arg_format->add_intvalue((int)format);
   5954 
   5955     // copy argument type
   5956     GLMessage_DataType *arg_type = glmsg.add_args();
   5957     arg_type->set_isarray(false);
   5958     arg_type->set_type(GLMessage::DataType::ENUM);
   5959     arg_type->add_intvalue((int)type);
   5960 
   5961     // copy argument pixels
   5962     GLMessage_DataType *arg_pixels = glmsg.add_args();
   5963     arg_pixels->set_isarray(false);
   5964     arg_pixels->set_type(GLMessage::DataType::INT64);
   5965     arg_pixels->add_int64value((uintptr_t)pixels);
   5966 
   5967     // call function
   5968     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5969     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   5970     glContext->hooks->gl.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
   5971     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   5972     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   5973 
   5974     void *pointerArgs[] = {
   5975         (void *) pixels,
   5976     };
   5977 
   5978     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   5979                               threadStartTime, threadEndTime,
   5980                               &glmsg, pointerArgs);
   5981     glContext->traceGLMessage(&glmsg);
   5982 }
   5983 
   5984 void GLTrace_glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
   5985     GLMessage glmsg;
   5986     GLTraceContext *glContext = getGLTraceContext();
   5987 
   5988     glmsg.set_function(GLMessage::glCopyTexSubImage3D);
   5989 
   5990     // copy argument target
   5991     GLMessage_DataType *arg_target = glmsg.add_args();
   5992     arg_target->set_isarray(false);
   5993     arg_target->set_type(GLMessage::DataType::ENUM);
   5994     arg_target->add_intvalue((int)target);
   5995 
   5996     // copy argument level
   5997     GLMessage_DataType *arg_level = glmsg.add_args();
   5998     arg_level->set_isarray(false);
   5999     arg_level->set_type(GLMessage::DataType::INT);
   6000     arg_level->add_intvalue(level);
   6001 
   6002     // copy argument xoffset
   6003     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   6004     arg_xoffset->set_isarray(false);
   6005     arg_xoffset->set_type(GLMessage::DataType::INT);
   6006     arg_xoffset->add_intvalue(xoffset);
   6007 
   6008     // copy argument yoffset
   6009     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   6010     arg_yoffset->set_isarray(false);
   6011     arg_yoffset->set_type(GLMessage::DataType::INT);
   6012     arg_yoffset->add_intvalue(yoffset);
   6013 
   6014     // copy argument zoffset
   6015     GLMessage_DataType *arg_zoffset = glmsg.add_args();
   6016     arg_zoffset->set_isarray(false);
   6017     arg_zoffset->set_type(GLMessage::DataType::INT);
   6018     arg_zoffset->add_intvalue(zoffset);
   6019 
   6020     // copy argument x
   6021     GLMessage_DataType *arg_x = glmsg.add_args();
   6022     arg_x->set_isarray(false);
   6023     arg_x->set_type(GLMessage::DataType::INT);
   6024     arg_x->add_intvalue(x);
   6025 
   6026     // copy argument y
   6027     GLMessage_DataType *arg_y = glmsg.add_args();
   6028     arg_y->set_isarray(false);
   6029     arg_y->set_type(GLMessage::DataType::INT);
   6030     arg_y->add_intvalue(y);
   6031 
   6032     // copy argument width
   6033     GLMessage_DataType *arg_width = glmsg.add_args();
   6034     arg_width->set_isarray(false);
   6035     arg_width->set_type(GLMessage::DataType::INT);
   6036     arg_width->add_intvalue(width);
   6037 
   6038     // copy argument height
   6039     GLMessage_DataType *arg_height = glmsg.add_args();
   6040     arg_height->set_isarray(false);
   6041     arg_height->set_type(GLMessage::DataType::INT);
   6042     arg_height->add_intvalue(height);
   6043 
   6044     // call function
   6045     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6046     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6047     glContext->hooks->gl.glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
   6048     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6049     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6050 
   6051     void *pointerArgs[] = {
   6052     };
   6053 
   6054     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6055                               threadStartTime, threadEndTime,
   6056                               &glmsg, pointerArgs);
   6057     glContext->traceGLMessage(&glmsg);
   6058 }
   6059 
   6060 void GLTrace_glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data) {
   6061     GLMessage glmsg;
   6062     GLTraceContext *glContext = getGLTraceContext();
   6063 
   6064     glmsg.set_function(GLMessage::glCompressedTexImage3D);
   6065 
   6066     // copy argument target
   6067     GLMessage_DataType *arg_target = glmsg.add_args();
   6068     arg_target->set_isarray(false);
   6069     arg_target->set_type(GLMessage::DataType::ENUM);
   6070     arg_target->add_intvalue((int)target);
   6071 
   6072     // copy argument level
   6073     GLMessage_DataType *arg_level = glmsg.add_args();
   6074     arg_level->set_isarray(false);
   6075     arg_level->set_type(GLMessage::DataType::INT);
   6076     arg_level->add_intvalue(level);
   6077 
   6078     // copy argument internalformat
   6079     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   6080     arg_internalformat->set_isarray(false);
   6081     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   6082     arg_internalformat->add_intvalue((int)internalformat);
   6083 
   6084     // copy argument width
   6085     GLMessage_DataType *arg_width = glmsg.add_args();
   6086     arg_width->set_isarray(false);
   6087     arg_width->set_type(GLMessage::DataType::INT);
   6088     arg_width->add_intvalue(width);
   6089 
   6090     // copy argument height
   6091     GLMessage_DataType *arg_height = glmsg.add_args();
   6092     arg_height->set_isarray(false);
   6093     arg_height->set_type(GLMessage::DataType::INT);
   6094     arg_height->add_intvalue(height);
   6095 
   6096     // copy argument depth
   6097     GLMessage_DataType *arg_depth = glmsg.add_args();
   6098     arg_depth->set_isarray(false);
   6099     arg_depth->set_type(GLMessage::DataType::INT);
   6100     arg_depth->add_intvalue(depth);
   6101 
   6102     // copy argument border
   6103     GLMessage_DataType *arg_border = glmsg.add_args();
   6104     arg_border->set_isarray(false);
   6105     arg_border->set_type(GLMessage::DataType::INT);
   6106     arg_border->add_intvalue(border);
   6107 
   6108     // copy argument imageSize
   6109     GLMessage_DataType *arg_imageSize = glmsg.add_args();
   6110     arg_imageSize->set_isarray(false);
   6111     arg_imageSize->set_type(GLMessage::DataType::INT);
   6112     arg_imageSize->add_intvalue(imageSize);
   6113 
   6114     // copy argument data
   6115     GLMessage_DataType *arg_data = glmsg.add_args();
   6116     arg_data->set_isarray(false);
   6117     arg_data->set_type(GLMessage::DataType::INT64);
   6118     arg_data->add_int64value((uintptr_t)data);
   6119 
   6120     // call function
   6121     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6122     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6123     glContext->hooks->gl.glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
   6124     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6125     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6126 
   6127     void *pointerArgs[] = {
   6128         (void *) data,
   6129     };
   6130 
   6131     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6132                               threadStartTime, threadEndTime,
   6133                               &glmsg, pointerArgs);
   6134     glContext->traceGLMessage(&glmsg);
   6135 }
   6136 
   6137 void GLTrace_glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data) {
   6138     GLMessage glmsg;
   6139     GLTraceContext *glContext = getGLTraceContext();
   6140 
   6141     glmsg.set_function(GLMessage::glCompressedTexSubImage3D);
   6142 
   6143     // copy argument target
   6144     GLMessage_DataType *arg_target = glmsg.add_args();
   6145     arg_target->set_isarray(false);
   6146     arg_target->set_type(GLMessage::DataType::ENUM);
   6147     arg_target->add_intvalue((int)target);
   6148 
   6149     // copy argument level
   6150     GLMessage_DataType *arg_level = glmsg.add_args();
   6151     arg_level->set_isarray(false);
   6152     arg_level->set_type(GLMessage::DataType::INT);
   6153     arg_level->add_intvalue(level);
   6154 
   6155     // copy argument xoffset
   6156     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   6157     arg_xoffset->set_isarray(false);
   6158     arg_xoffset->set_type(GLMessage::DataType::INT);
   6159     arg_xoffset->add_intvalue(xoffset);
   6160 
   6161     // copy argument yoffset
   6162     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   6163     arg_yoffset->set_isarray(false);
   6164     arg_yoffset->set_type(GLMessage::DataType::INT);
   6165     arg_yoffset->add_intvalue(yoffset);
   6166 
   6167     // copy argument zoffset
   6168     GLMessage_DataType *arg_zoffset = glmsg.add_args();
   6169     arg_zoffset->set_isarray(false);
   6170     arg_zoffset->set_type(GLMessage::DataType::INT);
   6171     arg_zoffset->add_intvalue(zoffset);
   6172 
   6173     // copy argument width
   6174     GLMessage_DataType *arg_width = glmsg.add_args();
   6175     arg_width->set_isarray(false);
   6176     arg_width->set_type(GLMessage::DataType::INT);
   6177     arg_width->add_intvalue(width);
   6178 
   6179     // copy argument height
   6180     GLMessage_DataType *arg_height = glmsg.add_args();
   6181     arg_height->set_isarray(false);
   6182     arg_height->set_type(GLMessage::DataType::INT);
   6183     arg_height->add_intvalue(height);
   6184 
   6185     // copy argument depth
   6186     GLMessage_DataType *arg_depth = glmsg.add_args();
   6187     arg_depth->set_isarray(false);
   6188     arg_depth->set_type(GLMessage::DataType::INT);
   6189     arg_depth->add_intvalue(depth);
   6190 
   6191     // copy argument format
   6192     GLMessage_DataType *arg_format = glmsg.add_args();
   6193     arg_format->set_isarray(false);
   6194     arg_format->set_type(GLMessage::DataType::ENUM);
   6195     arg_format->add_intvalue((int)format);
   6196 
   6197     // copy argument imageSize
   6198     GLMessage_DataType *arg_imageSize = glmsg.add_args();
   6199     arg_imageSize->set_isarray(false);
   6200     arg_imageSize->set_type(GLMessage::DataType::INT);
   6201     arg_imageSize->add_intvalue(imageSize);
   6202 
   6203     // copy argument data
   6204     GLMessage_DataType *arg_data = glmsg.add_args();
   6205     arg_data->set_isarray(false);
   6206     arg_data->set_type(GLMessage::DataType::INT64);
   6207     arg_data->add_int64value((uintptr_t)data);
   6208 
   6209     // call function
   6210     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6211     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6212     glContext->hooks->gl.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
   6213     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6214     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6215 
   6216     void *pointerArgs[] = {
   6217         (void *) data,
   6218     };
   6219 
   6220     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6221                               threadStartTime, threadEndTime,
   6222                               &glmsg, pointerArgs);
   6223     glContext->traceGLMessage(&glmsg);
   6224 }
   6225 
   6226 void GLTrace_glGenQueries(GLsizei n, GLuint * ids) {
   6227     GLMessage glmsg;
   6228     GLTraceContext *glContext = getGLTraceContext();
   6229 
   6230     glmsg.set_function(GLMessage::glGenQueries);
   6231 
   6232     // copy argument n
   6233     GLMessage_DataType *arg_n = glmsg.add_args();
   6234     arg_n->set_isarray(false);
   6235     arg_n->set_type(GLMessage::DataType::INT);
   6236     arg_n->add_intvalue(n);
   6237 
   6238     // copy argument ids
   6239     GLMessage_DataType *arg_ids = glmsg.add_args();
   6240     arg_ids->set_isarray(false);
   6241     arg_ids->set_type(GLMessage::DataType::INT64);
   6242     arg_ids->add_int64value((uintptr_t)ids);
   6243 
   6244     // call function
   6245     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6246     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6247     glContext->hooks->gl.glGenQueries(n, ids);
   6248     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6249     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6250 
   6251     void *pointerArgs[] = {
   6252         (void *) ids,
   6253     };
   6254 
   6255     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6256                               threadStartTime, threadEndTime,
   6257                               &glmsg, pointerArgs);
   6258     glContext->traceGLMessage(&glmsg);
   6259 }
   6260 
   6261 void GLTrace_glDeleteQueries(GLsizei n, const GLuint * ids) {
   6262     GLMessage glmsg;
   6263     GLTraceContext *glContext = getGLTraceContext();
   6264 
   6265     glmsg.set_function(GLMessage::glDeleteQueries);
   6266 
   6267     // copy argument n
   6268     GLMessage_DataType *arg_n = glmsg.add_args();
   6269     arg_n->set_isarray(false);
   6270     arg_n->set_type(GLMessage::DataType::INT);
   6271     arg_n->add_intvalue(n);
   6272 
   6273     // copy argument ids
   6274     GLMessage_DataType *arg_ids = glmsg.add_args();
   6275     arg_ids->set_isarray(false);
   6276     arg_ids->set_type(GLMessage::DataType::INT64);
   6277     arg_ids->add_int64value((uintptr_t)ids);
   6278 
   6279     // call function
   6280     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6281     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6282     glContext->hooks->gl.glDeleteQueries(n, ids);
   6283     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6284     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6285 
   6286     void *pointerArgs[] = {
   6287         (void *) ids,
   6288     };
   6289 
   6290     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6291                               threadStartTime, threadEndTime,
   6292                               &glmsg, pointerArgs);
   6293     glContext->traceGLMessage(&glmsg);
   6294 }
   6295 
   6296 GLboolean GLTrace_glIsQuery(GLuint id) {
   6297     GLMessage glmsg;
   6298     GLTraceContext *glContext = getGLTraceContext();
   6299 
   6300     glmsg.set_function(GLMessage::glIsQuery);
   6301 
   6302     // copy argument id
   6303     GLMessage_DataType *arg_id = glmsg.add_args();
   6304     arg_id->set_isarray(false);
   6305     arg_id->set_type(GLMessage::DataType::INT);
   6306     arg_id->add_intvalue(id);
   6307 
   6308     // call function
   6309     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6310     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6311     GLboolean retValue = glContext->hooks->gl.glIsQuery(id);
   6312     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6313     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6314 
   6315     // set return value
   6316     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   6317     rt->set_isarray(false);
   6318     rt->set_type(GLMessage::DataType::BOOL);
   6319     rt->add_boolvalue(retValue);
   6320 
   6321     void *pointerArgs[] = {
   6322     };
   6323 
   6324     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6325                               threadStartTime, threadEndTime,
   6326                               &glmsg, pointerArgs);
   6327     glContext->traceGLMessage(&glmsg);
   6328 
   6329     return retValue;
   6330 }
   6331 
   6332 void GLTrace_glBeginQuery(GLenum target, GLuint id) {
   6333     GLMessage glmsg;
   6334     GLTraceContext *glContext = getGLTraceContext();
   6335 
   6336     glmsg.set_function(GLMessage::glBeginQuery);
   6337 
   6338     // copy argument target
   6339     GLMessage_DataType *arg_target = glmsg.add_args();
   6340     arg_target->set_isarray(false);
   6341     arg_target->set_type(GLMessage::DataType::ENUM);
   6342     arg_target->add_intvalue((int)target);
   6343 
   6344     // copy argument id
   6345     GLMessage_DataType *arg_id = glmsg.add_args();
   6346     arg_id->set_isarray(false);
   6347     arg_id->set_type(GLMessage::DataType::INT);
   6348     arg_id->add_intvalue(id);
   6349 
   6350     // call function
   6351     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6352     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6353     glContext->hooks->gl.glBeginQuery(target, id);
   6354     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6355     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6356 
   6357     void *pointerArgs[] = {
   6358     };
   6359 
   6360     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6361                               threadStartTime, threadEndTime,
   6362                               &glmsg, pointerArgs);
   6363     glContext->traceGLMessage(&glmsg);
   6364 }
   6365 
   6366 void GLTrace_glEndQuery(GLenum target) {
   6367     GLMessage glmsg;
   6368     GLTraceContext *glContext = getGLTraceContext();
   6369 
   6370     glmsg.set_function(GLMessage::glEndQuery);
   6371 
   6372     // copy argument target
   6373     GLMessage_DataType *arg_target = glmsg.add_args();
   6374     arg_target->set_isarray(false);
   6375     arg_target->set_type(GLMessage::DataType::ENUM);
   6376     arg_target->add_intvalue((int)target);
   6377 
   6378     // call function
   6379     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6380     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6381     glContext->hooks->gl.glEndQuery(target);
   6382     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6383     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6384 
   6385     void *pointerArgs[] = {
   6386     };
   6387 
   6388     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6389                               threadStartTime, threadEndTime,
   6390                               &glmsg, pointerArgs);
   6391     glContext->traceGLMessage(&glmsg);
   6392 }
   6393 
   6394 void GLTrace_glGetQueryiv(GLenum target, GLenum pname, GLint * params) {
   6395     GLMessage glmsg;
   6396     GLTraceContext *glContext = getGLTraceContext();
   6397 
   6398     glmsg.set_function(GLMessage::glGetQueryiv);
   6399 
   6400     // copy argument target
   6401     GLMessage_DataType *arg_target = glmsg.add_args();
   6402     arg_target->set_isarray(false);
   6403     arg_target->set_type(GLMessage::DataType::ENUM);
   6404     arg_target->add_intvalue((int)target);
   6405 
   6406     // copy argument pname
   6407     GLMessage_DataType *arg_pname = glmsg.add_args();
   6408     arg_pname->set_isarray(false);
   6409     arg_pname->set_type(GLMessage::DataType::ENUM);
   6410     arg_pname->add_intvalue((int)pname);
   6411 
   6412     // copy argument params
   6413     GLMessage_DataType *arg_params = glmsg.add_args();
   6414     arg_params->set_isarray(false);
   6415     arg_params->set_type(GLMessage::DataType::INT64);
   6416     arg_params->add_int64value((uintptr_t)params);
   6417 
   6418     // call function
   6419     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6420     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6421     glContext->hooks->gl.glGetQueryiv(target, pname, params);
   6422     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6423     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6424 
   6425     void *pointerArgs[] = {
   6426         (void *) params,
   6427     };
   6428 
   6429     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6430                               threadStartTime, threadEndTime,
   6431                               &glmsg, pointerArgs);
   6432     glContext->traceGLMessage(&glmsg);
   6433 }
   6434 
   6435 void GLTrace_glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint * params) {
   6436     GLMessage glmsg;
   6437     GLTraceContext *glContext = getGLTraceContext();
   6438 
   6439     glmsg.set_function(GLMessage::glGetQueryObjectuiv);
   6440 
   6441     // copy argument id
   6442     GLMessage_DataType *arg_id = glmsg.add_args();
   6443     arg_id->set_isarray(false);
   6444     arg_id->set_type(GLMessage::DataType::INT);
   6445     arg_id->add_intvalue(id);
   6446 
   6447     // copy argument pname
   6448     GLMessage_DataType *arg_pname = glmsg.add_args();
   6449     arg_pname->set_isarray(false);
   6450     arg_pname->set_type(GLMessage::DataType::ENUM);
   6451     arg_pname->add_intvalue((int)pname);
   6452 
   6453     // copy argument params
   6454     GLMessage_DataType *arg_params = glmsg.add_args();
   6455     arg_params->set_isarray(false);
   6456     arg_params->set_type(GLMessage::DataType::INT64);
   6457     arg_params->add_int64value((uintptr_t)params);
   6458 
   6459     // call function
   6460     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6461     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6462     glContext->hooks->gl.glGetQueryObjectuiv(id, pname, params);
   6463     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6464     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6465 
   6466     void *pointerArgs[] = {
   6467         (void *) params,
   6468     };
   6469 
   6470     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6471                               threadStartTime, threadEndTime,
   6472                               &glmsg, pointerArgs);
   6473     glContext->traceGLMessage(&glmsg);
   6474 }
   6475 
   6476 GLboolean GLTrace_glUnmapBuffer(GLenum target) {
   6477     GLMessage glmsg;
   6478     GLTraceContext *glContext = getGLTraceContext();
   6479 
   6480     glmsg.set_function(GLMessage::glUnmapBuffer);
   6481 
   6482     // copy argument target
   6483     GLMessage_DataType *arg_target = glmsg.add_args();
   6484     arg_target->set_isarray(false);
   6485     arg_target->set_type(GLMessage::DataType::ENUM);
   6486     arg_target->add_intvalue((int)target);
   6487 
   6488     // call function
   6489     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6490     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6491     GLboolean retValue = glContext->hooks->gl.glUnmapBuffer(target);
   6492     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6493     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6494 
   6495     // set return value
   6496     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   6497     rt->set_isarray(false);
   6498     rt->set_type(GLMessage::DataType::BOOL);
   6499     rt->add_boolvalue(retValue);
   6500 
   6501     void *pointerArgs[] = {
   6502     };
   6503 
   6504     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6505                               threadStartTime, threadEndTime,
   6506                               &glmsg, pointerArgs);
   6507     glContext->traceGLMessage(&glmsg);
   6508 
   6509     return retValue;
   6510 }
   6511 
   6512 void GLTrace_glGetBufferPointerv(GLenum target, GLenum pname, void ** params) {
   6513     GLMessage glmsg;
   6514     GLTraceContext *glContext = getGLTraceContext();
   6515 
   6516     glmsg.set_function(GLMessage::glGetBufferPointerv);
   6517 
   6518     // copy argument target
   6519     GLMessage_DataType *arg_target = glmsg.add_args();
   6520     arg_target->set_isarray(false);
   6521     arg_target->set_type(GLMessage::DataType::ENUM);
   6522     arg_target->add_intvalue((int)target);
   6523 
   6524     // copy argument pname
   6525     GLMessage_DataType *arg_pname = glmsg.add_args();
   6526     arg_pname->set_isarray(false);
   6527     arg_pname->set_type(GLMessage::DataType::ENUM);
   6528     arg_pname->add_intvalue((int)pname);
   6529 
   6530     // copy argument params
   6531     GLMessage_DataType *arg_params = glmsg.add_args();
   6532     arg_params->set_isarray(false);
   6533     arg_params->set_type(GLMessage::DataType::INT64);
   6534     arg_params->add_int64value((uintptr_t)params);
   6535 
   6536     // call function
   6537     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6538     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6539     glContext->hooks->gl.glGetBufferPointerv(target, pname, params);
   6540     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6541     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6542 
   6543     void *pointerArgs[] = {
   6544         (void *) params,
   6545     };
   6546 
   6547     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6548                               threadStartTime, threadEndTime,
   6549                               &glmsg, pointerArgs);
   6550     glContext->traceGLMessage(&glmsg);
   6551 }
   6552 
   6553 void GLTrace_glDrawBuffers(GLsizei n, const GLenum * bufs) {
   6554     GLMessage glmsg;
   6555     GLTraceContext *glContext = getGLTraceContext();
   6556 
   6557     glmsg.set_function(GLMessage::glDrawBuffers);
   6558 
   6559     // copy argument n
   6560     GLMessage_DataType *arg_n = glmsg.add_args();
   6561     arg_n->set_isarray(false);
   6562     arg_n->set_type(GLMessage::DataType::INT);
   6563     arg_n->add_intvalue(n);
   6564 
   6565     // copy argument bufs
   6566     GLMessage_DataType *arg_bufs = glmsg.add_args();
   6567     arg_bufs->set_isarray(false);
   6568     arg_bufs->set_type(GLMessage::DataType::INT64);
   6569     arg_bufs->add_int64value((uintptr_t)bufs);
   6570 
   6571     // call function
   6572     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6573     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6574     glContext->hooks->gl.glDrawBuffers(n, bufs);
   6575     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6576     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6577 
   6578     void *pointerArgs[] = {
   6579         (void *) bufs,
   6580     };
   6581 
   6582     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6583                               threadStartTime, threadEndTime,
   6584                               &glmsg, pointerArgs);
   6585     glContext->traceGLMessage(&glmsg);
   6586 }
   6587 
   6588 void GLTrace_glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   6589     GLMessage glmsg;
   6590     GLTraceContext *glContext = getGLTraceContext();
   6591 
   6592     glmsg.set_function(GLMessage::glUniformMatrix2x3fv);
   6593 
   6594     // copy argument location
   6595     GLMessage_DataType *arg_location = glmsg.add_args();
   6596     arg_location->set_isarray(false);
   6597     arg_location->set_type(GLMessage::DataType::INT);
   6598     arg_location->add_intvalue(location);
   6599 
   6600     // copy argument count
   6601     GLMessage_DataType *arg_count = glmsg.add_args();
   6602     arg_count->set_isarray(false);
   6603     arg_count->set_type(GLMessage::DataType::INT);
   6604     arg_count->add_intvalue(count);
   6605 
   6606     // copy argument transpose
   6607     GLMessage_DataType *arg_transpose = glmsg.add_args();
   6608     arg_transpose->set_isarray(false);
   6609     arg_transpose->set_type(GLMessage::DataType::BOOL);
   6610     arg_transpose->add_boolvalue(transpose);
   6611 
   6612     // copy argument value
   6613     GLMessage_DataType *arg_value = glmsg.add_args();
   6614     arg_value->set_isarray(false);
   6615     arg_value->set_type(GLMessage::DataType::INT64);
   6616     arg_value->add_int64value((uintptr_t)value);
   6617 
   6618     // call function
   6619     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6620     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6621     glContext->hooks->gl.glUniformMatrix2x3fv(location, count, transpose, value);
   6622     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6623     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6624 
   6625     void *pointerArgs[] = {
   6626         (void *) value,
   6627     };
   6628 
   6629     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6630                               threadStartTime, threadEndTime,
   6631                               &glmsg, pointerArgs);
   6632     glContext->traceGLMessage(&glmsg);
   6633 }
   6634 
   6635 void GLTrace_glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   6636     GLMessage glmsg;
   6637     GLTraceContext *glContext = getGLTraceContext();
   6638 
   6639     glmsg.set_function(GLMessage::glUniformMatrix3x2fv);
   6640 
   6641     // copy argument location
   6642     GLMessage_DataType *arg_location = glmsg.add_args();
   6643     arg_location->set_isarray(false);
   6644     arg_location->set_type(GLMessage::DataType::INT);
   6645     arg_location->add_intvalue(location);
   6646 
   6647     // copy argument count
   6648     GLMessage_DataType *arg_count = glmsg.add_args();
   6649     arg_count->set_isarray(false);
   6650     arg_count->set_type(GLMessage::DataType::INT);
   6651     arg_count->add_intvalue(count);
   6652 
   6653     // copy argument transpose
   6654     GLMessage_DataType *arg_transpose = glmsg.add_args();
   6655     arg_transpose->set_isarray(false);
   6656     arg_transpose->set_type(GLMessage::DataType::BOOL);
   6657     arg_transpose->add_boolvalue(transpose);
   6658 
   6659     // copy argument value
   6660     GLMessage_DataType *arg_value = glmsg.add_args();
   6661     arg_value->set_isarray(false);
   6662     arg_value->set_type(GLMessage::DataType::INT64);
   6663     arg_value->add_int64value((uintptr_t)value);
   6664 
   6665     // call function
   6666     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6667     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6668     glContext->hooks->gl.glUniformMatrix3x2fv(location, count, transpose, value);
   6669     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6670     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6671 
   6672     void *pointerArgs[] = {
   6673         (void *) value,
   6674     };
   6675 
   6676     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6677                               threadStartTime, threadEndTime,
   6678                               &glmsg, pointerArgs);
   6679     glContext->traceGLMessage(&glmsg);
   6680 }
   6681 
   6682 void GLTrace_glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   6683     GLMessage glmsg;
   6684     GLTraceContext *glContext = getGLTraceContext();
   6685 
   6686     glmsg.set_function(GLMessage::glUniformMatrix2x4fv);
   6687 
   6688     // copy argument location
   6689     GLMessage_DataType *arg_location = glmsg.add_args();
   6690     arg_location->set_isarray(false);
   6691     arg_location->set_type(GLMessage::DataType::INT);
   6692     arg_location->add_intvalue(location);
   6693 
   6694     // copy argument count
   6695     GLMessage_DataType *arg_count = glmsg.add_args();
   6696     arg_count->set_isarray(false);
   6697     arg_count->set_type(GLMessage::DataType::INT);
   6698     arg_count->add_intvalue(count);
   6699 
   6700     // copy argument transpose
   6701     GLMessage_DataType *arg_transpose = glmsg.add_args();
   6702     arg_transpose->set_isarray(false);
   6703     arg_transpose->set_type(GLMessage::DataType::BOOL);
   6704     arg_transpose->add_boolvalue(transpose);
   6705 
   6706     // copy argument value
   6707     GLMessage_DataType *arg_value = glmsg.add_args();
   6708     arg_value->set_isarray(false);
   6709     arg_value->set_type(GLMessage::DataType::INT64);
   6710     arg_value->add_int64value((uintptr_t)value);
   6711 
   6712     // call function
   6713     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6714     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6715     glContext->hooks->gl.glUniformMatrix2x4fv(location, count, transpose, value);
   6716     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6717     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6718 
   6719     void *pointerArgs[] = {
   6720         (void *) value,
   6721     };
   6722 
   6723     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6724                               threadStartTime, threadEndTime,
   6725                               &glmsg, pointerArgs);
   6726     glContext->traceGLMessage(&glmsg);
   6727 }
   6728 
   6729 void GLTrace_glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   6730     GLMessage glmsg;
   6731     GLTraceContext *glContext = getGLTraceContext();
   6732 
   6733     glmsg.set_function(GLMessage::glUniformMatrix4x2fv);
   6734 
   6735     // copy argument location
   6736     GLMessage_DataType *arg_location = glmsg.add_args();
   6737     arg_location->set_isarray(false);
   6738     arg_location->set_type(GLMessage::DataType::INT);
   6739     arg_location->add_intvalue(location);
   6740 
   6741     // copy argument count
   6742     GLMessage_DataType *arg_count = glmsg.add_args();
   6743     arg_count->set_isarray(false);
   6744     arg_count->set_type(GLMessage::DataType::INT);
   6745     arg_count->add_intvalue(count);
   6746 
   6747     // copy argument transpose
   6748     GLMessage_DataType *arg_transpose = glmsg.add_args();
   6749     arg_transpose->set_isarray(false);
   6750     arg_transpose->set_type(GLMessage::DataType::BOOL);
   6751     arg_transpose->add_boolvalue(transpose);
   6752 
   6753     // copy argument value
   6754     GLMessage_DataType *arg_value = glmsg.add_args();
   6755     arg_value->set_isarray(false);
   6756     arg_value->set_type(GLMessage::DataType::INT64);
   6757     arg_value->add_int64value((uintptr_t)value);
   6758 
   6759     // call function
   6760     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6761     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6762     glContext->hooks->gl.glUniformMatrix4x2fv(location, count, transpose, value);
   6763     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6764     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6765 
   6766     void *pointerArgs[] = {
   6767         (void *) value,
   6768     };
   6769 
   6770     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6771                               threadStartTime, threadEndTime,
   6772                               &glmsg, pointerArgs);
   6773     glContext->traceGLMessage(&glmsg);
   6774 }
   6775 
   6776 void GLTrace_glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   6777     GLMessage glmsg;
   6778     GLTraceContext *glContext = getGLTraceContext();
   6779 
   6780     glmsg.set_function(GLMessage::glUniformMatrix3x4fv);
   6781 
   6782     // copy argument location
   6783     GLMessage_DataType *arg_location = glmsg.add_args();
   6784     arg_location->set_isarray(false);
   6785     arg_location->set_type(GLMessage::DataType::INT);
   6786     arg_location->add_intvalue(location);
   6787 
   6788     // copy argument count
   6789     GLMessage_DataType *arg_count = glmsg.add_args();
   6790     arg_count->set_isarray(false);
   6791     arg_count->set_type(GLMessage::DataType::INT);
   6792     arg_count->add_intvalue(count);
   6793 
   6794     // copy argument transpose
   6795     GLMessage_DataType *arg_transpose = glmsg.add_args();
   6796     arg_transpose->set_isarray(false);
   6797     arg_transpose->set_type(GLMessage::DataType::BOOL);
   6798     arg_transpose->add_boolvalue(transpose);
   6799 
   6800     // copy argument value
   6801     GLMessage_DataType *arg_value = glmsg.add_args();
   6802     arg_value->set_isarray(false);
   6803     arg_value->set_type(GLMessage::DataType::INT64);
   6804     arg_value->add_int64value((uintptr_t)value);
   6805 
   6806     // call function
   6807     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6808     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6809     glContext->hooks->gl.glUniformMatrix3x4fv(location, count, transpose, value);
   6810     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6811     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6812 
   6813     void *pointerArgs[] = {
   6814         (void *) value,
   6815     };
   6816 
   6817     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6818                               threadStartTime, threadEndTime,
   6819                               &glmsg, pointerArgs);
   6820     glContext->traceGLMessage(&glmsg);
   6821 }
   6822 
   6823 void GLTrace_glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   6824     GLMessage glmsg;
   6825     GLTraceContext *glContext = getGLTraceContext();
   6826 
   6827     glmsg.set_function(GLMessage::glUniformMatrix4x3fv);
   6828 
   6829     // copy argument location
   6830     GLMessage_DataType *arg_location = glmsg.add_args();
   6831     arg_location->set_isarray(false);
   6832     arg_location->set_type(GLMessage::DataType::INT);
   6833     arg_location->add_intvalue(location);
   6834 
   6835     // copy argument count
   6836     GLMessage_DataType *arg_count = glmsg.add_args();
   6837     arg_count->set_isarray(false);
   6838     arg_count->set_type(GLMessage::DataType::INT);
   6839     arg_count->add_intvalue(count);
   6840 
   6841     // copy argument transpose
   6842     GLMessage_DataType *arg_transpose = glmsg.add_args();
   6843     arg_transpose->set_isarray(false);
   6844     arg_transpose->set_type(GLMessage::DataType::BOOL);
   6845     arg_transpose->add_boolvalue(transpose);
   6846 
   6847     // copy argument value
   6848     GLMessage_DataType *arg_value = glmsg.add_args();
   6849     arg_value->set_isarray(false);
   6850     arg_value->set_type(GLMessage::DataType::INT64);
   6851     arg_value->add_int64value((uintptr_t)value);
   6852 
   6853     // call function
   6854     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6855     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6856     glContext->hooks->gl.glUniformMatrix4x3fv(location, count, transpose, value);
   6857     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6858     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6859 
   6860     void *pointerArgs[] = {
   6861         (void *) value,
   6862     };
   6863 
   6864     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6865                               threadStartTime, threadEndTime,
   6866                               &glmsg, pointerArgs);
   6867     glContext->traceGLMessage(&glmsg);
   6868 }
   6869 
   6870 void GLTrace_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
   6871     GLMessage glmsg;
   6872     GLTraceContext *glContext = getGLTraceContext();
   6873 
   6874     glmsg.set_function(GLMessage::glBlitFramebuffer);
   6875 
   6876     // copy argument srcX0
   6877     GLMessage_DataType *arg_srcX0 = glmsg.add_args();
   6878     arg_srcX0->set_isarray(false);
   6879     arg_srcX0->set_type(GLMessage::DataType::INT);
   6880     arg_srcX0->add_intvalue(srcX0);
   6881 
   6882     // copy argument srcY0
   6883     GLMessage_DataType *arg_srcY0 = glmsg.add_args();
   6884     arg_srcY0->set_isarray(false);
   6885     arg_srcY0->set_type(GLMessage::DataType::INT);
   6886     arg_srcY0->add_intvalue(srcY0);
   6887 
   6888     // copy argument srcX1
   6889     GLMessage_DataType *arg_srcX1 = glmsg.add_args();
   6890     arg_srcX1->set_isarray(false);
   6891     arg_srcX1->set_type(GLMessage::DataType::INT);
   6892     arg_srcX1->add_intvalue(srcX1);
   6893 
   6894     // copy argument srcY1
   6895     GLMessage_DataType *arg_srcY1 = glmsg.add_args();
   6896     arg_srcY1->set_isarray(false);
   6897     arg_srcY1->set_type(GLMessage::DataType::INT);
   6898     arg_srcY1->add_intvalue(srcY1);
   6899 
   6900     // copy argument dstX0
   6901     GLMessage_DataType *arg_dstX0 = glmsg.add_args();
   6902     arg_dstX0->set_isarray(false);
   6903     arg_dstX0->set_type(GLMessage::DataType::INT);
   6904     arg_dstX0->add_intvalue(dstX0);
   6905 
   6906     // copy argument dstY0
   6907     GLMessage_DataType *arg_dstY0 = glmsg.add_args();
   6908     arg_dstY0->set_isarray(false);
   6909     arg_dstY0->set_type(GLMessage::DataType::INT);
   6910     arg_dstY0->add_intvalue(dstY0);
   6911 
   6912     // copy argument dstX1
   6913     GLMessage_DataType *arg_dstX1 = glmsg.add_args();
   6914     arg_dstX1->set_isarray(false);
   6915     arg_dstX1->set_type(GLMessage::DataType::INT);
   6916     arg_dstX1->add_intvalue(dstX1);
   6917 
   6918     // copy argument dstY1
   6919     GLMessage_DataType *arg_dstY1 = glmsg.add_args();
   6920     arg_dstY1->set_isarray(false);
   6921     arg_dstY1->set_type(GLMessage::DataType::INT);
   6922     arg_dstY1->add_intvalue(dstY1);
   6923 
   6924     // copy argument mask
   6925     GLMessage_DataType *arg_mask = glmsg.add_args();
   6926     arg_mask->set_isarray(false);
   6927     arg_mask->set_type(GLMessage::DataType::INT);
   6928     arg_mask->add_intvalue(mask);
   6929 
   6930     // copy argument filter
   6931     GLMessage_DataType *arg_filter = glmsg.add_args();
   6932     arg_filter->set_isarray(false);
   6933     arg_filter->set_type(GLMessage::DataType::ENUM);
   6934     arg_filter->add_intvalue((int)filter);
   6935 
   6936     // call function
   6937     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6938     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6939     glContext->hooks->gl.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
   6940     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6941     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6942 
   6943     void *pointerArgs[] = {
   6944     };
   6945 
   6946     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6947                               threadStartTime, threadEndTime,
   6948                               &glmsg, pointerArgs);
   6949     glContext->traceGLMessage(&glmsg);
   6950 }
   6951 
   6952 void GLTrace_glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
   6953     GLMessage glmsg;
   6954     GLTraceContext *glContext = getGLTraceContext();
   6955 
   6956     glmsg.set_function(GLMessage::glRenderbufferStorageMultisample);
   6957 
   6958     // copy argument target
   6959     GLMessage_DataType *arg_target = glmsg.add_args();
   6960     arg_target->set_isarray(false);
   6961     arg_target->set_type(GLMessage::DataType::ENUM);
   6962     arg_target->add_intvalue((int)target);
   6963 
   6964     // copy argument samples
   6965     GLMessage_DataType *arg_samples = glmsg.add_args();
   6966     arg_samples->set_isarray(false);
   6967     arg_samples->set_type(GLMessage::DataType::INT);
   6968     arg_samples->add_intvalue(samples);
   6969 
   6970     // copy argument internalformat
   6971     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   6972     arg_internalformat->set_isarray(false);
   6973     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   6974     arg_internalformat->add_intvalue((int)internalformat);
   6975 
   6976     // copy argument width
   6977     GLMessage_DataType *arg_width = glmsg.add_args();
   6978     arg_width->set_isarray(false);
   6979     arg_width->set_type(GLMessage::DataType::INT);
   6980     arg_width->add_intvalue(width);
   6981 
   6982     // copy argument height
   6983     GLMessage_DataType *arg_height = glmsg.add_args();
   6984     arg_height->set_isarray(false);
   6985     arg_height->set_type(GLMessage::DataType::INT);
   6986     arg_height->add_intvalue(height);
   6987 
   6988     // call function
   6989     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6990     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   6991     glContext->hooks->gl.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
   6992     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   6993     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   6994 
   6995     void *pointerArgs[] = {
   6996     };
   6997 
   6998     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   6999                               threadStartTime, threadEndTime,
   7000                               &glmsg, pointerArgs);
   7001     glContext->traceGLMessage(&glmsg);
   7002 }
   7003 
   7004 void GLTrace_glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {
   7005     GLMessage glmsg;
   7006     GLTraceContext *glContext = getGLTraceContext();
   7007 
   7008     glmsg.set_function(GLMessage::glFramebufferTextureLayer);
   7009 
   7010     // copy argument target
   7011     GLMessage_DataType *arg_target = glmsg.add_args();
   7012     arg_target->set_isarray(false);
   7013     arg_target->set_type(GLMessage::DataType::ENUM);
   7014     arg_target->add_intvalue((int)target);
   7015 
   7016     // copy argument attachment
   7017     GLMessage_DataType *arg_attachment = glmsg.add_args();
   7018     arg_attachment->set_isarray(false);
   7019     arg_attachment->set_type(GLMessage::DataType::ENUM);
   7020     arg_attachment->add_intvalue((int)attachment);
   7021 
   7022     // copy argument texture
   7023     GLMessage_DataType *arg_texture = glmsg.add_args();
   7024     arg_texture->set_isarray(false);
   7025     arg_texture->set_type(GLMessage::DataType::INT);
   7026     arg_texture->add_intvalue(texture);
   7027 
   7028     // copy argument level
   7029     GLMessage_DataType *arg_level = glmsg.add_args();
   7030     arg_level->set_isarray(false);
   7031     arg_level->set_type(GLMessage::DataType::INT);
   7032     arg_level->add_intvalue(level);
   7033 
   7034     // copy argument layer
   7035     GLMessage_DataType *arg_layer = glmsg.add_args();
   7036     arg_layer->set_isarray(false);
   7037     arg_layer->set_type(GLMessage::DataType::INT);
   7038     arg_layer->add_intvalue(layer);
   7039 
   7040     // call function
   7041     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7042     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7043     glContext->hooks->gl.glFramebufferTextureLayer(target, attachment, texture, level, layer);
   7044     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7045     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7046 
   7047     void *pointerArgs[] = {
   7048     };
   7049 
   7050     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7051                               threadStartTime, threadEndTime,
   7052                               &glmsg, pointerArgs);
   7053     glContext->traceGLMessage(&glmsg);
   7054 }
   7055 
   7056 void * GLTrace_glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {
   7057     GLMessage glmsg;
   7058     GLTraceContext *glContext = getGLTraceContext();
   7059 
   7060     glmsg.set_function(GLMessage::glMapBufferRange);
   7061 
   7062     // copy argument target
   7063     GLMessage_DataType *arg_target = glmsg.add_args();
   7064     arg_target->set_isarray(false);
   7065     arg_target->set_type(GLMessage::DataType::ENUM);
   7066     arg_target->add_intvalue((int)target);
   7067 
   7068     // copy argument offset
   7069     GLMessage_DataType *arg_offset = glmsg.add_args();
   7070     arg_offset->set_isarray(false);
   7071     arg_offset->set_type(GLMessage::DataType::INT);
   7072     arg_offset->add_intvalue(offset);
   7073 
   7074     // copy argument length
   7075     GLMessage_DataType *arg_length = glmsg.add_args();
   7076     arg_length->set_isarray(false);
   7077     arg_length->set_type(GLMessage::DataType::INT);
   7078     arg_length->add_intvalue(length);
   7079 
   7080     // copy argument access
   7081     GLMessage_DataType *arg_access = glmsg.add_args();
   7082     arg_access->set_isarray(false);
   7083     arg_access->set_type(GLMessage::DataType::INT);
   7084     arg_access->add_intvalue(access);
   7085 
   7086     // call function
   7087     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7088     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7089     void * retValue = glContext->hooks->gl.glMapBufferRange(target, offset, length, access);
   7090     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7091     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7092 
   7093     // set return value
   7094     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   7095     rt->set_isarray(false);
   7096     rt->set_type(GLMessage::DataType::INT64);
   7097     rt->add_int64value((uintptr_t)retValue);
   7098 
   7099     void *pointerArgs[] = {
   7100         (void *) retValue,
   7101     };
   7102 
   7103     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7104                               threadStartTime, threadEndTime,
   7105                               &glmsg, pointerArgs);
   7106     glContext->traceGLMessage(&glmsg);
   7107 
   7108     return retValue;
   7109 }
   7110 
   7111 void GLTrace_glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) {
   7112     GLMessage glmsg;
   7113     GLTraceContext *glContext = getGLTraceContext();
   7114 
   7115     glmsg.set_function(GLMessage::glFlushMappedBufferRange);
   7116 
   7117     // copy argument target
   7118     GLMessage_DataType *arg_target = glmsg.add_args();
   7119     arg_target->set_isarray(false);
   7120     arg_target->set_type(GLMessage::DataType::ENUM);
   7121     arg_target->add_intvalue((int)target);
   7122 
   7123     // copy argument offset
   7124     GLMessage_DataType *arg_offset = glmsg.add_args();
   7125     arg_offset->set_isarray(false);
   7126     arg_offset->set_type(GLMessage::DataType::INT);
   7127     arg_offset->add_intvalue(offset);
   7128 
   7129     // copy argument length
   7130     GLMessage_DataType *arg_length = glmsg.add_args();
   7131     arg_length->set_isarray(false);
   7132     arg_length->set_type(GLMessage::DataType::INT);
   7133     arg_length->add_intvalue(length);
   7134 
   7135     // call function
   7136     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7137     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7138     glContext->hooks->gl.glFlushMappedBufferRange(target, offset, length);
   7139     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7140     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7141 
   7142     void *pointerArgs[] = {
   7143     };
   7144 
   7145     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7146                               threadStartTime, threadEndTime,
   7147                               &glmsg, pointerArgs);
   7148     glContext->traceGLMessage(&glmsg);
   7149 }
   7150 
   7151 void GLTrace_glBindVertexArray(GLuint array) {
   7152     GLMessage glmsg;
   7153     GLTraceContext *glContext = getGLTraceContext();
   7154 
   7155     glmsg.set_function(GLMessage::glBindVertexArray);
   7156 
   7157     // copy argument array
   7158     GLMessage_DataType *arg_array = glmsg.add_args();
   7159     arg_array->set_isarray(false);
   7160     arg_array->set_type(GLMessage::DataType::INT);
   7161     arg_array->add_intvalue(array);
   7162 
   7163     // call function
   7164     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7165     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7166     glContext->hooks->gl.glBindVertexArray(array);
   7167     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7168     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7169 
   7170     void *pointerArgs[] = {
   7171     };
   7172 
   7173     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7174                               threadStartTime, threadEndTime,
   7175                               &glmsg, pointerArgs);
   7176     glContext->traceGLMessage(&glmsg);
   7177 }
   7178 
   7179 void GLTrace_glDeleteVertexArrays(GLsizei n, const GLuint * arrays) {
   7180     GLMessage glmsg;
   7181     GLTraceContext *glContext = getGLTraceContext();
   7182 
   7183     glmsg.set_function(GLMessage::glDeleteVertexArrays);
   7184 
   7185     // copy argument n
   7186     GLMessage_DataType *arg_n = glmsg.add_args();
   7187     arg_n->set_isarray(false);
   7188     arg_n->set_type(GLMessage::DataType::INT);
   7189     arg_n->add_intvalue(n);
   7190 
   7191     // copy argument arrays
   7192     GLMessage_DataType *arg_arrays = glmsg.add_args();
   7193     arg_arrays->set_isarray(false);
   7194     arg_arrays->set_type(GLMessage::DataType::INT64);
   7195     arg_arrays->add_int64value((uintptr_t)arrays);
   7196 
   7197     // call function
   7198     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7199     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7200     glContext->hooks->gl.glDeleteVertexArrays(n, arrays);
   7201     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7202     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7203 
   7204     void *pointerArgs[] = {
   7205         (void *) arrays,
   7206     };
   7207 
   7208     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7209                               threadStartTime, threadEndTime,
   7210                               &glmsg, pointerArgs);
   7211     glContext->traceGLMessage(&glmsg);
   7212 }
   7213 
   7214 void GLTrace_glGenVertexArrays(GLsizei n, GLuint * arrays) {
   7215     GLMessage glmsg;
   7216     GLTraceContext *glContext = getGLTraceContext();
   7217 
   7218     glmsg.set_function(GLMessage::glGenVertexArrays);
   7219 
   7220     // copy argument n
   7221     GLMessage_DataType *arg_n = glmsg.add_args();
   7222     arg_n->set_isarray(false);
   7223     arg_n->set_type(GLMessage::DataType::INT);
   7224     arg_n->add_intvalue(n);
   7225 
   7226     // copy argument arrays
   7227     GLMessage_DataType *arg_arrays = glmsg.add_args();
   7228     arg_arrays->set_isarray(false);
   7229     arg_arrays->set_type(GLMessage::DataType::INT64);
   7230     arg_arrays->add_int64value((uintptr_t)arrays);
   7231 
   7232     // call function
   7233     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7234     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7235     glContext->hooks->gl.glGenVertexArrays(n, arrays);
   7236     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7237     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7238 
   7239     void *pointerArgs[] = {
   7240         (void *) arrays,
   7241     };
   7242 
   7243     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7244                               threadStartTime, threadEndTime,
   7245                               &glmsg, pointerArgs);
   7246     glContext->traceGLMessage(&glmsg);
   7247 }
   7248 
   7249 GLboolean GLTrace_glIsVertexArray(GLuint array) {
   7250     GLMessage glmsg;
   7251     GLTraceContext *glContext = getGLTraceContext();
   7252 
   7253     glmsg.set_function(GLMessage::glIsVertexArray);
   7254 
   7255     // copy argument array
   7256     GLMessage_DataType *arg_array = glmsg.add_args();
   7257     arg_array->set_isarray(false);
   7258     arg_array->set_type(GLMessage::DataType::INT);
   7259     arg_array->add_intvalue(array);
   7260 
   7261     // call function
   7262     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7263     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7264     GLboolean retValue = glContext->hooks->gl.glIsVertexArray(array);
   7265     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7266     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7267 
   7268     // set return value
   7269     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   7270     rt->set_isarray(false);
   7271     rt->set_type(GLMessage::DataType::BOOL);
   7272     rt->add_boolvalue(retValue);
   7273 
   7274     void *pointerArgs[] = {
   7275     };
   7276 
   7277     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7278                               threadStartTime, threadEndTime,
   7279                               &glmsg, pointerArgs);
   7280     glContext->traceGLMessage(&glmsg);
   7281 
   7282     return retValue;
   7283 }
   7284 
   7285 void GLTrace_glGetIntegeri_v(GLenum target, GLuint index, GLint * data) {
   7286     GLMessage glmsg;
   7287     GLTraceContext *glContext = getGLTraceContext();
   7288 
   7289     glmsg.set_function(GLMessage::glGetIntegeri_v);
   7290 
   7291     // copy argument target
   7292     GLMessage_DataType *arg_target = glmsg.add_args();
   7293     arg_target->set_isarray(false);
   7294     arg_target->set_type(GLMessage::DataType::ENUM);
   7295     arg_target->add_intvalue((int)target);
   7296 
   7297     // copy argument index
   7298     GLMessage_DataType *arg_index = glmsg.add_args();
   7299     arg_index->set_isarray(false);
   7300     arg_index->set_type(GLMessage::DataType::INT);
   7301     arg_index->add_intvalue(index);
   7302 
   7303     // copy argument data
   7304     GLMessage_DataType *arg_data = glmsg.add_args();
   7305     arg_data->set_isarray(false);
   7306     arg_data->set_type(GLMessage::DataType::INT64);
   7307     arg_data->add_int64value((uintptr_t)data);
   7308 
   7309     // call function
   7310     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7311     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7312     glContext->hooks->gl.glGetIntegeri_v(target, index, data);
   7313     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7314     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7315 
   7316     void *pointerArgs[] = {
   7317         (void *) data,
   7318     };
   7319 
   7320     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7321                               threadStartTime, threadEndTime,
   7322                               &glmsg, pointerArgs);
   7323     glContext->traceGLMessage(&glmsg);
   7324 }
   7325 
   7326 void GLTrace_glBeginTransformFeedback(GLenum primitiveMode) {
   7327     GLMessage glmsg;
   7328     GLTraceContext *glContext = getGLTraceContext();
   7329 
   7330     glmsg.set_function(GLMessage::glBeginTransformFeedback);
   7331 
   7332     // copy argument primitiveMode
   7333     GLMessage_DataType *arg_primitiveMode = glmsg.add_args();
   7334     arg_primitiveMode->set_isarray(false);
   7335     arg_primitiveMode->set_type(GLMessage::DataType::ENUM);
   7336     arg_primitiveMode->add_intvalue((int)primitiveMode);
   7337 
   7338     // call function
   7339     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7340     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7341     glContext->hooks->gl.glBeginTransformFeedback(primitiveMode);
   7342     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7343     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7344 
   7345     void *pointerArgs[] = {
   7346     };
   7347 
   7348     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7349                               threadStartTime, threadEndTime,
   7350                               &glmsg, pointerArgs);
   7351     glContext->traceGLMessage(&glmsg);
   7352 }
   7353 
   7354 void GLTrace_glEndTransformFeedback(void) {
   7355     GLMessage glmsg;
   7356     GLTraceContext *glContext = getGLTraceContext();
   7357 
   7358     glmsg.set_function(GLMessage::glEndTransformFeedback);
   7359 
   7360     // call function
   7361     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7362     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7363     glContext->hooks->gl.glEndTransformFeedback();
   7364     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7365     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7366 
   7367     void *pointerArgs[] = {
   7368     };
   7369 
   7370     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7371                               threadStartTime, threadEndTime,
   7372                               &glmsg, pointerArgs);
   7373     glContext->traceGLMessage(&glmsg);
   7374 }
   7375 
   7376 void GLTrace_glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {
   7377     GLMessage glmsg;
   7378     GLTraceContext *glContext = getGLTraceContext();
   7379 
   7380     glmsg.set_function(GLMessage::glBindBufferRange);
   7381 
   7382     // copy argument target
   7383     GLMessage_DataType *arg_target = glmsg.add_args();
   7384     arg_target->set_isarray(false);
   7385     arg_target->set_type(GLMessage::DataType::ENUM);
   7386     arg_target->add_intvalue((int)target);
   7387 
   7388     // copy argument index
   7389     GLMessage_DataType *arg_index = glmsg.add_args();
   7390     arg_index->set_isarray(false);
   7391     arg_index->set_type(GLMessage::DataType::INT);
   7392     arg_index->add_intvalue(index);
   7393 
   7394     // copy argument buffer
   7395     GLMessage_DataType *arg_buffer = glmsg.add_args();
   7396     arg_buffer->set_isarray(false);
   7397     arg_buffer->set_type(GLMessage::DataType::INT);
   7398     arg_buffer->add_intvalue(buffer);
   7399 
   7400     // copy argument offset
   7401     GLMessage_DataType *arg_offset = glmsg.add_args();
   7402     arg_offset->set_isarray(false);
   7403     arg_offset->set_type(GLMessage::DataType::INT);
   7404     arg_offset->add_intvalue(offset);
   7405 
   7406     // copy argument size
   7407     GLMessage_DataType *arg_size = glmsg.add_args();
   7408     arg_size->set_isarray(false);
   7409     arg_size->set_type(GLMessage::DataType::INT);
   7410     arg_size->add_intvalue(size);
   7411 
   7412     // call function
   7413     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7414     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7415     glContext->hooks->gl.glBindBufferRange(target, index, buffer, offset, size);
   7416     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7417     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7418 
   7419     void *pointerArgs[] = {
   7420     };
   7421 
   7422     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7423                               threadStartTime, threadEndTime,
   7424                               &glmsg, pointerArgs);
   7425     glContext->traceGLMessage(&glmsg);
   7426 }
   7427 
   7428 void GLTrace_glBindBufferBase(GLenum target, GLuint index, GLuint buffer) {
   7429     GLMessage glmsg;
   7430     GLTraceContext *glContext = getGLTraceContext();
   7431 
   7432     glmsg.set_function(GLMessage::glBindBufferBase);
   7433 
   7434     // copy argument target
   7435     GLMessage_DataType *arg_target = glmsg.add_args();
   7436     arg_target->set_isarray(false);
   7437     arg_target->set_type(GLMessage::DataType::ENUM);
   7438     arg_target->add_intvalue((int)target);
   7439 
   7440     // copy argument index
   7441     GLMessage_DataType *arg_index = glmsg.add_args();
   7442     arg_index->set_isarray(false);
   7443     arg_index->set_type(GLMessage::DataType::INT);
   7444     arg_index->add_intvalue(index);
   7445 
   7446     // copy argument buffer
   7447     GLMessage_DataType *arg_buffer = glmsg.add_args();
   7448     arg_buffer->set_isarray(false);
   7449     arg_buffer->set_type(GLMessage::DataType::INT);
   7450     arg_buffer->add_intvalue(buffer);
   7451 
   7452     // call function
   7453     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7454     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7455     glContext->hooks->gl.glBindBufferBase(target, index, buffer);
   7456     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7457     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7458 
   7459     void *pointerArgs[] = {
   7460     };
   7461 
   7462     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7463                               threadStartTime, threadEndTime,
   7464                               &glmsg, pointerArgs);
   7465     glContext->traceGLMessage(&glmsg);
   7466 }
   7467 
   7468 void GLTrace_glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode) {
   7469     GLMessage glmsg;
   7470     GLTraceContext *glContext = getGLTraceContext();
   7471 
   7472     glmsg.set_function(GLMessage::glTransformFeedbackVaryings);
   7473 
   7474     // copy argument program
   7475     GLMessage_DataType *arg_program = glmsg.add_args();
   7476     arg_program->set_isarray(false);
   7477     arg_program->set_type(GLMessage::DataType::INT);
   7478     arg_program->add_intvalue(program);
   7479 
   7480     // copy argument count
   7481     GLMessage_DataType *arg_count = glmsg.add_args();
   7482     arg_count->set_isarray(false);
   7483     arg_count->set_type(GLMessage::DataType::INT);
   7484     arg_count->add_intvalue(count);
   7485 
   7486     // copy argument varyings
   7487     GLMessage_DataType *arg_varyings = glmsg.add_args();
   7488     arg_varyings->set_isarray(false);
   7489     arg_varyings->set_type(GLMessage::DataType::INT64);
   7490     arg_varyings->add_int64value((uintptr_t)varyings);
   7491 
   7492     // copy argument bufferMode
   7493     GLMessage_DataType *arg_bufferMode = glmsg.add_args();
   7494     arg_bufferMode->set_isarray(false);
   7495     arg_bufferMode->set_type(GLMessage::DataType::ENUM);
   7496     arg_bufferMode->add_intvalue((int)bufferMode);
   7497 
   7498     // call function
   7499     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7500     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7501     glContext->hooks->gl.glTransformFeedbackVaryings(program, count, varyings, bufferMode);
   7502     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7503     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7504 
   7505     void *pointerArgs[] = {
   7506         (void *) varyings,
   7507     };
   7508 
   7509     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7510                               threadStartTime, threadEndTime,
   7511                               &glmsg, pointerArgs);
   7512     glContext->traceGLMessage(&glmsg);
   7513 }
   7514 
   7515 void GLTrace_glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) {
   7516     GLMessage glmsg;
   7517     GLTraceContext *glContext = getGLTraceContext();
   7518 
   7519     glmsg.set_function(GLMessage::glGetTransformFeedbackVarying);
   7520 
   7521     // copy argument program
   7522     GLMessage_DataType *arg_program = glmsg.add_args();
   7523     arg_program->set_isarray(false);
   7524     arg_program->set_type(GLMessage::DataType::INT);
   7525     arg_program->add_intvalue(program);
   7526 
   7527     // copy argument index
   7528     GLMessage_DataType *arg_index = glmsg.add_args();
   7529     arg_index->set_isarray(false);
   7530     arg_index->set_type(GLMessage::DataType::INT);
   7531     arg_index->add_intvalue(index);
   7532 
   7533     // copy argument bufSize
   7534     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   7535     arg_bufSize->set_isarray(false);
   7536     arg_bufSize->set_type(GLMessage::DataType::INT);
   7537     arg_bufSize->add_intvalue(bufSize);
   7538 
   7539     // copy argument length
   7540     GLMessage_DataType *arg_length = glmsg.add_args();
   7541     arg_length->set_isarray(false);
   7542     arg_length->set_type(GLMessage::DataType::INT64);
   7543     arg_length->add_int64value((uintptr_t)length);
   7544 
   7545     // copy argument size
   7546     GLMessage_DataType *arg_size = glmsg.add_args();
   7547     arg_size->set_isarray(false);
   7548     arg_size->set_type(GLMessage::DataType::INT64);
   7549     arg_size->add_int64value((uintptr_t)size);
   7550 
   7551     // copy argument type
   7552     GLMessage_DataType *arg_type = glmsg.add_args();
   7553     arg_type->set_isarray(false);
   7554     arg_type->set_type(GLMessage::DataType::INT64);
   7555     arg_type->add_int64value((uintptr_t)type);
   7556 
   7557     // copy argument name
   7558     GLMessage_DataType *arg_name = glmsg.add_args();
   7559     arg_name->set_isarray(false);
   7560     arg_name->set_type(GLMessage::DataType::INT64);
   7561     arg_name->add_int64value((uintptr_t)name);
   7562 
   7563     // call function
   7564     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7565     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7566     glContext->hooks->gl.glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
   7567     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7568     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7569 
   7570     void *pointerArgs[] = {
   7571         (void *) length,
   7572         (void *) size,
   7573         (void *) type,
   7574         (void *) name,
   7575     };
   7576 
   7577     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7578                               threadStartTime, threadEndTime,
   7579                               &glmsg, pointerArgs);
   7580     glContext->traceGLMessage(&glmsg);
   7581 }
   7582 
   7583 void GLTrace_glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer) {
   7584     GLMessage glmsg;
   7585     GLTraceContext *glContext = getGLTraceContext();
   7586 
   7587     glmsg.set_function(GLMessage::glVertexAttribIPointer);
   7588 
   7589     // copy argument index
   7590     GLMessage_DataType *arg_index = glmsg.add_args();
   7591     arg_index->set_isarray(false);
   7592     arg_index->set_type(GLMessage::DataType::INT);
   7593     arg_index->add_intvalue(index);
   7594 
   7595     // copy argument size
   7596     GLMessage_DataType *arg_size = glmsg.add_args();
   7597     arg_size->set_isarray(false);
   7598     arg_size->set_type(GLMessage::DataType::INT);
   7599     arg_size->add_intvalue(size);
   7600 
   7601     // copy argument type
   7602     GLMessage_DataType *arg_type = glmsg.add_args();
   7603     arg_type->set_isarray(false);
   7604     arg_type->set_type(GLMessage::DataType::ENUM);
   7605     arg_type->add_intvalue((int)type);
   7606 
   7607     // copy argument stride
   7608     GLMessage_DataType *arg_stride = glmsg.add_args();
   7609     arg_stride->set_isarray(false);
   7610     arg_stride->set_type(GLMessage::DataType::INT);
   7611     arg_stride->add_intvalue(stride);
   7612 
   7613     // copy argument pointer
   7614     GLMessage_DataType *arg_pointer = glmsg.add_args();
   7615     arg_pointer->set_isarray(false);
   7616     arg_pointer->set_type(GLMessage::DataType::INT64);
   7617     arg_pointer->add_int64value((uintptr_t)pointer);
   7618 
   7619     // call function
   7620     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7621     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7622     glContext->hooks->gl.glVertexAttribIPointer(index, size, type, stride, pointer);
   7623     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7624     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7625 
   7626     void *pointerArgs[] = {
   7627         (void *) pointer,
   7628     };
   7629 
   7630     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7631                               threadStartTime, threadEndTime,
   7632                               &glmsg, pointerArgs);
   7633     glContext->traceGLMessage(&glmsg);
   7634 }
   7635 
   7636 void GLTrace_glGetVertexAttribIiv(GLuint index, GLenum pname, GLint * params) {
   7637     GLMessage glmsg;
   7638     GLTraceContext *glContext = getGLTraceContext();
   7639 
   7640     glmsg.set_function(GLMessage::glGetVertexAttribIiv);
   7641 
   7642     // copy argument index
   7643     GLMessage_DataType *arg_index = glmsg.add_args();
   7644     arg_index->set_isarray(false);
   7645     arg_index->set_type(GLMessage::DataType::INT);
   7646     arg_index->add_intvalue(index);
   7647 
   7648     // copy argument pname
   7649     GLMessage_DataType *arg_pname = glmsg.add_args();
   7650     arg_pname->set_isarray(false);
   7651     arg_pname->set_type(GLMessage::DataType::ENUM);
   7652     arg_pname->add_intvalue((int)pname);
   7653 
   7654     // copy argument params
   7655     GLMessage_DataType *arg_params = glmsg.add_args();
   7656     arg_params->set_isarray(false);
   7657     arg_params->set_type(GLMessage::DataType::INT64);
   7658     arg_params->add_int64value((uintptr_t)params);
   7659 
   7660     // call function
   7661     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7662     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7663     glContext->hooks->gl.glGetVertexAttribIiv(index, pname, params);
   7664     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7665     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7666 
   7667     void *pointerArgs[] = {
   7668         (void *) params,
   7669     };
   7670 
   7671     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7672                               threadStartTime, threadEndTime,
   7673                               &glmsg, pointerArgs);
   7674     glContext->traceGLMessage(&glmsg);
   7675 }
   7676 
   7677 void GLTrace_glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint * params) {
   7678     GLMessage glmsg;
   7679     GLTraceContext *glContext = getGLTraceContext();
   7680 
   7681     glmsg.set_function(GLMessage::glGetVertexAttribIuiv);
   7682 
   7683     // copy argument index
   7684     GLMessage_DataType *arg_index = glmsg.add_args();
   7685     arg_index->set_isarray(false);
   7686     arg_index->set_type(GLMessage::DataType::INT);
   7687     arg_index->add_intvalue(index);
   7688 
   7689     // copy argument pname
   7690     GLMessage_DataType *arg_pname = glmsg.add_args();
   7691     arg_pname->set_isarray(false);
   7692     arg_pname->set_type(GLMessage::DataType::ENUM);
   7693     arg_pname->add_intvalue((int)pname);
   7694 
   7695     // copy argument params
   7696     GLMessage_DataType *arg_params = glmsg.add_args();
   7697     arg_params->set_isarray(false);
   7698     arg_params->set_type(GLMessage::DataType::INT64);
   7699     arg_params->add_int64value((uintptr_t)params);
   7700 
   7701     // call function
   7702     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7703     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7704     glContext->hooks->gl.glGetVertexAttribIuiv(index, pname, params);
   7705     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7706     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7707 
   7708     void *pointerArgs[] = {
   7709         (void *) params,
   7710     };
   7711 
   7712     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7713                               threadStartTime, threadEndTime,
   7714                               &glmsg, pointerArgs);
   7715     glContext->traceGLMessage(&glmsg);
   7716 }
   7717 
   7718 void GLTrace_glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) {
   7719     GLMessage glmsg;
   7720     GLTraceContext *glContext = getGLTraceContext();
   7721 
   7722     glmsg.set_function(GLMessage::glVertexAttribI4i);
   7723 
   7724     // copy argument index
   7725     GLMessage_DataType *arg_index = glmsg.add_args();
   7726     arg_index->set_isarray(false);
   7727     arg_index->set_type(GLMessage::DataType::INT);
   7728     arg_index->add_intvalue(index);
   7729 
   7730     // copy argument x
   7731     GLMessage_DataType *arg_x = glmsg.add_args();
   7732     arg_x->set_isarray(false);
   7733     arg_x->set_type(GLMessage::DataType::INT);
   7734     arg_x->add_intvalue(x);
   7735 
   7736     // copy argument y
   7737     GLMessage_DataType *arg_y = glmsg.add_args();
   7738     arg_y->set_isarray(false);
   7739     arg_y->set_type(GLMessage::DataType::INT);
   7740     arg_y->add_intvalue(y);
   7741 
   7742     // copy argument z
   7743     GLMessage_DataType *arg_z = glmsg.add_args();
   7744     arg_z->set_isarray(false);
   7745     arg_z->set_type(GLMessage::DataType::INT);
   7746     arg_z->add_intvalue(z);
   7747 
   7748     // copy argument w
   7749     GLMessage_DataType *arg_w = glmsg.add_args();
   7750     arg_w->set_isarray(false);
   7751     arg_w->set_type(GLMessage::DataType::INT);
   7752     arg_w->add_intvalue(w);
   7753 
   7754     // call function
   7755     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7756     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7757     glContext->hooks->gl.glVertexAttribI4i(index, x, y, z, w);
   7758     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7759     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7760 
   7761     void *pointerArgs[] = {
   7762     };
   7763 
   7764     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7765                               threadStartTime, threadEndTime,
   7766                               &glmsg, pointerArgs);
   7767     glContext->traceGLMessage(&glmsg);
   7768 }
   7769 
   7770 void GLTrace_glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {
   7771     GLMessage glmsg;
   7772     GLTraceContext *glContext = getGLTraceContext();
   7773 
   7774     glmsg.set_function(GLMessage::glVertexAttribI4ui);
   7775 
   7776     // copy argument index
   7777     GLMessage_DataType *arg_index = glmsg.add_args();
   7778     arg_index->set_isarray(false);
   7779     arg_index->set_type(GLMessage::DataType::INT);
   7780     arg_index->add_intvalue(index);
   7781 
   7782     // copy argument x
   7783     GLMessage_DataType *arg_x = glmsg.add_args();
   7784     arg_x->set_isarray(false);
   7785     arg_x->set_type(GLMessage::DataType::INT);
   7786     arg_x->add_intvalue(x);
   7787 
   7788     // copy argument y
   7789     GLMessage_DataType *arg_y = glmsg.add_args();
   7790     arg_y->set_isarray(false);
   7791     arg_y->set_type(GLMessage::DataType::INT);
   7792     arg_y->add_intvalue(y);
   7793 
   7794     // copy argument z
   7795     GLMessage_DataType *arg_z = glmsg.add_args();
   7796     arg_z->set_isarray(false);
   7797     arg_z->set_type(GLMessage::DataType::INT);
   7798     arg_z->add_intvalue(z);
   7799 
   7800     // copy argument w
   7801     GLMessage_DataType *arg_w = glmsg.add_args();
   7802     arg_w->set_isarray(false);
   7803     arg_w->set_type(GLMessage::DataType::INT);
   7804     arg_w->add_intvalue(w);
   7805 
   7806     // call function
   7807     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7808     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7809     glContext->hooks->gl.glVertexAttribI4ui(index, x, y, z, w);
   7810     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7811     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7812 
   7813     void *pointerArgs[] = {
   7814     };
   7815 
   7816     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7817                               threadStartTime, threadEndTime,
   7818                               &glmsg, pointerArgs);
   7819     glContext->traceGLMessage(&glmsg);
   7820 }
   7821 
   7822 void GLTrace_glVertexAttribI4iv(GLuint index, const GLint * v) {
   7823     GLMessage glmsg;
   7824     GLTraceContext *glContext = getGLTraceContext();
   7825 
   7826     glmsg.set_function(GLMessage::glVertexAttribI4iv);
   7827 
   7828     // copy argument index
   7829     GLMessage_DataType *arg_index = glmsg.add_args();
   7830     arg_index->set_isarray(false);
   7831     arg_index->set_type(GLMessage::DataType::INT);
   7832     arg_index->add_intvalue(index);
   7833 
   7834     // copy argument v
   7835     GLMessage_DataType *arg_v = glmsg.add_args();
   7836     arg_v->set_isarray(false);
   7837     arg_v->set_type(GLMessage::DataType::INT64);
   7838     arg_v->add_int64value((uintptr_t)v);
   7839 
   7840     // call function
   7841     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7842     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7843     glContext->hooks->gl.glVertexAttribI4iv(index, v);
   7844     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7845     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7846 
   7847     void *pointerArgs[] = {
   7848         (void *) v,
   7849     };
   7850 
   7851     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7852                               threadStartTime, threadEndTime,
   7853                               &glmsg, pointerArgs);
   7854     glContext->traceGLMessage(&glmsg);
   7855 }
   7856 
   7857 void GLTrace_glVertexAttribI4uiv(GLuint index, const GLuint * v) {
   7858     GLMessage glmsg;
   7859     GLTraceContext *glContext = getGLTraceContext();
   7860 
   7861     glmsg.set_function(GLMessage::glVertexAttribI4uiv);
   7862 
   7863     // copy argument index
   7864     GLMessage_DataType *arg_index = glmsg.add_args();
   7865     arg_index->set_isarray(false);
   7866     arg_index->set_type(GLMessage::DataType::INT);
   7867     arg_index->add_intvalue(index);
   7868 
   7869     // copy argument v
   7870     GLMessage_DataType *arg_v = glmsg.add_args();
   7871     arg_v->set_isarray(false);
   7872     arg_v->set_type(GLMessage::DataType::INT64);
   7873     arg_v->add_int64value((uintptr_t)v);
   7874 
   7875     // call function
   7876     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7877     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7878     glContext->hooks->gl.glVertexAttribI4uiv(index, v);
   7879     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7880     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7881 
   7882     void *pointerArgs[] = {
   7883         (void *) v,
   7884     };
   7885 
   7886     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7887                               threadStartTime, threadEndTime,
   7888                               &glmsg, pointerArgs);
   7889     glContext->traceGLMessage(&glmsg);
   7890 }
   7891 
   7892 void GLTrace_glGetUniformuiv(GLuint program, GLint location, GLuint * params) {
   7893     GLMessage glmsg;
   7894     GLTraceContext *glContext = getGLTraceContext();
   7895 
   7896     glmsg.set_function(GLMessage::glGetUniformuiv);
   7897 
   7898     // copy argument program
   7899     GLMessage_DataType *arg_program = glmsg.add_args();
   7900     arg_program->set_isarray(false);
   7901     arg_program->set_type(GLMessage::DataType::INT);
   7902     arg_program->add_intvalue(program);
   7903 
   7904     // copy argument location
   7905     GLMessage_DataType *arg_location = glmsg.add_args();
   7906     arg_location->set_isarray(false);
   7907     arg_location->set_type(GLMessage::DataType::INT);
   7908     arg_location->add_intvalue(location);
   7909 
   7910     // copy argument params
   7911     GLMessage_DataType *arg_params = glmsg.add_args();
   7912     arg_params->set_isarray(false);
   7913     arg_params->set_type(GLMessage::DataType::INT64);
   7914     arg_params->add_int64value((uintptr_t)params);
   7915 
   7916     // call function
   7917     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7918     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7919     glContext->hooks->gl.glGetUniformuiv(program, location, params);
   7920     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7921     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7922 
   7923     void *pointerArgs[] = {
   7924         (void *) params,
   7925     };
   7926 
   7927     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7928                               threadStartTime, threadEndTime,
   7929                               &glmsg, pointerArgs);
   7930     glContext->traceGLMessage(&glmsg);
   7931 }
   7932 
   7933 GLint GLTrace_glGetFragDataLocation(GLuint program, const GLchar * name) {
   7934     GLMessage glmsg;
   7935     GLTraceContext *glContext = getGLTraceContext();
   7936 
   7937     glmsg.set_function(GLMessage::glGetFragDataLocation);
   7938 
   7939     // copy argument program
   7940     GLMessage_DataType *arg_program = glmsg.add_args();
   7941     arg_program->set_isarray(false);
   7942     arg_program->set_type(GLMessage::DataType::INT);
   7943     arg_program->add_intvalue(program);
   7944 
   7945     // copy argument name
   7946     GLMessage_DataType *arg_name = glmsg.add_args();
   7947     arg_name->set_isarray(false);
   7948     arg_name->set_type(GLMessage::DataType::INT64);
   7949     arg_name->add_int64value((uintptr_t)name);
   7950 
   7951     // call function
   7952     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7953     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7954     GLint retValue = glContext->hooks->gl.glGetFragDataLocation(program, name);
   7955     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7956     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7957 
   7958     // set return value
   7959     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   7960     rt->set_isarray(false);
   7961     rt->set_type(GLMessage::DataType::INT);
   7962     rt->add_intvalue(retValue);
   7963 
   7964     void *pointerArgs[] = {
   7965         (void *) name,
   7966     };
   7967 
   7968     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   7969                               threadStartTime, threadEndTime,
   7970                               &glmsg, pointerArgs);
   7971     glContext->traceGLMessage(&glmsg);
   7972 
   7973     return retValue;
   7974 }
   7975 
   7976 void GLTrace_glUniform1ui(GLint location, GLuint v0) {
   7977     GLMessage glmsg;
   7978     GLTraceContext *glContext = getGLTraceContext();
   7979 
   7980     glmsg.set_function(GLMessage::glUniform1ui);
   7981 
   7982     // copy argument location
   7983     GLMessage_DataType *arg_location = glmsg.add_args();
   7984     arg_location->set_isarray(false);
   7985     arg_location->set_type(GLMessage::DataType::INT);
   7986     arg_location->add_intvalue(location);
   7987 
   7988     // copy argument v0
   7989     GLMessage_DataType *arg_v0 = glmsg.add_args();
   7990     arg_v0->set_isarray(false);
   7991     arg_v0->set_type(GLMessage::DataType::INT);
   7992     arg_v0->add_intvalue(v0);
   7993 
   7994     // call function
   7995     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   7996     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   7997     glContext->hooks->gl.glUniform1ui(location, v0);
   7998     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   7999     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8000 
   8001     void *pointerArgs[] = {
   8002     };
   8003 
   8004     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8005                               threadStartTime, threadEndTime,
   8006                               &glmsg, pointerArgs);
   8007     glContext->traceGLMessage(&glmsg);
   8008 }
   8009 
   8010 void GLTrace_glUniform2ui(GLint location, GLuint v0, GLuint v1) {
   8011     GLMessage glmsg;
   8012     GLTraceContext *glContext = getGLTraceContext();
   8013 
   8014     glmsg.set_function(GLMessage::glUniform2ui);
   8015 
   8016     // copy argument location
   8017     GLMessage_DataType *arg_location = glmsg.add_args();
   8018     arg_location->set_isarray(false);
   8019     arg_location->set_type(GLMessage::DataType::INT);
   8020     arg_location->add_intvalue(location);
   8021 
   8022     // copy argument v0
   8023     GLMessage_DataType *arg_v0 = glmsg.add_args();
   8024     arg_v0->set_isarray(false);
   8025     arg_v0->set_type(GLMessage::DataType::INT);
   8026     arg_v0->add_intvalue(v0);
   8027 
   8028     // copy argument v1
   8029     GLMessage_DataType *arg_v1 = glmsg.add_args();
   8030     arg_v1->set_isarray(false);
   8031     arg_v1->set_type(GLMessage::DataType::INT);
   8032     arg_v1->add_intvalue(v1);
   8033 
   8034     // call function
   8035     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8036     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8037     glContext->hooks->gl.glUniform2ui(location, v0, v1);
   8038     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8039     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8040 
   8041     void *pointerArgs[] = {
   8042     };
   8043 
   8044     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8045                               threadStartTime, threadEndTime,
   8046                               &glmsg, pointerArgs);
   8047     glContext->traceGLMessage(&glmsg);
   8048 }
   8049 
   8050 void GLTrace_glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) {
   8051     GLMessage glmsg;
   8052     GLTraceContext *glContext = getGLTraceContext();
   8053 
   8054     glmsg.set_function(GLMessage::glUniform3ui);
   8055 
   8056     // copy argument location
   8057     GLMessage_DataType *arg_location = glmsg.add_args();
   8058     arg_location->set_isarray(false);
   8059     arg_location->set_type(GLMessage::DataType::INT);
   8060     arg_location->add_intvalue(location);
   8061 
   8062     // copy argument v0
   8063     GLMessage_DataType *arg_v0 = glmsg.add_args();
   8064     arg_v0->set_isarray(false);
   8065     arg_v0->set_type(GLMessage::DataType::INT);
   8066     arg_v0->add_intvalue(v0);
   8067 
   8068     // copy argument v1
   8069     GLMessage_DataType *arg_v1 = glmsg.add_args();
   8070     arg_v1->set_isarray(false);
   8071     arg_v1->set_type(GLMessage::DataType::INT);
   8072     arg_v1->add_intvalue(v1);
   8073 
   8074     // copy argument v2
   8075     GLMessage_DataType *arg_v2 = glmsg.add_args();
   8076     arg_v2->set_isarray(false);
   8077     arg_v2->set_type(GLMessage::DataType::INT);
   8078     arg_v2->add_intvalue(v2);
   8079 
   8080     // call function
   8081     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8082     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8083     glContext->hooks->gl.glUniform3ui(location, v0, v1, v2);
   8084     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8085     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8086 
   8087     void *pointerArgs[] = {
   8088     };
   8089 
   8090     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8091                               threadStartTime, threadEndTime,
   8092                               &glmsg, pointerArgs);
   8093     glContext->traceGLMessage(&glmsg);
   8094 }
   8095 
   8096 void GLTrace_glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {
   8097     GLMessage glmsg;
   8098     GLTraceContext *glContext = getGLTraceContext();
   8099 
   8100     glmsg.set_function(GLMessage::glUniform4ui);
   8101 
   8102     // copy argument location
   8103     GLMessage_DataType *arg_location = glmsg.add_args();
   8104     arg_location->set_isarray(false);
   8105     arg_location->set_type(GLMessage::DataType::INT);
   8106     arg_location->add_intvalue(location);
   8107 
   8108     // copy argument v0
   8109     GLMessage_DataType *arg_v0 = glmsg.add_args();
   8110     arg_v0->set_isarray(false);
   8111     arg_v0->set_type(GLMessage::DataType::INT);
   8112     arg_v0->add_intvalue(v0);
   8113 
   8114     // copy argument v1
   8115     GLMessage_DataType *arg_v1 = glmsg.add_args();
   8116     arg_v1->set_isarray(false);
   8117     arg_v1->set_type(GLMessage::DataType::INT);
   8118     arg_v1->add_intvalue(v1);
   8119 
   8120     // copy argument v2
   8121     GLMessage_DataType *arg_v2 = glmsg.add_args();
   8122     arg_v2->set_isarray(false);
   8123     arg_v2->set_type(GLMessage::DataType::INT);
   8124     arg_v2->add_intvalue(v2);
   8125 
   8126     // copy argument v3
   8127     GLMessage_DataType *arg_v3 = glmsg.add_args();
   8128     arg_v3->set_isarray(false);
   8129     arg_v3->set_type(GLMessage::DataType::INT);
   8130     arg_v3->add_intvalue(v3);
   8131 
   8132     // call function
   8133     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8134     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8135     glContext->hooks->gl.glUniform4ui(location, v0, v1, v2, v3);
   8136     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8137     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8138 
   8139     void *pointerArgs[] = {
   8140     };
   8141 
   8142     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8143                               threadStartTime, threadEndTime,
   8144                               &glmsg, pointerArgs);
   8145     glContext->traceGLMessage(&glmsg);
   8146 }
   8147 
   8148 void GLTrace_glUniform1uiv(GLint location, GLsizei count, const GLuint * value) {
   8149     GLMessage glmsg;
   8150     GLTraceContext *glContext = getGLTraceContext();
   8151 
   8152     glmsg.set_function(GLMessage::glUniform1uiv);
   8153 
   8154     // copy argument location
   8155     GLMessage_DataType *arg_location = glmsg.add_args();
   8156     arg_location->set_isarray(false);
   8157     arg_location->set_type(GLMessage::DataType::INT);
   8158     arg_location->add_intvalue(location);
   8159 
   8160     // copy argument count
   8161     GLMessage_DataType *arg_count = glmsg.add_args();
   8162     arg_count->set_isarray(false);
   8163     arg_count->set_type(GLMessage::DataType::INT);
   8164     arg_count->add_intvalue(count);
   8165 
   8166     // copy argument value
   8167     GLMessage_DataType *arg_value = glmsg.add_args();
   8168     arg_value->set_isarray(false);
   8169     arg_value->set_type(GLMessage::DataType::INT64);
   8170     arg_value->add_int64value((uintptr_t)value);
   8171 
   8172     // call function
   8173     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8174     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8175     glContext->hooks->gl.glUniform1uiv(location, count, value);
   8176     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8177     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8178 
   8179     void *pointerArgs[] = {
   8180         (void *) value,
   8181     };
   8182 
   8183     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8184                               threadStartTime, threadEndTime,
   8185                               &glmsg, pointerArgs);
   8186     glContext->traceGLMessage(&glmsg);
   8187 }
   8188 
   8189 void GLTrace_glUniform2uiv(GLint location, GLsizei count, const GLuint * value) {
   8190     GLMessage glmsg;
   8191     GLTraceContext *glContext = getGLTraceContext();
   8192 
   8193     glmsg.set_function(GLMessage::glUniform2uiv);
   8194 
   8195     // copy argument location
   8196     GLMessage_DataType *arg_location = glmsg.add_args();
   8197     arg_location->set_isarray(false);
   8198     arg_location->set_type(GLMessage::DataType::INT);
   8199     arg_location->add_intvalue(location);
   8200 
   8201     // copy argument count
   8202     GLMessage_DataType *arg_count = glmsg.add_args();
   8203     arg_count->set_isarray(false);
   8204     arg_count->set_type(GLMessage::DataType::INT);
   8205     arg_count->add_intvalue(count);
   8206 
   8207     // copy argument value
   8208     GLMessage_DataType *arg_value = glmsg.add_args();
   8209     arg_value->set_isarray(false);
   8210     arg_value->set_type(GLMessage::DataType::INT64);
   8211     arg_value->add_int64value((uintptr_t)value);
   8212 
   8213     // call function
   8214     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8215     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8216     glContext->hooks->gl.glUniform2uiv(location, count, value);
   8217     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8218     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8219 
   8220     void *pointerArgs[] = {
   8221         (void *) value,
   8222     };
   8223 
   8224     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8225                               threadStartTime, threadEndTime,
   8226                               &glmsg, pointerArgs);
   8227     glContext->traceGLMessage(&glmsg);
   8228 }
   8229 
   8230 void GLTrace_glUniform3uiv(GLint location, GLsizei count, const GLuint * value) {
   8231     GLMessage glmsg;
   8232     GLTraceContext *glContext = getGLTraceContext();
   8233 
   8234     glmsg.set_function(GLMessage::glUniform3uiv);
   8235 
   8236     // copy argument location
   8237     GLMessage_DataType *arg_location = glmsg.add_args();
   8238     arg_location->set_isarray(false);
   8239     arg_location->set_type(GLMessage::DataType::INT);
   8240     arg_location->add_intvalue(location);
   8241 
   8242     // copy argument count
   8243     GLMessage_DataType *arg_count = glmsg.add_args();
   8244     arg_count->set_isarray(false);
   8245     arg_count->set_type(GLMessage::DataType::INT);
   8246     arg_count->add_intvalue(count);
   8247 
   8248     // copy argument value
   8249     GLMessage_DataType *arg_value = glmsg.add_args();
   8250     arg_value->set_isarray(false);
   8251     arg_value->set_type(GLMessage::DataType::INT64);
   8252     arg_value->add_int64value((uintptr_t)value);
   8253 
   8254     // call function
   8255     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8256     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8257     glContext->hooks->gl.glUniform3uiv(location, count, value);
   8258     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8259     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8260 
   8261     void *pointerArgs[] = {
   8262         (void *) value,
   8263     };
   8264 
   8265     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8266                               threadStartTime, threadEndTime,
   8267                               &glmsg, pointerArgs);
   8268     glContext->traceGLMessage(&glmsg);
   8269 }
   8270 
   8271 void GLTrace_glUniform4uiv(GLint location, GLsizei count, const GLuint * value) {
   8272     GLMessage glmsg;
   8273     GLTraceContext *glContext = getGLTraceContext();
   8274 
   8275     glmsg.set_function(GLMessage::glUniform4uiv);
   8276 
   8277     // copy argument location
   8278     GLMessage_DataType *arg_location = glmsg.add_args();
   8279     arg_location->set_isarray(false);
   8280     arg_location->set_type(GLMessage::DataType::INT);
   8281     arg_location->add_intvalue(location);
   8282 
   8283     // copy argument count
   8284     GLMessage_DataType *arg_count = glmsg.add_args();
   8285     arg_count->set_isarray(false);
   8286     arg_count->set_type(GLMessage::DataType::INT);
   8287     arg_count->add_intvalue(count);
   8288 
   8289     // copy argument value
   8290     GLMessage_DataType *arg_value = glmsg.add_args();
   8291     arg_value->set_isarray(false);
   8292     arg_value->set_type(GLMessage::DataType::INT64);
   8293     arg_value->add_int64value((uintptr_t)value);
   8294 
   8295     // call function
   8296     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8297     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8298     glContext->hooks->gl.glUniform4uiv(location, count, value);
   8299     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8300     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8301 
   8302     void *pointerArgs[] = {
   8303         (void *) value,
   8304     };
   8305 
   8306     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8307                               threadStartTime, threadEndTime,
   8308                               &glmsg, pointerArgs);
   8309     glContext->traceGLMessage(&glmsg);
   8310 }
   8311 
   8312 void GLTrace_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint * value) {
   8313     GLMessage glmsg;
   8314     GLTraceContext *glContext = getGLTraceContext();
   8315 
   8316     glmsg.set_function(GLMessage::glClearBufferiv);
   8317 
   8318     // copy argument buffer
   8319     GLMessage_DataType *arg_buffer = glmsg.add_args();
   8320     arg_buffer->set_isarray(false);
   8321     arg_buffer->set_type(GLMessage::DataType::ENUM);
   8322     arg_buffer->add_intvalue((int)buffer);
   8323 
   8324     // copy argument drawbuffer
   8325     GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
   8326     arg_drawbuffer->set_isarray(false);
   8327     arg_drawbuffer->set_type(GLMessage::DataType::INT);
   8328     arg_drawbuffer->add_intvalue(drawbuffer);
   8329 
   8330     // copy argument value
   8331     GLMessage_DataType *arg_value = glmsg.add_args();
   8332     arg_value->set_isarray(false);
   8333     arg_value->set_type(GLMessage::DataType::INT64);
   8334     arg_value->add_int64value((uintptr_t)value);
   8335 
   8336     // call function
   8337     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8338     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8339     glContext->hooks->gl.glClearBufferiv(buffer, drawbuffer, value);
   8340     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8341     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8342 
   8343     void *pointerArgs[] = {
   8344         (void *) value,
   8345     };
   8346 
   8347     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8348                               threadStartTime, threadEndTime,
   8349                               &glmsg, pointerArgs);
   8350     glContext->traceGLMessage(&glmsg);
   8351 }
   8352 
   8353 void GLTrace_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint * value) {
   8354     GLMessage glmsg;
   8355     GLTraceContext *glContext = getGLTraceContext();
   8356 
   8357     glmsg.set_function(GLMessage::glClearBufferuiv);
   8358 
   8359     // copy argument buffer
   8360     GLMessage_DataType *arg_buffer = glmsg.add_args();
   8361     arg_buffer->set_isarray(false);
   8362     arg_buffer->set_type(GLMessage::DataType::ENUM);
   8363     arg_buffer->add_intvalue((int)buffer);
   8364 
   8365     // copy argument drawbuffer
   8366     GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
   8367     arg_drawbuffer->set_isarray(false);
   8368     arg_drawbuffer->set_type(GLMessage::DataType::INT);
   8369     arg_drawbuffer->add_intvalue(drawbuffer);
   8370 
   8371     // copy argument value
   8372     GLMessage_DataType *arg_value = glmsg.add_args();
   8373     arg_value->set_isarray(false);
   8374     arg_value->set_type(GLMessage::DataType::INT64);
   8375     arg_value->add_int64value((uintptr_t)value);
   8376 
   8377     // call function
   8378     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8379     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8380     glContext->hooks->gl.glClearBufferuiv(buffer, drawbuffer, value);
   8381     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8382     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8383 
   8384     void *pointerArgs[] = {
   8385         (void *) value,
   8386     };
   8387 
   8388     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8389                               threadStartTime, threadEndTime,
   8390                               &glmsg, pointerArgs);
   8391     glContext->traceGLMessage(&glmsg);
   8392 }
   8393 
   8394 void GLTrace_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat * value) {
   8395     GLMessage glmsg;
   8396     GLTraceContext *glContext = getGLTraceContext();
   8397 
   8398     glmsg.set_function(GLMessage::glClearBufferfv);
   8399 
   8400     // copy argument buffer
   8401     GLMessage_DataType *arg_buffer = glmsg.add_args();
   8402     arg_buffer->set_isarray(false);
   8403     arg_buffer->set_type(GLMessage::DataType::ENUM);
   8404     arg_buffer->add_intvalue((int)buffer);
   8405 
   8406     // copy argument drawbuffer
   8407     GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
   8408     arg_drawbuffer->set_isarray(false);
   8409     arg_drawbuffer->set_type(GLMessage::DataType::INT);
   8410     arg_drawbuffer->add_intvalue(drawbuffer);
   8411 
   8412     // copy argument value
   8413     GLMessage_DataType *arg_value = glmsg.add_args();
   8414     arg_value->set_isarray(false);
   8415     arg_value->set_type(GLMessage::DataType::INT64);
   8416     arg_value->add_int64value((uintptr_t)value);
   8417 
   8418     // call function
   8419     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8420     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8421     glContext->hooks->gl.glClearBufferfv(buffer, drawbuffer, value);
   8422     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8423     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8424 
   8425     void *pointerArgs[] = {
   8426         (void *) value,
   8427     };
   8428 
   8429     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8430                               threadStartTime, threadEndTime,
   8431                               &glmsg, pointerArgs);
   8432     glContext->traceGLMessage(&glmsg);
   8433 }
   8434 
   8435 void GLTrace_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) {
   8436     GLMessage glmsg;
   8437     GLTraceContext *glContext = getGLTraceContext();
   8438 
   8439     glmsg.set_function(GLMessage::glClearBufferfi);
   8440 
   8441     // copy argument buffer
   8442     GLMessage_DataType *arg_buffer = glmsg.add_args();
   8443     arg_buffer->set_isarray(false);
   8444     arg_buffer->set_type(GLMessage::DataType::ENUM);
   8445     arg_buffer->add_intvalue((int)buffer);
   8446 
   8447     // copy argument drawbuffer
   8448     GLMessage_DataType *arg_drawbuffer = glmsg.add_args();
   8449     arg_drawbuffer->set_isarray(false);
   8450     arg_drawbuffer->set_type(GLMessage::DataType::INT);
   8451     arg_drawbuffer->add_intvalue(drawbuffer);
   8452 
   8453     // copy argument depth
   8454     GLMessage_DataType *arg_depth = glmsg.add_args();
   8455     arg_depth->set_isarray(false);
   8456     arg_depth->set_type(GLMessage::DataType::FLOAT);
   8457     arg_depth->add_floatvalue(depth);
   8458 
   8459     // copy argument stencil
   8460     GLMessage_DataType *arg_stencil = glmsg.add_args();
   8461     arg_stencil->set_isarray(false);
   8462     arg_stencil->set_type(GLMessage::DataType::INT);
   8463     arg_stencil->add_intvalue(stencil);
   8464 
   8465     // call function
   8466     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8467     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8468     glContext->hooks->gl.glClearBufferfi(buffer, drawbuffer, depth, stencil);
   8469     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8470     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8471 
   8472     void *pointerArgs[] = {
   8473     };
   8474 
   8475     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8476                               threadStartTime, threadEndTime,
   8477                               &glmsg, pointerArgs);
   8478     glContext->traceGLMessage(&glmsg);
   8479 }
   8480 
   8481 const GLubyte * GLTrace_glGetStringi(GLenum name, GLuint index) {
   8482     GLMessage glmsg;
   8483     GLTraceContext *glContext = getGLTraceContext();
   8484 
   8485     glmsg.set_function(GLMessage::glGetStringi);
   8486 
   8487     // copy argument name
   8488     GLMessage_DataType *arg_name = glmsg.add_args();
   8489     arg_name->set_isarray(false);
   8490     arg_name->set_type(GLMessage::DataType::ENUM);
   8491     arg_name->add_intvalue((int)name);
   8492 
   8493     // copy argument index
   8494     GLMessage_DataType *arg_index = glmsg.add_args();
   8495     arg_index->set_isarray(false);
   8496     arg_index->set_type(GLMessage::DataType::INT);
   8497     arg_index->add_intvalue(index);
   8498 
   8499     // call function
   8500     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8501     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8502     const GLubyte * retValue = glContext->hooks->gl.glGetStringi(name, index);
   8503     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8504     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8505 
   8506     // set return value
   8507     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   8508     rt->set_isarray(false);
   8509     rt->set_type(GLMessage::DataType::INT64);
   8510     rt->add_int64value((uintptr_t)retValue);
   8511 
   8512     void *pointerArgs[] = {
   8513         (void *) retValue,
   8514     };
   8515 
   8516     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8517                               threadStartTime, threadEndTime,
   8518                               &glmsg, pointerArgs);
   8519     glContext->traceGLMessage(&glmsg);
   8520 
   8521     return retValue;
   8522 }
   8523 
   8524 void GLTrace_glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) {
   8525     GLMessage glmsg;
   8526     GLTraceContext *glContext = getGLTraceContext();
   8527 
   8528     glmsg.set_function(GLMessage::glCopyBufferSubData);
   8529 
   8530     // copy argument readTarget
   8531     GLMessage_DataType *arg_readTarget = glmsg.add_args();
   8532     arg_readTarget->set_isarray(false);
   8533     arg_readTarget->set_type(GLMessage::DataType::ENUM);
   8534     arg_readTarget->add_intvalue((int)readTarget);
   8535 
   8536     // copy argument writeTarget
   8537     GLMessage_DataType *arg_writeTarget = glmsg.add_args();
   8538     arg_writeTarget->set_isarray(false);
   8539     arg_writeTarget->set_type(GLMessage::DataType::ENUM);
   8540     arg_writeTarget->add_intvalue((int)writeTarget);
   8541 
   8542     // copy argument readOffset
   8543     GLMessage_DataType *arg_readOffset = glmsg.add_args();
   8544     arg_readOffset->set_isarray(false);
   8545     arg_readOffset->set_type(GLMessage::DataType::INT);
   8546     arg_readOffset->add_intvalue(readOffset);
   8547 
   8548     // copy argument writeOffset
   8549     GLMessage_DataType *arg_writeOffset = glmsg.add_args();
   8550     arg_writeOffset->set_isarray(false);
   8551     arg_writeOffset->set_type(GLMessage::DataType::INT);
   8552     arg_writeOffset->add_intvalue(writeOffset);
   8553 
   8554     // copy argument size
   8555     GLMessage_DataType *arg_size = glmsg.add_args();
   8556     arg_size->set_isarray(false);
   8557     arg_size->set_type(GLMessage::DataType::INT);
   8558     arg_size->add_intvalue(size);
   8559 
   8560     // call function
   8561     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8562     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8563     glContext->hooks->gl.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
   8564     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8565     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8566 
   8567     void *pointerArgs[] = {
   8568     };
   8569 
   8570     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8571                               threadStartTime, threadEndTime,
   8572                               &glmsg, pointerArgs);
   8573     glContext->traceGLMessage(&glmsg);
   8574 }
   8575 
   8576 void GLTrace_glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices) {
   8577     GLMessage glmsg;
   8578     GLTraceContext *glContext = getGLTraceContext();
   8579 
   8580     glmsg.set_function(GLMessage::glGetUniformIndices);
   8581 
   8582     // copy argument program
   8583     GLMessage_DataType *arg_program = glmsg.add_args();
   8584     arg_program->set_isarray(false);
   8585     arg_program->set_type(GLMessage::DataType::INT);
   8586     arg_program->add_intvalue(program);
   8587 
   8588     // copy argument uniformCount
   8589     GLMessage_DataType *arg_uniformCount = glmsg.add_args();
   8590     arg_uniformCount->set_isarray(false);
   8591     arg_uniformCount->set_type(GLMessage::DataType::INT);
   8592     arg_uniformCount->add_intvalue(uniformCount);
   8593 
   8594     // copy argument uniformNames
   8595     GLMessage_DataType *arg_uniformNames = glmsg.add_args();
   8596     arg_uniformNames->set_isarray(false);
   8597     arg_uniformNames->set_type(GLMessage::DataType::INT64);
   8598     arg_uniformNames->add_int64value((uintptr_t)uniformNames);
   8599 
   8600     // copy argument uniformIndices
   8601     GLMessage_DataType *arg_uniformIndices = glmsg.add_args();
   8602     arg_uniformIndices->set_isarray(false);
   8603     arg_uniformIndices->set_type(GLMessage::DataType::INT64);
   8604     arg_uniformIndices->add_int64value((uintptr_t)uniformIndices);
   8605 
   8606     // call function
   8607     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8608     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8609     glContext->hooks->gl.glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
   8610     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8611     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8612 
   8613     void *pointerArgs[] = {
   8614         (void *) uniformNames,
   8615         (void *) uniformIndices,
   8616     };
   8617 
   8618     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8619                               threadStartTime, threadEndTime,
   8620                               &glmsg, pointerArgs);
   8621     glContext->traceGLMessage(&glmsg);
   8622 }
   8623 
   8624 void GLTrace_glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params) {
   8625     GLMessage glmsg;
   8626     GLTraceContext *glContext = getGLTraceContext();
   8627 
   8628     glmsg.set_function(GLMessage::glGetActiveUniformsiv);
   8629 
   8630     // copy argument program
   8631     GLMessage_DataType *arg_program = glmsg.add_args();
   8632     arg_program->set_isarray(false);
   8633     arg_program->set_type(GLMessage::DataType::INT);
   8634     arg_program->add_intvalue(program);
   8635 
   8636     // copy argument uniformCount
   8637     GLMessage_DataType *arg_uniformCount = glmsg.add_args();
   8638     arg_uniformCount->set_isarray(false);
   8639     arg_uniformCount->set_type(GLMessage::DataType::INT);
   8640     arg_uniformCount->add_intvalue(uniformCount);
   8641 
   8642     // copy argument uniformIndices
   8643     GLMessage_DataType *arg_uniformIndices = glmsg.add_args();
   8644     arg_uniformIndices->set_isarray(false);
   8645     arg_uniformIndices->set_type(GLMessage::DataType::INT64);
   8646     arg_uniformIndices->add_int64value((uintptr_t)uniformIndices);
   8647 
   8648     // copy argument pname
   8649     GLMessage_DataType *arg_pname = glmsg.add_args();
   8650     arg_pname->set_isarray(false);
   8651     arg_pname->set_type(GLMessage::DataType::ENUM);
   8652     arg_pname->add_intvalue((int)pname);
   8653 
   8654     // copy argument params
   8655     GLMessage_DataType *arg_params = glmsg.add_args();
   8656     arg_params->set_isarray(false);
   8657     arg_params->set_type(GLMessage::DataType::INT64);
   8658     arg_params->add_int64value((uintptr_t)params);
   8659 
   8660     // call function
   8661     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8662     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8663     glContext->hooks->gl.glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
   8664     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8665     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8666 
   8667     void *pointerArgs[] = {
   8668         (void *) uniformIndices,
   8669         (void *) params,
   8670     };
   8671 
   8672     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8673                               threadStartTime, threadEndTime,
   8674                               &glmsg, pointerArgs);
   8675     glContext->traceGLMessage(&glmsg);
   8676 }
   8677 
   8678 GLuint GLTrace_glGetUniformBlockIndex(GLuint program, const GLchar * uniformBlockName) {
   8679     GLMessage glmsg;
   8680     GLTraceContext *glContext = getGLTraceContext();
   8681 
   8682     glmsg.set_function(GLMessage::glGetUniformBlockIndex);
   8683 
   8684     // copy argument program
   8685     GLMessage_DataType *arg_program = glmsg.add_args();
   8686     arg_program->set_isarray(false);
   8687     arg_program->set_type(GLMessage::DataType::INT);
   8688     arg_program->add_intvalue(program);
   8689 
   8690     // copy argument uniformBlockName
   8691     GLMessage_DataType *arg_uniformBlockName = glmsg.add_args();
   8692     arg_uniformBlockName->set_isarray(false);
   8693     arg_uniformBlockName->set_type(GLMessage::DataType::INT64);
   8694     arg_uniformBlockName->add_int64value((uintptr_t)uniformBlockName);
   8695 
   8696     // call function
   8697     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8698     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8699     GLuint retValue = glContext->hooks->gl.glGetUniformBlockIndex(program, uniformBlockName);
   8700     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8701     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8702 
   8703     // set return value
   8704     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   8705     rt->set_isarray(false);
   8706     rt->set_type(GLMessage::DataType::INT);
   8707     rt->add_intvalue(retValue);
   8708 
   8709     void *pointerArgs[] = {
   8710         (void *) uniformBlockName,
   8711     };
   8712 
   8713     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8714                               threadStartTime, threadEndTime,
   8715                               &glmsg, pointerArgs);
   8716     glContext->traceGLMessage(&glmsg);
   8717 
   8718     return retValue;
   8719 }
   8720 
   8721 void GLTrace_glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params) {
   8722     GLMessage glmsg;
   8723     GLTraceContext *glContext = getGLTraceContext();
   8724 
   8725     glmsg.set_function(GLMessage::glGetActiveUniformBlockiv);
   8726 
   8727     // copy argument program
   8728     GLMessage_DataType *arg_program = glmsg.add_args();
   8729     arg_program->set_isarray(false);
   8730     arg_program->set_type(GLMessage::DataType::INT);
   8731     arg_program->add_intvalue(program);
   8732 
   8733     // copy argument uniformBlockIndex
   8734     GLMessage_DataType *arg_uniformBlockIndex = glmsg.add_args();
   8735     arg_uniformBlockIndex->set_isarray(false);
   8736     arg_uniformBlockIndex->set_type(GLMessage::DataType::INT);
   8737     arg_uniformBlockIndex->add_intvalue(uniformBlockIndex);
   8738 
   8739     // copy argument pname
   8740     GLMessage_DataType *arg_pname = glmsg.add_args();
   8741     arg_pname->set_isarray(false);
   8742     arg_pname->set_type(GLMessage::DataType::ENUM);
   8743     arg_pname->add_intvalue((int)pname);
   8744 
   8745     // copy argument params
   8746     GLMessage_DataType *arg_params = glmsg.add_args();
   8747     arg_params->set_isarray(false);
   8748     arg_params->set_type(GLMessage::DataType::INT64);
   8749     arg_params->add_int64value((uintptr_t)params);
   8750 
   8751     // call function
   8752     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8753     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8754     glContext->hooks->gl.glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
   8755     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8756     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8757 
   8758     void *pointerArgs[] = {
   8759         (void *) params,
   8760     };
   8761 
   8762     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8763                               threadStartTime, threadEndTime,
   8764                               &glmsg, pointerArgs);
   8765     glContext->traceGLMessage(&glmsg);
   8766 }
   8767 
   8768 void GLTrace_glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName) {
   8769     GLMessage glmsg;
   8770     GLTraceContext *glContext = getGLTraceContext();
   8771 
   8772     glmsg.set_function(GLMessage::glGetActiveUniformBlockName);
   8773 
   8774     // copy argument program
   8775     GLMessage_DataType *arg_program = glmsg.add_args();
   8776     arg_program->set_isarray(false);
   8777     arg_program->set_type(GLMessage::DataType::INT);
   8778     arg_program->add_intvalue(program);
   8779 
   8780     // copy argument uniformBlockIndex
   8781     GLMessage_DataType *arg_uniformBlockIndex = glmsg.add_args();
   8782     arg_uniformBlockIndex->set_isarray(false);
   8783     arg_uniformBlockIndex->set_type(GLMessage::DataType::INT);
   8784     arg_uniformBlockIndex->add_intvalue(uniformBlockIndex);
   8785 
   8786     // copy argument bufSize
   8787     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   8788     arg_bufSize->set_isarray(false);
   8789     arg_bufSize->set_type(GLMessage::DataType::INT);
   8790     arg_bufSize->add_intvalue(bufSize);
   8791 
   8792     // copy argument length
   8793     GLMessage_DataType *arg_length = glmsg.add_args();
   8794     arg_length->set_isarray(false);
   8795     arg_length->set_type(GLMessage::DataType::INT64);
   8796     arg_length->add_int64value((uintptr_t)length);
   8797 
   8798     // copy argument uniformBlockName
   8799     GLMessage_DataType *arg_uniformBlockName = glmsg.add_args();
   8800     arg_uniformBlockName->set_isarray(false);
   8801     arg_uniformBlockName->set_type(GLMessage::DataType::INT64);
   8802     arg_uniformBlockName->add_int64value((uintptr_t)uniformBlockName);
   8803 
   8804     // call function
   8805     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8806     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8807     glContext->hooks->gl.glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
   8808     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8809     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8810 
   8811     void *pointerArgs[] = {
   8812         (void *) length,
   8813         (void *) uniformBlockName,
   8814     };
   8815 
   8816     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8817                               threadStartTime, threadEndTime,
   8818                               &glmsg, pointerArgs);
   8819     glContext->traceGLMessage(&glmsg);
   8820 }
   8821 
   8822 void GLTrace_glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) {
   8823     GLMessage glmsg;
   8824     GLTraceContext *glContext = getGLTraceContext();
   8825 
   8826     glmsg.set_function(GLMessage::glUniformBlockBinding);
   8827 
   8828     // copy argument program
   8829     GLMessage_DataType *arg_program = glmsg.add_args();
   8830     arg_program->set_isarray(false);
   8831     arg_program->set_type(GLMessage::DataType::INT);
   8832     arg_program->add_intvalue(program);
   8833 
   8834     // copy argument uniformBlockIndex
   8835     GLMessage_DataType *arg_uniformBlockIndex = glmsg.add_args();
   8836     arg_uniformBlockIndex->set_isarray(false);
   8837     arg_uniformBlockIndex->set_type(GLMessage::DataType::INT);
   8838     arg_uniformBlockIndex->add_intvalue(uniformBlockIndex);
   8839 
   8840     // copy argument uniformBlockBinding
   8841     GLMessage_DataType *arg_uniformBlockBinding = glmsg.add_args();
   8842     arg_uniformBlockBinding->set_isarray(false);
   8843     arg_uniformBlockBinding->set_type(GLMessage::DataType::INT);
   8844     arg_uniformBlockBinding->add_intvalue(uniformBlockBinding);
   8845 
   8846     // call function
   8847     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8848     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8849     glContext->hooks->gl.glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
   8850     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8851     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8852 
   8853     void *pointerArgs[] = {
   8854     };
   8855 
   8856     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8857                               threadStartTime, threadEndTime,
   8858                               &glmsg, pointerArgs);
   8859     glContext->traceGLMessage(&glmsg);
   8860 }
   8861 
   8862 void GLTrace_glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) {
   8863     GLMessage glmsg;
   8864     GLTraceContext *glContext = getGLTraceContext();
   8865 
   8866     glmsg.set_function(GLMessage::glDrawArraysInstanced);
   8867 
   8868     // copy argument mode
   8869     GLMessage_DataType *arg_mode = glmsg.add_args();
   8870     arg_mode->set_isarray(false);
   8871     arg_mode->set_type(GLMessage::DataType::ENUM);
   8872     arg_mode->add_intvalue((int)mode);
   8873 
   8874     // copy argument first
   8875     GLMessage_DataType *arg_first = glmsg.add_args();
   8876     arg_first->set_isarray(false);
   8877     arg_first->set_type(GLMessage::DataType::INT);
   8878     arg_first->add_intvalue(first);
   8879 
   8880     // copy argument count
   8881     GLMessage_DataType *arg_count = glmsg.add_args();
   8882     arg_count->set_isarray(false);
   8883     arg_count->set_type(GLMessage::DataType::INT);
   8884     arg_count->add_intvalue(count);
   8885 
   8886     // copy argument instancecount
   8887     GLMessage_DataType *arg_instancecount = glmsg.add_args();
   8888     arg_instancecount->set_isarray(false);
   8889     arg_instancecount->set_type(GLMessage::DataType::INT);
   8890     arg_instancecount->add_intvalue(instancecount);
   8891 
   8892     // call function
   8893     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8894     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8895     glContext->hooks->gl.glDrawArraysInstanced(mode, first, count, instancecount);
   8896     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8897     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8898 
   8899     void *pointerArgs[] = {
   8900     };
   8901 
   8902     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8903                               threadStartTime, threadEndTime,
   8904                               &glmsg, pointerArgs);
   8905     glContext->traceGLMessage(&glmsg);
   8906 }
   8907 
   8908 void GLTrace_glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount) {
   8909     GLMessage glmsg;
   8910     GLTraceContext *glContext = getGLTraceContext();
   8911 
   8912     glmsg.set_function(GLMessage::glDrawElementsInstanced);
   8913 
   8914     // copy argument mode
   8915     GLMessage_DataType *arg_mode = glmsg.add_args();
   8916     arg_mode->set_isarray(false);
   8917     arg_mode->set_type(GLMessage::DataType::ENUM);
   8918     arg_mode->add_intvalue((int)mode);
   8919 
   8920     // copy argument count
   8921     GLMessage_DataType *arg_count = glmsg.add_args();
   8922     arg_count->set_isarray(false);
   8923     arg_count->set_type(GLMessage::DataType::INT);
   8924     arg_count->add_intvalue(count);
   8925 
   8926     // copy argument type
   8927     GLMessage_DataType *arg_type = glmsg.add_args();
   8928     arg_type->set_isarray(false);
   8929     arg_type->set_type(GLMessage::DataType::ENUM);
   8930     arg_type->add_intvalue((int)type);
   8931 
   8932     // copy argument indices
   8933     GLMessage_DataType *arg_indices = glmsg.add_args();
   8934     arg_indices->set_isarray(false);
   8935     arg_indices->set_type(GLMessage::DataType::INT64);
   8936     arg_indices->add_int64value((uintptr_t)indices);
   8937 
   8938     // copy argument instancecount
   8939     GLMessage_DataType *arg_instancecount = glmsg.add_args();
   8940     arg_instancecount->set_isarray(false);
   8941     arg_instancecount->set_type(GLMessage::DataType::INT);
   8942     arg_instancecount->add_intvalue(instancecount);
   8943 
   8944     // call function
   8945     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8946     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8947     glContext->hooks->gl.glDrawElementsInstanced(mode, count, type, indices, instancecount);
   8948     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8949     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8950 
   8951     void *pointerArgs[] = {
   8952         (void *) indices,
   8953     };
   8954 
   8955     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8956                               threadStartTime, threadEndTime,
   8957                               &glmsg, pointerArgs);
   8958     glContext->traceGLMessage(&glmsg);
   8959 }
   8960 
   8961 GLsync GLTrace_glFenceSync(GLenum condition, GLbitfield flags) {
   8962     GLMessage glmsg;
   8963     GLTraceContext *glContext = getGLTraceContext();
   8964 
   8965     glmsg.set_function(GLMessage::glFenceSync);
   8966 
   8967     // copy argument condition
   8968     GLMessage_DataType *arg_condition = glmsg.add_args();
   8969     arg_condition->set_isarray(false);
   8970     arg_condition->set_type(GLMessage::DataType::ENUM);
   8971     arg_condition->add_intvalue((int)condition);
   8972 
   8973     // copy argument flags
   8974     GLMessage_DataType *arg_flags = glmsg.add_args();
   8975     arg_flags->set_isarray(false);
   8976     arg_flags->set_type(GLMessage::DataType::INT);
   8977     arg_flags->add_intvalue(flags);
   8978 
   8979     // call function
   8980     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8981     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   8982     GLsync retValue = glContext->hooks->gl.glFenceSync(condition, flags);
   8983     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   8984     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   8985 
   8986     // set return value
   8987     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   8988     rt->set_isarray(false);
   8989     rt->set_type(GLMessage::DataType::INT64);
   8990     rt->add_int64value((uintptr_t)retValue);
   8991 
   8992     void *pointerArgs[] = {
   8993         (void *) retValue,
   8994     };
   8995 
   8996     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   8997                               threadStartTime, threadEndTime,
   8998                               &glmsg, pointerArgs);
   8999     glContext->traceGLMessage(&glmsg);
   9000 
   9001     return retValue;
   9002 }
   9003 
   9004 GLboolean GLTrace_glIsSync(GLsync sync) {
   9005     GLMessage glmsg;
   9006     GLTraceContext *glContext = getGLTraceContext();
   9007 
   9008     glmsg.set_function(GLMessage::glIsSync);
   9009 
   9010     // copy argument sync
   9011     GLMessage_DataType *arg_sync = glmsg.add_args();
   9012     arg_sync->set_isarray(false);
   9013     arg_sync->set_type(GLMessage::DataType::INT64);
   9014     arg_sync->add_int64value((uintptr_t)sync);
   9015 
   9016     // call function
   9017     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9018     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9019     GLboolean retValue = glContext->hooks->gl.glIsSync(sync);
   9020     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9021     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9022 
   9023     // set return value
   9024     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   9025     rt->set_isarray(false);
   9026     rt->set_type(GLMessage::DataType::BOOL);
   9027     rt->add_boolvalue(retValue);
   9028 
   9029     void *pointerArgs[] = {
   9030         (void *) sync,
   9031     };
   9032 
   9033     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9034                               threadStartTime, threadEndTime,
   9035                               &glmsg, pointerArgs);
   9036     glContext->traceGLMessage(&glmsg);
   9037 
   9038     return retValue;
   9039 }
   9040 
   9041 void GLTrace_glDeleteSync(GLsync sync) {
   9042     GLMessage glmsg;
   9043     GLTraceContext *glContext = getGLTraceContext();
   9044 
   9045     glmsg.set_function(GLMessage::glDeleteSync);
   9046 
   9047     // copy argument sync
   9048     GLMessage_DataType *arg_sync = glmsg.add_args();
   9049     arg_sync->set_isarray(false);
   9050     arg_sync->set_type(GLMessage::DataType::INT64);
   9051     arg_sync->add_int64value((uintptr_t)sync);
   9052 
   9053     // call function
   9054     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9055     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9056     glContext->hooks->gl.glDeleteSync(sync);
   9057     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9058     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9059 
   9060     void *pointerArgs[] = {
   9061         (void *) sync,
   9062     };
   9063 
   9064     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9065                               threadStartTime, threadEndTime,
   9066                               &glmsg, pointerArgs);
   9067     glContext->traceGLMessage(&glmsg);
   9068 }
   9069 
   9070 GLenum GLTrace_glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
   9071     GLMessage glmsg;
   9072     GLTraceContext *glContext = getGLTraceContext();
   9073 
   9074     glmsg.set_function(GLMessage::glClientWaitSync);
   9075 
   9076     // copy argument sync
   9077     GLMessage_DataType *arg_sync = glmsg.add_args();
   9078     arg_sync->set_isarray(false);
   9079     arg_sync->set_type(GLMessage::DataType::INT64);
   9080     arg_sync->add_int64value((uintptr_t)sync);
   9081 
   9082     // copy argument flags
   9083     GLMessage_DataType *arg_flags = glmsg.add_args();
   9084     arg_flags->set_isarray(false);
   9085     arg_flags->set_type(GLMessage::DataType::INT);
   9086     arg_flags->add_intvalue(flags);
   9087 
   9088     // copy argument timeout
   9089     GLMessage_DataType *arg_timeout = glmsg.add_args();
   9090     arg_timeout->set_isarray(false);
   9091     arg_timeout->set_type(GLMessage::DataType::INT64);
   9092     arg_timeout->add_int64value(timeout);
   9093 
   9094     // call function
   9095     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9096     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9097     GLenum retValue = glContext->hooks->gl.glClientWaitSync(sync, flags, timeout);
   9098     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9099     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9100 
   9101     // set return value
   9102     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   9103     rt->set_isarray(false);
   9104     rt->set_type(GLMessage::DataType::ENUM);
   9105     rt->add_intvalue((int)retValue);
   9106 
   9107     void *pointerArgs[] = {
   9108         (void *) sync,
   9109     };
   9110 
   9111     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9112                               threadStartTime, threadEndTime,
   9113                               &glmsg, pointerArgs);
   9114     glContext->traceGLMessage(&glmsg);
   9115 
   9116     return retValue;
   9117 }
   9118 
   9119 void GLTrace_glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
   9120     GLMessage glmsg;
   9121     GLTraceContext *glContext = getGLTraceContext();
   9122 
   9123     glmsg.set_function(GLMessage::glWaitSync);
   9124 
   9125     // copy argument sync
   9126     GLMessage_DataType *arg_sync = glmsg.add_args();
   9127     arg_sync->set_isarray(false);
   9128     arg_sync->set_type(GLMessage::DataType::INT64);
   9129     arg_sync->add_int64value((uintptr_t)sync);
   9130 
   9131     // copy argument flags
   9132     GLMessage_DataType *arg_flags = glmsg.add_args();
   9133     arg_flags->set_isarray(false);
   9134     arg_flags->set_type(GLMessage::DataType::INT);
   9135     arg_flags->add_intvalue(flags);
   9136 
   9137     // copy argument timeout
   9138     GLMessage_DataType *arg_timeout = glmsg.add_args();
   9139     arg_timeout->set_isarray(false);
   9140     arg_timeout->set_type(GLMessage::DataType::INT64);
   9141     arg_timeout->add_int64value(timeout);
   9142 
   9143     // call function
   9144     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9145     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9146     glContext->hooks->gl.glWaitSync(sync, flags, timeout);
   9147     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9148     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9149 
   9150     void *pointerArgs[] = {
   9151         (void *) sync,
   9152     };
   9153 
   9154     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9155                               threadStartTime, threadEndTime,
   9156                               &glmsg, pointerArgs);
   9157     glContext->traceGLMessage(&glmsg);
   9158 }
   9159 
   9160 void GLTrace_glGetInteger64v(GLenum pname, GLint64 * data) {
   9161     GLMessage glmsg;
   9162     GLTraceContext *glContext = getGLTraceContext();
   9163 
   9164     glmsg.set_function(GLMessage::glGetInteger64v);
   9165 
   9166     // copy argument pname
   9167     GLMessage_DataType *arg_pname = glmsg.add_args();
   9168     arg_pname->set_isarray(false);
   9169     arg_pname->set_type(GLMessage::DataType::ENUM);
   9170     arg_pname->add_intvalue((int)pname);
   9171 
   9172     // copy argument data
   9173     GLMessage_DataType *arg_data = glmsg.add_args();
   9174     arg_data->set_isarray(false);
   9175     arg_data->set_type(GLMessage::DataType::INT64);
   9176     arg_data->add_int64value((uintptr_t)data);
   9177 
   9178     // call function
   9179     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9180     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9181     glContext->hooks->gl.glGetInteger64v(pname, data);
   9182     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9183     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9184 
   9185     void *pointerArgs[] = {
   9186         (void *) data,
   9187     };
   9188 
   9189     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9190                               threadStartTime, threadEndTime,
   9191                               &glmsg, pointerArgs);
   9192     glContext->traceGLMessage(&glmsg);
   9193 }
   9194 
   9195 void GLTrace_glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values) {
   9196     GLMessage glmsg;
   9197     GLTraceContext *glContext = getGLTraceContext();
   9198 
   9199     glmsg.set_function(GLMessage::glGetSynciv);
   9200 
   9201     // copy argument sync
   9202     GLMessage_DataType *arg_sync = glmsg.add_args();
   9203     arg_sync->set_isarray(false);
   9204     arg_sync->set_type(GLMessage::DataType::INT64);
   9205     arg_sync->add_int64value((uintptr_t)sync);
   9206 
   9207     // copy argument pname
   9208     GLMessage_DataType *arg_pname = glmsg.add_args();
   9209     arg_pname->set_isarray(false);
   9210     arg_pname->set_type(GLMessage::DataType::ENUM);
   9211     arg_pname->add_intvalue((int)pname);
   9212 
   9213     // copy argument bufSize
   9214     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   9215     arg_bufSize->set_isarray(false);
   9216     arg_bufSize->set_type(GLMessage::DataType::INT);
   9217     arg_bufSize->add_intvalue(bufSize);
   9218 
   9219     // copy argument length
   9220     GLMessage_DataType *arg_length = glmsg.add_args();
   9221     arg_length->set_isarray(false);
   9222     arg_length->set_type(GLMessage::DataType::INT64);
   9223     arg_length->add_int64value((uintptr_t)length);
   9224 
   9225     // copy argument values
   9226     GLMessage_DataType *arg_values = glmsg.add_args();
   9227     arg_values->set_isarray(false);
   9228     arg_values->set_type(GLMessage::DataType::INT64);
   9229     arg_values->add_int64value((uintptr_t)values);
   9230 
   9231     // call function
   9232     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9233     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9234     glContext->hooks->gl.glGetSynciv(sync, pname, bufSize, length, values);
   9235     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9236     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9237 
   9238     void *pointerArgs[] = {
   9239         (void *) sync,
   9240         (void *) length,
   9241         (void *) values,
   9242     };
   9243 
   9244     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9245                               threadStartTime, threadEndTime,
   9246                               &glmsg, pointerArgs);
   9247     glContext->traceGLMessage(&glmsg);
   9248 }
   9249 
   9250 void GLTrace_glGetInteger64i_v(GLenum target, GLuint index, GLint64 * data) {
   9251     GLMessage glmsg;
   9252     GLTraceContext *glContext = getGLTraceContext();
   9253 
   9254     glmsg.set_function(GLMessage::glGetInteger64i_v);
   9255 
   9256     // copy argument target
   9257     GLMessage_DataType *arg_target = glmsg.add_args();
   9258     arg_target->set_isarray(false);
   9259     arg_target->set_type(GLMessage::DataType::ENUM);
   9260     arg_target->add_intvalue((int)target);
   9261 
   9262     // copy argument index
   9263     GLMessage_DataType *arg_index = glmsg.add_args();
   9264     arg_index->set_isarray(false);
   9265     arg_index->set_type(GLMessage::DataType::INT);
   9266     arg_index->add_intvalue(index);
   9267 
   9268     // copy argument data
   9269     GLMessage_DataType *arg_data = glmsg.add_args();
   9270     arg_data->set_isarray(false);
   9271     arg_data->set_type(GLMessage::DataType::INT64);
   9272     arg_data->add_int64value((uintptr_t)data);
   9273 
   9274     // call function
   9275     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9276     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9277     glContext->hooks->gl.glGetInteger64i_v(target, index, data);
   9278     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9279     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9280 
   9281     void *pointerArgs[] = {
   9282         (void *) data,
   9283     };
   9284 
   9285     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9286                               threadStartTime, threadEndTime,
   9287                               &glmsg, pointerArgs);
   9288     glContext->traceGLMessage(&glmsg);
   9289 }
   9290 
   9291 void GLTrace_glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 * params) {
   9292     GLMessage glmsg;
   9293     GLTraceContext *glContext = getGLTraceContext();
   9294 
   9295     glmsg.set_function(GLMessage::glGetBufferParameteri64v);
   9296 
   9297     // copy argument target
   9298     GLMessage_DataType *arg_target = glmsg.add_args();
   9299     arg_target->set_isarray(false);
   9300     arg_target->set_type(GLMessage::DataType::ENUM);
   9301     arg_target->add_intvalue((int)target);
   9302 
   9303     // copy argument pname
   9304     GLMessage_DataType *arg_pname = glmsg.add_args();
   9305     arg_pname->set_isarray(false);
   9306     arg_pname->set_type(GLMessage::DataType::ENUM);
   9307     arg_pname->add_intvalue((int)pname);
   9308 
   9309     // copy argument params
   9310     GLMessage_DataType *arg_params = glmsg.add_args();
   9311     arg_params->set_isarray(false);
   9312     arg_params->set_type(GLMessage::DataType::INT64);
   9313     arg_params->add_int64value((uintptr_t)params);
   9314 
   9315     // call function
   9316     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9317     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9318     glContext->hooks->gl.glGetBufferParameteri64v(target, pname, params);
   9319     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9320     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9321 
   9322     void *pointerArgs[] = {
   9323         (void *) params,
   9324     };
   9325 
   9326     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9327                               threadStartTime, threadEndTime,
   9328                               &glmsg, pointerArgs);
   9329     glContext->traceGLMessage(&glmsg);
   9330 }
   9331 
   9332 void GLTrace_glGenSamplers(GLsizei count, GLuint * samplers) {
   9333     GLMessage glmsg;
   9334     GLTraceContext *glContext = getGLTraceContext();
   9335 
   9336     glmsg.set_function(GLMessage::glGenSamplers);
   9337 
   9338     // copy argument count
   9339     GLMessage_DataType *arg_count = glmsg.add_args();
   9340     arg_count->set_isarray(false);
   9341     arg_count->set_type(GLMessage::DataType::INT);
   9342     arg_count->add_intvalue(count);
   9343 
   9344     // copy argument samplers
   9345     GLMessage_DataType *arg_samplers = glmsg.add_args();
   9346     arg_samplers->set_isarray(false);
   9347     arg_samplers->set_type(GLMessage::DataType::INT64);
   9348     arg_samplers->add_int64value((uintptr_t)samplers);
   9349 
   9350     // call function
   9351     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9352     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9353     glContext->hooks->gl.glGenSamplers(count, samplers);
   9354     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9355     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9356 
   9357     void *pointerArgs[] = {
   9358         (void *) samplers,
   9359     };
   9360 
   9361     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9362                               threadStartTime, threadEndTime,
   9363                               &glmsg, pointerArgs);
   9364     glContext->traceGLMessage(&glmsg);
   9365 }
   9366 
   9367 void GLTrace_glDeleteSamplers(GLsizei count, const GLuint * samplers) {
   9368     GLMessage glmsg;
   9369     GLTraceContext *glContext = getGLTraceContext();
   9370 
   9371     glmsg.set_function(GLMessage::glDeleteSamplers);
   9372 
   9373     // copy argument count
   9374     GLMessage_DataType *arg_count = glmsg.add_args();
   9375     arg_count->set_isarray(false);
   9376     arg_count->set_type(GLMessage::DataType::INT);
   9377     arg_count->add_intvalue(count);
   9378 
   9379     // copy argument samplers
   9380     GLMessage_DataType *arg_samplers = glmsg.add_args();
   9381     arg_samplers->set_isarray(false);
   9382     arg_samplers->set_type(GLMessage::DataType::INT64);
   9383     arg_samplers->add_int64value((uintptr_t)samplers);
   9384 
   9385     // call function
   9386     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9387     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9388     glContext->hooks->gl.glDeleteSamplers(count, samplers);
   9389     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9390     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9391 
   9392     void *pointerArgs[] = {
   9393         (void *) samplers,
   9394     };
   9395 
   9396     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9397                               threadStartTime, threadEndTime,
   9398                               &glmsg, pointerArgs);
   9399     glContext->traceGLMessage(&glmsg);
   9400 }
   9401 
   9402 GLboolean GLTrace_glIsSampler(GLuint sampler) {
   9403     GLMessage glmsg;
   9404     GLTraceContext *glContext = getGLTraceContext();
   9405 
   9406     glmsg.set_function(GLMessage::glIsSampler);
   9407 
   9408     // copy argument sampler
   9409     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9410     arg_sampler->set_isarray(false);
   9411     arg_sampler->set_type(GLMessage::DataType::INT);
   9412     arg_sampler->add_intvalue(sampler);
   9413 
   9414     // call function
   9415     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9416     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9417     GLboolean retValue = glContext->hooks->gl.glIsSampler(sampler);
   9418     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9419     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9420 
   9421     // set return value
   9422     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   9423     rt->set_isarray(false);
   9424     rt->set_type(GLMessage::DataType::BOOL);
   9425     rt->add_boolvalue(retValue);
   9426 
   9427     void *pointerArgs[] = {
   9428     };
   9429 
   9430     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9431                               threadStartTime, threadEndTime,
   9432                               &glmsg, pointerArgs);
   9433     glContext->traceGLMessage(&glmsg);
   9434 
   9435     return retValue;
   9436 }
   9437 
   9438 void GLTrace_glBindSampler(GLuint unit, GLuint sampler) {
   9439     GLMessage glmsg;
   9440     GLTraceContext *glContext = getGLTraceContext();
   9441 
   9442     glmsg.set_function(GLMessage::glBindSampler);
   9443 
   9444     // copy argument unit
   9445     GLMessage_DataType *arg_unit = glmsg.add_args();
   9446     arg_unit->set_isarray(false);
   9447     arg_unit->set_type(GLMessage::DataType::INT);
   9448     arg_unit->add_intvalue(unit);
   9449 
   9450     // copy argument sampler
   9451     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9452     arg_sampler->set_isarray(false);
   9453     arg_sampler->set_type(GLMessage::DataType::INT);
   9454     arg_sampler->add_intvalue(sampler);
   9455 
   9456     // call function
   9457     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9458     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9459     glContext->hooks->gl.glBindSampler(unit, sampler);
   9460     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9461     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9462 
   9463     void *pointerArgs[] = {
   9464     };
   9465 
   9466     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9467                               threadStartTime, threadEndTime,
   9468                               &glmsg, pointerArgs);
   9469     glContext->traceGLMessage(&glmsg);
   9470 }
   9471 
   9472 void GLTrace_glSamplerParameteri(GLuint sampler, GLenum pname, GLint param) {
   9473     GLMessage glmsg;
   9474     GLTraceContext *glContext = getGLTraceContext();
   9475 
   9476     glmsg.set_function(GLMessage::glSamplerParameteri);
   9477 
   9478     // copy argument sampler
   9479     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9480     arg_sampler->set_isarray(false);
   9481     arg_sampler->set_type(GLMessage::DataType::INT);
   9482     arg_sampler->add_intvalue(sampler);
   9483 
   9484     // copy argument pname
   9485     GLMessage_DataType *arg_pname = glmsg.add_args();
   9486     arg_pname->set_isarray(false);
   9487     arg_pname->set_type(GLMessage::DataType::ENUM);
   9488     arg_pname->add_intvalue((int)pname);
   9489 
   9490     // copy argument param
   9491     GLMessage_DataType *arg_param = glmsg.add_args();
   9492     arg_param->set_isarray(false);
   9493     arg_param->set_type(GLMessage::DataType::INT);
   9494     arg_param->add_intvalue(param);
   9495 
   9496     // call function
   9497     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9498     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9499     glContext->hooks->gl.glSamplerParameteri(sampler, pname, param);
   9500     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9501     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9502 
   9503     void *pointerArgs[] = {
   9504     };
   9505 
   9506     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9507                               threadStartTime, threadEndTime,
   9508                               &glmsg, pointerArgs);
   9509     glContext->traceGLMessage(&glmsg);
   9510 }
   9511 
   9512 void GLTrace_glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint * param) {
   9513     GLMessage glmsg;
   9514     GLTraceContext *glContext = getGLTraceContext();
   9515 
   9516     glmsg.set_function(GLMessage::glSamplerParameteriv);
   9517 
   9518     // copy argument sampler
   9519     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9520     arg_sampler->set_isarray(false);
   9521     arg_sampler->set_type(GLMessage::DataType::INT);
   9522     arg_sampler->add_intvalue(sampler);
   9523 
   9524     // copy argument pname
   9525     GLMessage_DataType *arg_pname = glmsg.add_args();
   9526     arg_pname->set_isarray(false);
   9527     arg_pname->set_type(GLMessage::DataType::ENUM);
   9528     arg_pname->add_intvalue((int)pname);
   9529 
   9530     // copy argument param
   9531     GLMessage_DataType *arg_param = glmsg.add_args();
   9532     arg_param->set_isarray(false);
   9533     arg_param->set_type(GLMessage::DataType::INT64);
   9534     arg_param->add_int64value((uintptr_t)param);
   9535 
   9536     // call function
   9537     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9538     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9539     glContext->hooks->gl.glSamplerParameteriv(sampler, pname, param);
   9540     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9541     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9542 
   9543     void *pointerArgs[] = {
   9544         (void *) param,
   9545     };
   9546 
   9547     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9548                               threadStartTime, threadEndTime,
   9549                               &glmsg, pointerArgs);
   9550     glContext->traceGLMessage(&glmsg);
   9551 }
   9552 
   9553 void GLTrace_glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) {
   9554     GLMessage glmsg;
   9555     GLTraceContext *glContext = getGLTraceContext();
   9556 
   9557     glmsg.set_function(GLMessage::glSamplerParameterf);
   9558 
   9559     // copy argument sampler
   9560     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9561     arg_sampler->set_isarray(false);
   9562     arg_sampler->set_type(GLMessage::DataType::INT);
   9563     arg_sampler->add_intvalue(sampler);
   9564 
   9565     // copy argument pname
   9566     GLMessage_DataType *arg_pname = glmsg.add_args();
   9567     arg_pname->set_isarray(false);
   9568     arg_pname->set_type(GLMessage::DataType::ENUM);
   9569     arg_pname->add_intvalue((int)pname);
   9570 
   9571     // copy argument param
   9572     GLMessage_DataType *arg_param = glmsg.add_args();
   9573     arg_param->set_isarray(false);
   9574     arg_param->set_type(GLMessage::DataType::FLOAT);
   9575     arg_param->add_floatvalue(param);
   9576 
   9577     // call function
   9578     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9579     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9580     glContext->hooks->gl.glSamplerParameterf(sampler, pname, param);
   9581     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9582     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9583 
   9584     void *pointerArgs[] = {
   9585     };
   9586 
   9587     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9588                               threadStartTime, threadEndTime,
   9589                               &glmsg, pointerArgs);
   9590     glContext->traceGLMessage(&glmsg);
   9591 }
   9592 
   9593 void GLTrace_glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat * param) {
   9594     GLMessage glmsg;
   9595     GLTraceContext *glContext = getGLTraceContext();
   9596 
   9597     glmsg.set_function(GLMessage::glSamplerParameterfv);
   9598 
   9599     // copy argument sampler
   9600     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9601     arg_sampler->set_isarray(false);
   9602     arg_sampler->set_type(GLMessage::DataType::INT);
   9603     arg_sampler->add_intvalue(sampler);
   9604 
   9605     // copy argument pname
   9606     GLMessage_DataType *arg_pname = glmsg.add_args();
   9607     arg_pname->set_isarray(false);
   9608     arg_pname->set_type(GLMessage::DataType::ENUM);
   9609     arg_pname->add_intvalue((int)pname);
   9610 
   9611     // copy argument param
   9612     GLMessage_DataType *arg_param = glmsg.add_args();
   9613     arg_param->set_isarray(false);
   9614     arg_param->set_type(GLMessage::DataType::INT64);
   9615     arg_param->add_int64value((uintptr_t)param);
   9616 
   9617     // call function
   9618     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9619     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9620     glContext->hooks->gl.glSamplerParameterfv(sampler, pname, param);
   9621     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9622     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9623 
   9624     void *pointerArgs[] = {
   9625         (void *) param,
   9626     };
   9627 
   9628     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9629                               threadStartTime, threadEndTime,
   9630                               &glmsg, pointerArgs);
   9631     glContext->traceGLMessage(&glmsg);
   9632 }
   9633 
   9634 void GLTrace_glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint * params) {
   9635     GLMessage glmsg;
   9636     GLTraceContext *glContext = getGLTraceContext();
   9637 
   9638     glmsg.set_function(GLMessage::glGetSamplerParameteriv);
   9639 
   9640     // copy argument sampler
   9641     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9642     arg_sampler->set_isarray(false);
   9643     arg_sampler->set_type(GLMessage::DataType::INT);
   9644     arg_sampler->add_intvalue(sampler);
   9645 
   9646     // copy argument pname
   9647     GLMessage_DataType *arg_pname = glmsg.add_args();
   9648     arg_pname->set_isarray(false);
   9649     arg_pname->set_type(GLMessage::DataType::ENUM);
   9650     arg_pname->add_intvalue((int)pname);
   9651 
   9652     // copy argument params
   9653     GLMessage_DataType *arg_params = glmsg.add_args();
   9654     arg_params->set_isarray(false);
   9655     arg_params->set_type(GLMessage::DataType::INT64);
   9656     arg_params->add_int64value((uintptr_t)params);
   9657 
   9658     // call function
   9659     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9660     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9661     glContext->hooks->gl.glGetSamplerParameteriv(sampler, pname, params);
   9662     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9663     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9664 
   9665     void *pointerArgs[] = {
   9666         (void *) params,
   9667     };
   9668 
   9669     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9670                               threadStartTime, threadEndTime,
   9671                               &glmsg, pointerArgs);
   9672     glContext->traceGLMessage(&glmsg);
   9673 }
   9674 
   9675 void GLTrace_glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat * params) {
   9676     GLMessage glmsg;
   9677     GLTraceContext *glContext = getGLTraceContext();
   9678 
   9679     glmsg.set_function(GLMessage::glGetSamplerParameterfv);
   9680 
   9681     // copy argument sampler
   9682     GLMessage_DataType *arg_sampler = glmsg.add_args();
   9683     arg_sampler->set_isarray(false);
   9684     arg_sampler->set_type(GLMessage::DataType::INT);
   9685     arg_sampler->add_intvalue(sampler);
   9686 
   9687     // copy argument pname
   9688     GLMessage_DataType *arg_pname = glmsg.add_args();
   9689     arg_pname->set_isarray(false);
   9690     arg_pname->set_type(GLMessage::DataType::ENUM);
   9691     arg_pname->add_intvalue((int)pname);
   9692 
   9693     // copy argument params
   9694     GLMessage_DataType *arg_params = glmsg.add_args();
   9695     arg_params->set_isarray(false);
   9696     arg_params->set_type(GLMessage::DataType::INT64);
   9697     arg_params->add_int64value((uintptr_t)params);
   9698 
   9699     // call function
   9700     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9701     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9702     glContext->hooks->gl.glGetSamplerParameterfv(sampler, pname, params);
   9703     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9704     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9705 
   9706     void *pointerArgs[] = {
   9707         (void *) params,
   9708     };
   9709 
   9710     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9711                               threadStartTime, threadEndTime,
   9712                               &glmsg, pointerArgs);
   9713     glContext->traceGLMessage(&glmsg);
   9714 }
   9715 
   9716 void GLTrace_glVertexAttribDivisor(GLuint index, GLuint divisor) {
   9717     GLMessage glmsg;
   9718     GLTraceContext *glContext = getGLTraceContext();
   9719 
   9720     glmsg.set_function(GLMessage::glVertexAttribDivisor);
   9721 
   9722     // copy argument index
   9723     GLMessage_DataType *arg_index = glmsg.add_args();
   9724     arg_index->set_isarray(false);
   9725     arg_index->set_type(GLMessage::DataType::INT);
   9726     arg_index->add_intvalue(index);
   9727 
   9728     // copy argument divisor
   9729     GLMessage_DataType *arg_divisor = glmsg.add_args();
   9730     arg_divisor->set_isarray(false);
   9731     arg_divisor->set_type(GLMessage::DataType::INT);
   9732     arg_divisor->add_intvalue(divisor);
   9733 
   9734     // call function
   9735     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9736     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9737     glContext->hooks->gl.glVertexAttribDivisor(index, divisor);
   9738     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9739     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9740 
   9741     void *pointerArgs[] = {
   9742     };
   9743 
   9744     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9745                               threadStartTime, threadEndTime,
   9746                               &glmsg, pointerArgs);
   9747     glContext->traceGLMessage(&glmsg);
   9748 }
   9749 
   9750 void GLTrace_glBindTransformFeedback(GLenum target, GLuint id) {
   9751     GLMessage glmsg;
   9752     GLTraceContext *glContext = getGLTraceContext();
   9753 
   9754     glmsg.set_function(GLMessage::glBindTransformFeedback);
   9755 
   9756     // copy argument target
   9757     GLMessage_DataType *arg_target = glmsg.add_args();
   9758     arg_target->set_isarray(false);
   9759     arg_target->set_type(GLMessage::DataType::ENUM);
   9760     arg_target->add_intvalue((int)target);
   9761 
   9762     // copy argument id
   9763     GLMessage_DataType *arg_id = glmsg.add_args();
   9764     arg_id->set_isarray(false);
   9765     arg_id->set_type(GLMessage::DataType::INT);
   9766     arg_id->add_intvalue(id);
   9767 
   9768     // call function
   9769     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9770     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9771     glContext->hooks->gl.glBindTransformFeedback(target, id);
   9772     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9773     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9774 
   9775     void *pointerArgs[] = {
   9776     };
   9777 
   9778     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9779                               threadStartTime, threadEndTime,
   9780                               &glmsg, pointerArgs);
   9781     glContext->traceGLMessage(&glmsg);
   9782 }
   9783 
   9784 void GLTrace_glDeleteTransformFeedbacks(GLsizei n, const GLuint * ids) {
   9785     GLMessage glmsg;
   9786     GLTraceContext *glContext = getGLTraceContext();
   9787 
   9788     glmsg.set_function(GLMessage::glDeleteTransformFeedbacks);
   9789 
   9790     // copy argument n
   9791     GLMessage_DataType *arg_n = glmsg.add_args();
   9792     arg_n->set_isarray(false);
   9793     arg_n->set_type(GLMessage::DataType::INT);
   9794     arg_n->add_intvalue(n);
   9795 
   9796     // copy argument ids
   9797     GLMessage_DataType *arg_ids = glmsg.add_args();
   9798     arg_ids->set_isarray(false);
   9799     arg_ids->set_type(GLMessage::DataType::INT64);
   9800     arg_ids->add_int64value((uintptr_t)ids);
   9801 
   9802     // call function
   9803     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9804     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9805     glContext->hooks->gl.glDeleteTransformFeedbacks(n, ids);
   9806     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9807     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9808 
   9809     void *pointerArgs[] = {
   9810         (void *) ids,
   9811     };
   9812 
   9813     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9814                               threadStartTime, threadEndTime,
   9815                               &glmsg, pointerArgs);
   9816     glContext->traceGLMessage(&glmsg);
   9817 }
   9818 
   9819 void GLTrace_glGenTransformFeedbacks(GLsizei n, GLuint * ids) {
   9820     GLMessage glmsg;
   9821     GLTraceContext *glContext = getGLTraceContext();
   9822 
   9823     glmsg.set_function(GLMessage::glGenTransformFeedbacks);
   9824 
   9825     // copy argument n
   9826     GLMessage_DataType *arg_n = glmsg.add_args();
   9827     arg_n->set_isarray(false);
   9828     arg_n->set_type(GLMessage::DataType::INT);
   9829     arg_n->add_intvalue(n);
   9830 
   9831     // copy argument ids
   9832     GLMessage_DataType *arg_ids = glmsg.add_args();
   9833     arg_ids->set_isarray(false);
   9834     arg_ids->set_type(GLMessage::DataType::INT64);
   9835     arg_ids->add_int64value((uintptr_t)ids);
   9836 
   9837     // call function
   9838     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9839     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9840     glContext->hooks->gl.glGenTransformFeedbacks(n, ids);
   9841     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9842     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9843 
   9844     void *pointerArgs[] = {
   9845         (void *) ids,
   9846     };
   9847 
   9848     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9849                               threadStartTime, threadEndTime,
   9850                               &glmsg, pointerArgs);
   9851     glContext->traceGLMessage(&glmsg);
   9852 }
   9853 
   9854 GLboolean GLTrace_glIsTransformFeedback(GLuint id) {
   9855     GLMessage glmsg;
   9856     GLTraceContext *glContext = getGLTraceContext();
   9857 
   9858     glmsg.set_function(GLMessage::glIsTransformFeedback);
   9859 
   9860     // copy argument id
   9861     GLMessage_DataType *arg_id = glmsg.add_args();
   9862     arg_id->set_isarray(false);
   9863     arg_id->set_type(GLMessage::DataType::INT);
   9864     arg_id->add_intvalue(id);
   9865 
   9866     // call function
   9867     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9868     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9869     GLboolean retValue = glContext->hooks->gl.glIsTransformFeedback(id);
   9870     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9871     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9872 
   9873     // set return value
   9874     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   9875     rt->set_isarray(false);
   9876     rt->set_type(GLMessage::DataType::BOOL);
   9877     rt->add_boolvalue(retValue);
   9878 
   9879     void *pointerArgs[] = {
   9880     };
   9881 
   9882     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9883                               threadStartTime, threadEndTime,
   9884                               &glmsg, pointerArgs);
   9885     glContext->traceGLMessage(&glmsg);
   9886 
   9887     return retValue;
   9888 }
   9889 
   9890 void GLTrace_glPauseTransformFeedback(void) {
   9891     GLMessage glmsg;
   9892     GLTraceContext *glContext = getGLTraceContext();
   9893 
   9894     glmsg.set_function(GLMessage::glPauseTransformFeedback);
   9895 
   9896     // call function
   9897     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9898     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9899     glContext->hooks->gl.glPauseTransformFeedback();
   9900     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9901     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9902 
   9903     void *pointerArgs[] = {
   9904     };
   9905 
   9906     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9907                               threadStartTime, threadEndTime,
   9908                               &glmsg, pointerArgs);
   9909     glContext->traceGLMessage(&glmsg);
   9910 }
   9911 
   9912 void GLTrace_glResumeTransformFeedback(void) {
   9913     GLMessage glmsg;
   9914     GLTraceContext *glContext = getGLTraceContext();
   9915 
   9916     glmsg.set_function(GLMessage::glResumeTransformFeedback);
   9917 
   9918     // call function
   9919     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9920     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9921     glContext->hooks->gl.glResumeTransformFeedback();
   9922     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9923     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9924 
   9925     void *pointerArgs[] = {
   9926     };
   9927 
   9928     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9929                               threadStartTime, threadEndTime,
   9930                               &glmsg, pointerArgs);
   9931     glContext->traceGLMessage(&glmsg);
   9932 }
   9933 
   9934 void GLTrace_glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary) {
   9935     GLMessage glmsg;
   9936     GLTraceContext *glContext = getGLTraceContext();
   9937 
   9938     glmsg.set_function(GLMessage::glGetProgramBinary);
   9939 
   9940     // copy argument program
   9941     GLMessage_DataType *arg_program = glmsg.add_args();
   9942     arg_program->set_isarray(false);
   9943     arg_program->set_type(GLMessage::DataType::INT);
   9944     arg_program->add_intvalue(program);
   9945 
   9946     // copy argument bufSize
   9947     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   9948     arg_bufSize->set_isarray(false);
   9949     arg_bufSize->set_type(GLMessage::DataType::INT);
   9950     arg_bufSize->add_intvalue(bufSize);
   9951 
   9952     // copy argument length
   9953     GLMessage_DataType *arg_length = glmsg.add_args();
   9954     arg_length->set_isarray(false);
   9955     arg_length->set_type(GLMessage::DataType::INT64);
   9956     arg_length->add_int64value((uintptr_t)length);
   9957 
   9958     // copy argument binaryFormat
   9959     GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
   9960     arg_binaryFormat->set_isarray(false);
   9961     arg_binaryFormat->set_type(GLMessage::DataType::INT64);
   9962     arg_binaryFormat->add_int64value((uintptr_t)binaryFormat);
   9963 
   9964     // copy argument binary
   9965     GLMessage_DataType *arg_binary = glmsg.add_args();
   9966     arg_binary->set_isarray(false);
   9967     arg_binary->set_type(GLMessage::DataType::INT64);
   9968     arg_binary->add_int64value((uintptr_t)binary);
   9969 
   9970     // call function
   9971     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9972     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   9973     glContext->hooks->gl.glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
   9974     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   9975     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   9976 
   9977     void *pointerArgs[] = {
   9978         (void *) length,
   9979         (void *) binaryFormat,
   9980         (void *) binary,
   9981     };
   9982 
   9983     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   9984                               threadStartTime, threadEndTime,
   9985                               &glmsg, pointerArgs);
   9986     glContext->traceGLMessage(&glmsg);
   9987 }
   9988 
   9989 void GLTrace_glProgramBinary(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length) {
   9990     GLMessage glmsg;
   9991     GLTraceContext *glContext = getGLTraceContext();
   9992 
   9993     glmsg.set_function(GLMessage::glProgramBinary);
   9994 
   9995     // copy argument program
   9996     GLMessage_DataType *arg_program = glmsg.add_args();
   9997     arg_program->set_isarray(false);
   9998     arg_program->set_type(GLMessage::DataType::INT);
   9999     arg_program->add_intvalue(program);
   10000 
   10001     // copy argument binaryFormat
   10002     GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
   10003     arg_binaryFormat->set_isarray(false);
   10004     arg_binaryFormat->set_type(GLMessage::DataType::ENUM);
   10005     arg_binaryFormat->add_intvalue((int)binaryFormat);
   10006 
   10007     // copy argument binary
   10008     GLMessage_DataType *arg_binary = glmsg.add_args();
   10009     arg_binary->set_isarray(false);
   10010     arg_binary->set_type(GLMessage::DataType::INT64);
   10011     arg_binary->add_int64value((uintptr_t)binary);
   10012 
   10013     // copy argument length
   10014     GLMessage_DataType *arg_length = glmsg.add_args();
   10015     arg_length->set_isarray(false);
   10016     arg_length->set_type(GLMessage::DataType::INT);
   10017     arg_length->add_intvalue(length);
   10018 
   10019     // call function
   10020     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10021     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10022     glContext->hooks->gl.glProgramBinary(program, binaryFormat, binary, length);
   10023     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10024     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10025 
   10026     void *pointerArgs[] = {
   10027         (void *) binary,
   10028     };
   10029 
   10030     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10031                               threadStartTime, threadEndTime,
   10032                               &glmsg, pointerArgs);
   10033     glContext->traceGLMessage(&glmsg);
   10034 }
   10035 
   10036 void GLTrace_glProgramParameteri(GLuint program, GLenum pname, GLint value) {
   10037     GLMessage glmsg;
   10038     GLTraceContext *glContext = getGLTraceContext();
   10039 
   10040     glmsg.set_function(GLMessage::glProgramParameteri);
   10041 
   10042     // copy argument program
   10043     GLMessage_DataType *arg_program = glmsg.add_args();
   10044     arg_program->set_isarray(false);
   10045     arg_program->set_type(GLMessage::DataType::INT);
   10046     arg_program->add_intvalue(program);
   10047 
   10048     // copy argument pname
   10049     GLMessage_DataType *arg_pname = glmsg.add_args();
   10050     arg_pname->set_isarray(false);
   10051     arg_pname->set_type(GLMessage::DataType::ENUM);
   10052     arg_pname->add_intvalue((int)pname);
   10053 
   10054     // copy argument value
   10055     GLMessage_DataType *arg_value = glmsg.add_args();
   10056     arg_value->set_isarray(false);
   10057     arg_value->set_type(GLMessage::DataType::INT);
   10058     arg_value->add_intvalue(value);
   10059 
   10060     // call function
   10061     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10062     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10063     glContext->hooks->gl.glProgramParameteri(program, pname, value);
   10064     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10065     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10066 
   10067     void *pointerArgs[] = {
   10068     };
   10069 
   10070     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10071                               threadStartTime, threadEndTime,
   10072                               &glmsg, pointerArgs);
   10073     glContext->traceGLMessage(&glmsg);
   10074 }
   10075 
   10076 void GLTrace_glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments) {
   10077     GLMessage glmsg;
   10078     GLTraceContext *glContext = getGLTraceContext();
   10079 
   10080     glmsg.set_function(GLMessage::glInvalidateFramebuffer);
   10081 
   10082     // copy argument target
   10083     GLMessage_DataType *arg_target = glmsg.add_args();
   10084     arg_target->set_isarray(false);
   10085     arg_target->set_type(GLMessage::DataType::ENUM);
   10086     arg_target->add_intvalue((int)target);
   10087 
   10088     // copy argument numAttachments
   10089     GLMessage_DataType *arg_numAttachments = glmsg.add_args();
   10090     arg_numAttachments->set_isarray(false);
   10091     arg_numAttachments->set_type(GLMessage::DataType::INT);
   10092     arg_numAttachments->add_intvalue(numAttachments);
   10093 
   10094     // copy argument attachments
   10095     GLMessage_DataType *arg_attachments = glmsg.add_args();
   10096     arg_attachments->set_isarray(false);
   10097     arg_attachments->set_type(GLMessage::DataType::INT64);
   10098     arg_attachments->add_int64value((uintptr_t)attachments);
   10099 
   10100     // call function
   10101     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10102     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10103     glContext->hooks->gl.glInvalidateFramebuffer(target, numAttachments, attachments);
   10104     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10105     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10106 
   10107     void *pointerArgs[] = {
   10108         (void *) attachments,
   10109     };
   10110 
   10111     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10112                               threadStartTime, threadEndTime,
   10113                               &glmsg, pointerArgs);
   10114     glContext->traceGLMessage(&glmsg);
   10115 }
   10116 
   10117 void GLTrace_glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height) {
   10118     GLMessage glmsg;
   10119     GLTraceContext *glContext = getGLTraceContext();
   10120 
   10121     glmsg.set_function(GLMessage::glInvalidateSubFramebuffer);
   10122 
   10123     // copy argument target
   10124     GLMessage_DataType *arg_target = glmsg.add_args();
   10125     arg_target->set_isarray(false);
   10126     arg_target->set_type(GLMessage::DataType::ENUM);
   10127     arg_target->add_intvalue((int)target);
   10128 
   10129     // copy argument numAttachments
   10130     GLMessage_DataType *arg_numAttachments = glmsg.add_args();
   10131     arg_numAttachments->set_isarray(false);
   10132     arg_numAttachments->set_type(GLMessage::DataType::INT);
   10133     arg_numAttachments->add_intvalue(numAttachments);
   10134 
   10135     // copy argument attachments
   10136     GLMessage_DataType *arg_attachments = glmsg.add_args();
   10137     arg_attachments->set_isarray(false);
   10138     arg_attachments->set_type(GLMessage::DataType::INT64);
   10139     arg_attachments->add_int64value((uintptr_t)attachments);
   10140 
   10141     // copy argument x
   10142     GLMessage_DataType *arg_x = glmsg.add_args();
   10143     arg_x->set_isarray(false);
   10144     arg_x->set_type(GLMessage::DataType::INT);
   10145     arg_x->add_intvalue(x);
   10146 
   10147     // copy argument y
   10148     GLMessage_DataType *arg_y = glmsg.add_args();
   10149     arg_y->set_isarray(false);
   10150     arg_y->set_type(GLMessage::DataType::INT);
   10151     arg_y->add_intvalue(y);
   10152 
   10153     // copy argument width
   10154     GLMessage_DataType *arg_width = glmsg.add_args();
   10155     arg_width->set_isarray(false);
   10156     arg_width->set_type(GLMessage::DataType::INT);
   10157     arg_width->add_intvalue(width);
   10158 
   10159     // copy argument height
   10160     GLMessage_DataType *arg_height = glmsg.add_args();
   10161     arg_height->set_isarray(false);
   10162     arg_height->set_type(GLMessage::DataType::INT);
   10163     arg_height->add_intvalue(height);
   10164 
   10165     // call function
   10166     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10167     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10168     glContext->hooks->gl.glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
   10169     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10170     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10171 
   10172     void *pointerArgs[] = {
   10173         (void *) attachments,
   10174     };
   10175 
   10176     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10177                               threadStartTime, threadEndTime,
   10178                               &glmsg, pointerArgs);
   10179     glContext->traceGLMessage(&glmsg);
   10180 }
   10181 
   10182 void GLTrace_glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
   10183     GLMessage glmsg;
   10184     GLTraceContext *glContext = getGLTraceContext();
   10185 
   10186     glmsg.set_function(GLMessage::glTexStorage2D);
   10187 
   10188     // copy argument target
   10189     GLMessage_DataType *arg_target = glmsg.add_args();
   10190     arg_target->set_isarray(false);
   10191     arg_target->set_type(GLMessage::DataType::ENUM);
   10192     arg_target->add_intvalue((int)target);
   10193 
   10194     // copy argument levels
   10195     GLMessage_DataType *arg_levels = glmsg.add_args();
   10196     arg_levels->set_isarray(false);
   10197     arg_levels->set_type(GLMessage::DataType::INT);
   10198     arg_levels->add_intvalue(levels);
   10199 
   10200     // copy argument internalformat
   10201     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   10202     arg_internalformat->set_isarray(false);
   10203     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   10204     arg_internalformat->add_intvalue((int)internalformat);
   10205 
   10206     // copy argument width
   10207     GLMessage_DataType *arg_width = glmsg.add_args();
   10208     arg_width->set_isarray(false);
   10209     arg_width->set_type(GLMessage::DataType::INT);
   10210     arg_width->add_intvalue(width);
   10211 
   10212     // copy argument height
   10213     GLMessage_DataType *arg_height = glmsg.add_args();
   10214     arg_height->set_isarray(false);
   10215     arg_height->set_type(GLMessage::DataType::INT);
   10216     arg_height->add_intvalue(height);
   10217 
   10218     // call function
   10219     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10220     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10221     glContext->hooks->gl.glTexStorage2D(target, levels, internalformat, width, height);
   10222     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10223     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10224 
   10225     void *pointerArgs[] = {
   10226     };
   10227 
   10228     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10229                               threadStartTime, threadEndTime,
   10230                               &glmsg, pointerArgs);
   10231     glContext->traceGLMessage(&glmsg);
   10232 }
   10233 
   10234 void GLTrace_glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
   10235     GLMessage glmsg;
   10236     GLTraceContext *glContext = getGLTraceContext();
   10237 
   10238     glmsg.set_function(GLMessage::glTexStorage3D);
   10239 
   10240     // copy argument target
   10241     GLMessage_DataType *arg_target = glmsg.add_args();
   10242     arg_target->set_isarray(false);
   10243     arg_target->set_type(GLMessage::DataType::ENUM);
   10244     arg_target->add_intvalue((int)target);
   10245 
   10246     // copy argument levels
   10247     GLMessage_DataType *arg_levels = glmsg.add_args();
   10248     arg_levels->set_isarray(false);
   10249     arg_levels->set_type(GLMessage::DataType::INT);
   10250     arg_levels->add_intvalue(levels);
   10251 
   10252     // copy argument internalformat
   10253     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   10254     arg_internalformat->set_isarray(false);
   10255     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   10256     arg_internalformat->add_intvalue((int)internalformat);
   10257 
   10258     // copy argument width
   10259     GLMessage_DataType *arg_width = glmsg.add_args();
   10260     arg_width->set_isarray(false);
   10261     arg_width->set_type(GLMessage::DataType::INT);
   10262     arg_width->add_intvalue(width);
   10263 
   10264     // copy argument height
   10265     GLMessage_DataType *arg_height = glmsg.add_args();
   10266     arg_height->set_isarray(false);
   10267     arg_height->set_type(GLMessage::DataType::INT);
   10268     arg_height->add_intvalue(height);
   10269 
   10270     // copy argument depth
   10271     GLMessage_DataType *arg_depth = glmsg.add_args();
   10272     arg_depth->set_isarray(false);
   10273     arg_depth->set_type(GLMessage::DataType::INT);
   10274     arg_depth->add_intvalue(depth);
   10275 
   10276     // call function
   10277     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10278     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10279     glContext->hooks->gl.glTexStorage3D(target, levels, internalformat, width, height, depth);
   10280     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10281     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10282 
   10283     void *pointerArgs[] = {
   10284     };
   10285 
   10286     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10287                               threadStartTime, threadEndTime,
   10288                               &glmsg, pointerArgs);
   10289     glContext->traceGLMessage(&glmsg);
   10290 }
   10291 
   10292 void GLTrace_glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params) {
   10293     GLMessage glmsg;
   10294     GLTraceContext *glContext = getGLTraceContext();
   10295 
   10296     glmsg.set_function(GLMessage::glGetInternalformativ);
   10297 
   10298     // copy argument target
   10299     GLMessage_DataType *arg_target = glmsg.add_args();
   10300     arg_target->set_isarray(false);
   10301     arg_target->set_type(GLMessage::DataType::ENUM);
   10302     arg_target->add_intvalue((int)target);
   10303 
   10304     // copy argument internalformat
   10305     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   10306     arg_internalformat->set_isarray(false);
   10307     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   10308     arg_internalformat->add_intvalue((int)internalformat);
   10309 
   10310     // copy argument pname
   10311     GLMessage_DataType *arg_pname = glmsg.add_args();
   10312     arg_pname->set_isarray(false);
   10313     arg_pname->set_type(GLMessage::DataType::ENUM);
   10314     arg_pname->add_intvalue((int)pname);
   10315 
   10316     // copy argument bufSize
   10317     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   10318     arg_bufSize->set_isarray(false);
   10319     arg_bufSize->set_type(GLMessage::DataType::INT);
   10320     arg_bufSize->add_intvalue(bufSize);
   10321 
   10322     // copy argument params
   10323     GLMessage_DataType *arg_params = glmsg.add_args();
   10324     arg_params->set_isarray(false);
   10325     arg_params->set_type(GLMessage::DataType::INT64);
   10326     arg_params->add_int64value((uintptr_t)params);
   10327 
   10328     // call function
   10329     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10330     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10331     glContext->hooks->gl.glGetInternalformativ(target, internalformat, pname, bufSize, params);
   10332     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10333     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10334 
   10335     void *pointerArgs[] = {
   10336         (void *) params,
   10337     };
   10338 
   10339     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10340                               threadStartTime, threadEndTime,
   10341                               &glmsg, pointerArgs);
   10342     glContext->traceGLMessage(&glmsg);
   10343 }
   10344 
   10345 void GLTrace_glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) {
   10346     GLMessage glmsg;
   10347     GLTraceContext *glContext = getGLTraceContext();
   10348 
   10349     glmsg.set_function(GLMessage::glDispatchCompute);
   10350 
   10351     // copy argument num_groups_x
   10352     GLMessage_DataType *arg_num_groups_x = glmsg.add_args();
   10353     arg_num_groups_x->set_isarray(false);
   10354     arg_num_groups_x->set_type(GLMessage::DataType::INT);
   10355     arg_num_groups_x->add_intvalue(num_groups_x);
   10356 
   10357     // copy argument num_groups_y
   10358     GLMessage_DataType *arg_num_groups_y = glmsg.add_args();
   10359     arg_num_groups_y->set_isarray(false);
   10360     arg_num_groups_y->set_type(GLMessage::DataType::INT);
   10361     arg_num_groups_y->add_intvalue(num_groups_y);
   10362 
   10363     // copy argument num_groups_z
   10364     GLMessage_DataType *arg_num_groups_z = glmsg.add_args();
   10365     arg_num_groups_z->set_isarray(false);
   10366     arg_num_groups_z->set_type(GLMessage::DataType::INT);
   10367     arg_num_groups_z->add_intvalue(num_groups_z);
   10368 
   10369     // call function
   10370     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10371     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10372     glContext->hooks->gl.glDispatchCompute(num_groups_x, num_groups_y, num_groups_z);
   10373     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10374     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10375 
   10376     void *pointerArgs[] = {
   10377     };
   10378 
   10379     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10380                               threadStartTime, threadEndTime,
   10381                               &glmsg, pointerArgs);
   10382     glContext->traceGLMessage(&glmsg);
   10383 }
   10384 
   10385 void GLTrace_glDispatchComputeIndirect(GLintptr indirect) {
   10386     GLMessage glmsg;
   10387     GLTraceContext *glContext = getGLTraceContext();
   10388 
   10389     glmsg.set_function(GLMessage::glDispatchComputeIndirect);
   10390 
   10391     // copy argument indirect
   10392     GLMessage_DataType *arg_indirect = glmsg.add_args();
   10393     arg_indirect->set_isarray(false);
   10394     arg_indirect->set_type(GLMessage::DataType::INT);
   10395     arg_indirect->add_intvalue(indirect);
   10396 
   10397     // call function
   10398     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10399     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10400     glContext->hooks->gl.glDispatchComputeIndirect(indirect);
   10401     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10402     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10403 
   10404     void *pointerArgs[] = {
   10405     };
   10406 
   10407     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10408                               threadStartTime, threadEndTime,
   10409                               &glmsg, pointerArgs);
   10410     glContext->traceGLMessage(&glmsg);
   10411 }
   10412 
   10413 void GLTrace_glDrawArraysIndirect(GLenum mode, const void * indirect) {
   10414     GLMessage glmsg;
   10415     GLTraceContext *glContext = getGLTraceContext();
   10416 
   10417     glmsg.set_function(GLMessage::glDrawArraysIndirect);
   10418 
   10419     // copy argument mode
   10420     GLMessage_DataType *arg_mode = glmsg.add_args();
   10421     arg_mode->set_isarray(false);
   10422     arg_mode->set_type(GLMessage::DataType::ENUM);
   10423     arg_mode->add_intvalue((int)mode);
   10424 
   10425     // copy argument indirect
   10426     GLMessage_DataType *arg_indirect = glmsg.add_args();
   10427     arg_indirect->set_isarray(false);
   10428     arg_indirect->set_type(GLMessage::DataType::INT64);
   10429     arg_indirect->add_int64value((uintptr_t)indirect);
   10430 
   10431     // call function
   10432     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10433     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10434     glContext->hooks->gl.glDrawArraysIndirect(mode, indirect);
   10435     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10436     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10437 
   10438     void *pointerArgs[] = {
   10439         (void *) indirect,
   10440     };
   10441 
   10442     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10443                               threadStartTime, threadEndTime,
   10444                               &glmsg, pointerArgs);
   10445     glContext->traceGLMessage(&glmsg);
   10446 }
   10447 
   10448 void GLTrace_glDrawElementsIndirect(GLenum mode, GLenum type, const void * indirect) {
   10449     GLMessage glmsg;
   10450     GLTraceContext *glContext = getGLTraceContext();
   10451 
   10452     glmsg.set_function(GLMessage::glDrawElementsIndirect);
   10453 
   10454     // copy argument mode
   10455     GLMessage_DataType *arg_mode = glmsg.add_args();
   10456     arg_mode->set_isarray(false);
   10457     arg_mode->set_type(GLMessage::DataType::ENUM);
   10458     arg_mode->add_intvalue((int)mode);
   10459 
   10460     // copy argument type
   10461     GLMessage_DataType *arg_type = glmsg.add_args();
   10462     arg_type->set_isarray(false);
   10463     arg_type->set_type(GLMessage::DataType::ENUM);
   10464     arg_type->add_intvalue((int)type);
   10465 
   10466     // copy argument indirect
   10467     GLMessage_DataType *arg_indirect = glmsg.add_args();
   10468     arg_indirect->set_isarray(false);
   10469     arg_indirect->set_type(GLMessage::DataType::INT64);
   10470     arg_indirect->add_int64value((uintptr_t)indirect);
   10471 
   10472     // call function
   10473     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10474     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10475     glContext->hooks->gl.glDrawElementsIndirect(mode, type, indirect);
   10476     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10477     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10478 
   10479     void *pointerArgs[] = {
   10480         (void *) indirect,
   10481     };
   10482 
   10483     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10484                               threadStartTime, threadEndTime,
   10485                               &glmsg, pointerArgs);
   10486     glContext->traceGLMessage(&glmsg);
   10487 }
   10488 
   10489 void GLTrace_glFramebufferParameteri(GLenum target, GLenum pname, GLint param) {
   10490     GLMessage glmsg;
   10491     GLTraceContext *glContext = getGLTraceContext();
   10492 
   10493     glmsg.set_function(GLMessage::glFramebufferParameteri);
   10494 
   10495     // copy argument target
   10496     GLMessage_DataType *arg_target = glmsg.add_args();
   10497     arg_target->set_isarray(false);
   10498     arg_target->set_type(GLMessage::DataType::ENUM);
   10499     arg_target->add_intvalue((int)target);
   10500 
   10501     // copy argument pname
   10502     GLMessage_DataType *arg_pname = glmsg.add_args();
   10503     arg_pname->set_isarray(false);
   10504     arg_pname->set_type(GLMessage::DataType::ENUM);
   10505     arg_pname->add_intvalue((int)pname);
   10506 
   10507     // copy argument param
   10508     GLMessage_DataType *arg_param = glmsg.add_args();
   10509     arg_param->set_isarray(false);
   10510     arg_param->set_type(GLMessage::DataType::INT);
   10511     arg_param->add_intvalue(param);
   10512 
   10513     // call function
   10514     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10515     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10516     glContext->hooks->gl.glFramebufferParameteri(target, pname, param);
   10517     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10518     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10519 
   10520     void *pointerArgs[] = {
   10521     };
   10522 
   10523     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10524                               threadStartTime, threadEndTime,
   10525                               &glmsg, pointerArgs);
   10526     glContext->traceGLMessage(&glmsg);
   10527 }
   10528 
   10529 void GLTrace_glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint * params) {
   10530     GLMessage glmsg;
   10531     GLTraceContext *glContext = getGLTraceContext();
   10532 
   10533     glmsg.set_function(GLMessage::glGetFramebufferParameteriv);
   10534 
   10535     // copy argument target
   10536     GLMessage_DataType *arg_target = glmsg.add_args();
   10537     arg_target->set_isarray(false);
   10538     arg_target->set_type(GLMessage::DataType::ENUM);
   10539     arg_target->add_intvalue((int)target);
   10540 
   10541     // copy argument pname
   10542     GLMessage_DataType *arg_pname = glmsg.add_args();
   10543     arg_pname->set_isarray(false);
   10544     arg_pname->set_type(GLMessage::DataType::ENUM);
   10545     arg_pname->add_intvalue((int)pname);
   10546 
   10547     // copy argument params
   10548     GLMessage_DataType *arg_params = glmsg.add_args();
   10549     arg_params->set_isarray(false);
   10550     arg_params->set_type(GLMessage::DataType::INT64);
   10551     arg_params->add_int64value((uintptr_t)params);
   10552 
   10553     // call function
   10554     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10555     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10556     glContext->hooks->gl.glGetFramebufferParameteriv(target, pname, params);
   10557     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10558     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10559 
   10560     void *pointerArgs[] = {
   10561         (void *) params,
   10562     };
   10563 
   10564     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10565                               threadStartTime, threadEndTime,
   10566                               &glmsg, pointerArgs);
   10567     glContext->traceGLMessage(&glmsg);
   10568 }
   10569 
   10570 void GLTrace_glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint * params) {
   10571     GLMessage glmsg;
   10572     GLTraceContext *glContext = getGLTraceContext();
   10573 
   10574     glmsg.set_function(GLMessage::glGetProgramInterfaceiv);
   10575 
   10576     // copy argument program
   10577     GLMessage_DataType *arg_program = glmsg.add_args();
   10578     arg_program->set_isarray(false);
   10579     arg_program->set_type(GLMessage::DataType::INT);
   10580     arg_program->add_intvalue(program);
   10581 
   10582     // copy argument programInterface
   10583     GLMessage_DataType *arg_programInterface = glmsg.add_args();
   10584     arg_programInterface->set_isarray(false);
   10585     arg_programInterface->set_type(GLMessage::DataType::ENUM);
   10586     arg_programInterface->add_intvalue((int)programInterface);
   10587 
   10588     // copy argument pname
   10589     GLMessage_DataType *arg_pname = glmsg.add_args();
   10590     arg_pname->set_isarray(false);
   10591     arg_pname->set_type(GLMessage::DataType::ENUM);
   10592     arg_pname->add_intvalue((int)pname);
   10593 
   10594     // copy argument params
   10595     GLMessage_DataType *arg_params = glmsg.add_args();
   10596     arg_params->set_isarray(false);
   10597     arg_params->set_type(GLMessage::DataType::INT64);
   10598     arg_params->add_int64value((uintptr_t)params);
   10599 
   10600     // call function
   10601     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10602     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10603     glContext->hooks->gl.glGetProgramInterfaceiv(program, programInterface, pname, params);
   10604     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10605     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10606 
   10607     void *pointerArgs[] = {
   10608         (void *) params,
   10609     };
   10610 
   10611     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10612                               threadStartTime, threadEndTime,
   10613                               &glmsg, pointerArgs);
   10614     glContext->traceGLMessage(&glmsg);
   10615 }
   10616 
   10617 GLuint GLTrace_glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar * name) {
   10618     GLMessage glmsg;
   10619     GLTraceContext *glContext = getGLTraceContext();
   10620 
   10621     glmsg.set_function(GLMessage::glGetProgramResourceIndex);
   10622 
   10623     // copy argument program
   10624     GLMessage_DataType *arg_program = glmsg.add_args();
   10625     arg_program->set_isarray(false);
   10626     arg_program->set_type(GLMessage::DataType::INT);
   10627     arg_program->add_intvalue(program);
   10628 
   10629     // copy argument programInterface
   10630     GLMessage_DataType *arg_programInterface = glmsg.add_args();
   10631     arg_programInterface->set_isarray(false);
   10632     arg_programInterface->set_type(GLMessage::DataType::ENUM);
   10633     arg_programInterface->add_intvalue((int)programInterface);
   10634 
   10635     // copy argument name
   10636     GLMessage_DataType *arg_name = glmsg.add_args();
   10637     arg_name->set_isarray(false);
   10638     arg_name->set_type(GLMessage::DataType::INT64);
   10639     arg_name->add_int64value((uintptr_t)name);
   10640 
   10641     // call function
   10642     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10643     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10644     GLuint retValue = glContext->hooks->gl.glGetProgramResourceIndex(program, programInterface, name);
   10645     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10646     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10647 
   10648     // set return value
   10649     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   10650     rt->set_isarray(false);
   10651     rt->set_type(GLMessage::DataType::INT);
   10652     rt->add_intvalue(retValue);
   10653 
   10654     void *pointerArgs[] = {
   10655         (void *) name,
   10656     };
   10657 
   10658     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10659                               threadStartTime, threadEndTime,
   10660                               &glmsg, pointerArgs);
   10661     glContext->traceGLMessage(&glmsg);
   10662 
   10663     return retValue;
   10664 }
   10665 
   10666 void GLTrace_glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name) {
   10667     GLMessage glmsg;
   10668     GLTraceContext *glContext = getGLTraceContext();
   10669 
   10670     glmsg.set_function(GLMessage::glGetProgramResourceName);
   10671 
   10672     // copy argument program
   10673     GLMessage_DataType *arg_program = glmsg.add_args();
   10674     arg_program->set_isarray(false);
   10675     arg_program->set_type(GLMessage::DataType::INT);
   10676     arg_program->add_intvalue(program);
   10677 
   10678     // copy argument programInterface
   10679     GLMessage_DataType *arg_programInterface = glmsg.add_args();
   10680     arg_programInterface->set_isarray(false);
   10681     arg_programInterface->set_type(GLMessage::DataType::ENUM);
   10682     arg_programInterface->add_intvalue((int)programInterface);
   10683 
   10684     // copy argument index
   10685     GLMessage_DataType *arg_index = glmsg.add_args();
   10686     arg_index->set_isarray(false);
   10687     arg_index->set_type(GLMessage::DataType::INT);
   10688     arg_index->add_intvalue(index);
   10689 
   10690     // copy argument bufSize
   10691     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   10692     arg_bufSize->set_isarray(false);
   10693     arg_bufSize->set_type(GLMessage::DataType::INT);
   10694     arg_bufSize->add_intvalue(bufSize);
   10695 
   10696     // copy argument length
   10697     GLMessage_DataType *arg_length = glmsg.add_args();
   10698     arg_length->set_isarray(false);
   10699     arg_length->set_type(GLMessage::DataType::INT64);
   10700     arg_length->add_int64value((uintptr_t)length);
   10701 
   10702     // copy argument name
   10703     GLMessage_DataType *arg_name = glmsg.add_args();
   10704     arg_name->set_isarray(false);
   10705     arg_name->set_type(GLMessage::DataType::INT64);
   10706     arg_name->add_int64value((uintptr_t)name);
   10707 
   10708     // call function
   10709     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10710     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10711     glContext->hooks->gl.glGetProgramResourceName(program, programInterface, index, bufSize, length, name);
   10712     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10713     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10714 
   10715     void *pointerArgs[] = {
   10716         (void *) length,
   10717         (void *) name,
   10718     };
   10719 
   10720     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10721                               threadStartTime, threadEndTime,
   10722                               &glmsg, pointerArgs);
   10723     glContext->traceGLMessage(&glmsg);
   10724 }
   10725 
   10726 void GLTrace_glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params) {
   10727     GLMessage glmsg;
   10728     GLTraceContext *glContext = getGLTraceContext();
   10729 
   10730     glmsg.set_function(GLMessage::glGetProgramResourceiv);
   10731 
   10732     // copy argument program
   10733     GLMessage_DataType *arg_program = glmsg.add_args();
   10734     arg_program->set_isarray(false);
   10735     arg_program->set_type(GLMessage::DataType::INT);
   10736     arg_program->add_intvalue(program);
   10737 
   10738     // copy argument programInterface
   10739     GLMessage_DataType *arg_programInterface = glmsg.add_args();
   10740     arg_programInterface->set_isarray(false);
   10741     arg_programInterface->set_type(GLMessage::DataType::ENUM);
   10742     arg_programInterface->add_intvalue((int)programInterface);
   10743 
   10744     // copy argument index
   10745     GLMessage_DataType *arg_index = glmsg.add_args();
   10746     arg_index->set_isarray(false);
   10747     arg_index->set_type(GLMessage::DataType::INT);
   10748     arg_index->add_intvalue(index);
   10749 
   10750     // copy argument propCount
   10751     GLMessage_DataType *arg_propCount = glmsg.add_args();
   10752     arg_propCount->set_isarray(false);
   10753     arg_propCount->set_type(GLMessage::DataType::INT);
   10754     arg_propCount->add_intvalue(propCount);
   10755 
   10756     // copy argument props
   10757     GLMessage_DataType *arg_props = glmsg.add_args();
   10758     arg_props->set_isarray(false);
   10759     arg_props->set_type(GLMessage::DataType::INT64);
   10760     arg_props->add_int64value((uintptr_t)props);
   10761 
   10762     // copy argument bufSize
   10763     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   10764     arg_bufSize->set_isarray(false);
   10765     arg_bufSize->set_type(GLMessage::DataType::INT);
   10766     arg_bufSize->add_intvalue(bufSize);
   10767 
   10768     // copy argument length
   10769     GLMessage_DataType *arg_length = glmsg.add_args();
   10770     arg_length->set_isarray(false);
   10771     arg_length->set_type(GLMessage::DataType::INT64);
   10772     arg_length->add_int64value((uintptr_t)length);
   10773 
   10774     // copy argument params
   10775     GLMessage_DataType *arg_params = glmsg.add_args();
   10776     arg_params->set_isarray(false);
   10777     arg_params->set_type(GLMessage::DataType::INT64);
   10778     arg_params->add_int64value((uintptr_t)params);
   10779 
   10780     // call function
   10781     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10782     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10783     glContext->hooks->gl.glGetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params);
   10784     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10785     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10786 
   10787     void *pointerArgs[] = {
   10788         (void *) props,
   10789         (void *) length,
   10790         (void *) params,
   10791     };
   10792 
   10793     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10794                               threadStartTime, threadEndTime,
   10795                               &glmsg, pointerArgs);
   10796     glContext->traceGLMessage(&glmsg);
   10797 }
   10798 
   10799 GLint GLTrace_glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar * name) {
   10800     GLMessage glmsg;
   10801     GLTraceContext *glContext = getGLTraceContext();
   10802 
   10803     glmsg.set_function(GLMessage::glGetProgramResourceLocation);
   10804 
   10805     // copy argument program
   10806     GLMessage_DataType *arg_program = glmsg.add_args();
   10807     arg_program->set_isarray(false);
   10808     arg_program->set_type(GLMessage::DataType::INT);
   10809     arg_program->add_intvalue(program);
   10810 
   10811     // copy argument programInterface
   10812     GLMessage_DataType *arg_programInterface = glmsg.add_args();
   10813     arg_programInterface->set_isarray(false);
   10814     arg_programInterface->set_type(GLMessage::DataType::ENUM);
   10815     arg_programInterface->add_intvalue((int)programInterface);
   10816 
   10817     // copy argument name
   10818     GLMessage_DataType *arg_name = glmsg.add_args();
   10819     arg_name->set_isarray(false);
   10820     arg_name->set_type(GLMessage::DataType::INT64);
   10821     arg_name->add_int64value((uintptr_t)name);
   10822 
   10823     // call function
   10824     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10825     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10826     GLint retValue = glContext->hooks->gl.glGetProgramResourceLocation(program, programInterface, name);
   10827     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10828     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10829 
   10830     // set return value
   10831     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   10832     rt->set_isarray(false);
   10833     rt->set_type(GLMessage::DataType::INT);
   10834     rt->add_intvalue(retValue);
   10835 
   10836     void *pointerArgs[] = {
   10837         (void *) name,
   10838     };
   10839 
   10840     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10841                               threadStartTime, threadEndTime,
   10842                               &glmsg, pointerArgs);
   10843     glContext->traceGLMessage(&glmsg);
   10844 
   10845     return retValue;
   10846 }
   10847 
   10848 void GLTrace_glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program) {
   10849     GLMessage glmsg;
   10850     GLTraceContext *glContext = getGLTraceContext();
   10851 
   10852     glmsg.set_function(GLMessage::glUseProgramStages);
   10853 
   10854     // copy argument pipeline
   10855     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   10856     arg_pipeline->set_isarray(false);
   10857     arg_pipeline->set_type(GLMessage::DataType::INT);
   10858     arg_pipeline->add_intvalue(pipeline);
   10859 
   10860     // copy argument stages
   10861     GLMessage_DataType *arg_stages = glmsg.add_args();
   10862     arg_stages->set_isarray(false);
   10863     arg_stages->set_type(GLMessage::DataType::INT);
   10864     arg_stages->add_intvalue(stages);
   10865 
   10866     // copy argument program
   10867     GLMessage_DataType *arg_program = glmsg.add_args();
   10868     arg_program->set_isarray(false);
   10869     arg_program->set_type(GLMessage::DataType::INT);
   10870     arg_program->add_intvalue(program);
   10871 
   10872     // call function
   10873     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10874     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10875     glContext->hooks->gl.glUseProgramStages(pipeline, stages, program);
   10876     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10877     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10878 
   10879     void *pointerArgs[] = {
   10880     };
   10881 
   10882     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10883                               threadStartTime, threadEndTime,
   10884                               &glmsg, pointerArgs);
   10885     glContext->traceGLMessage(&glmsg);
   10886 }
   10887 
   10888 void GLTrace_glActiveShaderProgram(GLuint pipeline, GLuint program) {
   10889     GLMessage glmsg;
   10890     GLTraceContext *glContext = getGLTraceContext();
   10891 
   10892     glmsg.set_function(GLMessage::glActiveShaderProgram);
   10893 
   10894     // copy argument pipeline
   10895     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   10896     arg_pipeline->set_isarray(false);
   10897     arg_pipeline->set_type(GLMessage::DataType::INT);
   10898     arg_pipeline->add_intvalue(pipeline);
   10899 
   10900     // copy argument program
   10901     GLMessage_DataType *arg_program = glmsg.add_args();
   10902     arg_program->set_isarray(false);
   10903     arg_program->set_type(GLMessage::DataType::INT);
   10904     arg_program->add_intvalue(program);
   10905 
   10906     // call function
   10907     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10908     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10909     glContext->hooks->gl.glActiveShaderProgram(pipeline, program);
   10910     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10911     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10912 
   10913     void *pointerArgs[] = {
   10914     };
   10915 
   10916     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10917                               threadStartTime, threadEndTime,
   10918                               &glmsg, pointerArgs);
   10919     glContext->traceGLMessage(&glmsg);
   10920 }
   10921 
   10922 GLuint GLTrace_glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const* strings) {
   10923     GLMessage glmsg;
   10924     GLTraceContext *glContext = getGLTraceContext();
   10925 
   10926     glmsg.set_function(GLMessage::glCreateShaderProgramv);
   10927 
   10928     // copy argument type
   10929     GLMessage_DataType *arg_type = glmsg.add_args();
   10930     arg_type->set_isarray(false);
   10931     arg_type->set_type(GLMessage::DataType::ENUM);
   10932     arg_type->add_intvalue((int)type);
   10933 
   10934     // copy argument count
   10935     GLMessage_DataType *arg_count = glmsg.add_args();
   10936     arg_count->set_isarray(false);
   10937     arg_count->set_type(GLMessage::DataType::INT);
   10938     arg_count->add_intvalue(count);
   10939 
   10940     // copy argument strings
   10941     GLMessage_DataType *arg_strings = glmsg.add_args();
   10942     arg_strings->set_isarray(false);
   10943     arg_strings->set_type(GLMessage::DataType::INT64);
   10944     arg_strings->add_int64value((uintptr_t)strings);
   10945 
   10946     // call function
   10947     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10948     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10949     GLuint retValue = glContext->hooks->gl.glCreateShaderProgramv(type, count, strings);
   10950     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10951     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10952 
   10953     // set return value
   10954     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   10955     rt->set_isarray(false);
   10956     rt->set_type(GLMessage::DataType::INT);
   10957     rt->add_intvalue(retValue);
   10958 
   10959     void *pointerArgs[] = {
   10960         (void *) strings,
   10961     };
   10962 
   10963     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10964                               threadStartTime, threadEndTime,
   10965                               &glmsg, pointerArgs);
   10966     glContext->traceGLMessage(&glmsg);
   10967 
   10968     return retValue;
   10969 }
   10970 
   10971 void GLTrace_glBindProgramPipeline(GLuint pipeline) {
   10972     GLMessage glmsg;
   10973     GLTraceContext *glContext = getGLTraceContext();
   10974 
   10975     glmsg.set_function(GLMessage::glBindProgramPipeline);
   10976 
   10977     // copy argument pipeline
   10978     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   10979     arg_pipeline->set_isarray(false);
   10980     arg_pipeline->set_type(GLMessage::DataType::INT);
   10981     arg_pipeline->add_intvalue(pipeline);
   10982 
   10983     // call function
   10984     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10985     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   10986     glContext->hooks->gl.glBindProgramPipeline(pipeline);
   10987     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   10988     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   10989 
   10990     void *pointerArgs[] = {
   10991     };
   10992 
   10993     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   10994                               threadStartTime, threadEndTime,
   10995                               &glmsg, pointerArgs);
   10996     glContext->traceGLMessage(&glmsg);
   10997 }
   10998 
   10999 void GLTrace_glDeleteProgramPipelines(GLsizei n, const GLuint * pipelines) {
   11000     GLMessage glmsg;
   11001     GLTraceContext *glContext = getGLTraceContext();
   11002 
   11003     glmsg.set_function(GLMessage::glDeleteProgramPipelines);
   11004 
   11005     // copy argument n
   11006     GLMessage_DataType *arg_n = glmsg.add_args();
   11007     arg_n->set_isarray(false);
   11008     arg_n->set_type(GLMessage::DataType::INT);
   11009     arg_n->add_intvalue(n);
   11010 
   11011     // copy argument pipelines
   11012     GLMessage_DataType *arg_pipelines = glmsg.add_args();
   11013     arg_pipelines->set_isarray(false);
   11014     arg_pipelines->set_type(GLMessage::DataType::INT64);
   11015     arg_pipelines->add_int64value((uintptr_t)pipelines);
   11016 
   11017     // call function
   11018     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11019     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11020     glContext->hooks->gl.glDeleteProgramPipelines(n, pipelines);
   11021     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11022     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11023 
   11024     void *pointerArgs[] = {
   11025         (void *) pipelines,
   11026     };
   11027 
   11028     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11029                               threadStartTime, threadEndTime,
   11030                               &glmsg, pointerArgs);
   11031     glContext->traceGLMessage(&glmsg);
   11032 }
   11033 
   11034 void GLTrace_glGenProgramPipelines(GLsizei n, GLuint * pipelines) {
   11035     GLMessage glmsg;
   11036     GLTraceContext *glContext = getGLTraceContext();
   11037 
   11038     glmsg.set_function(GLMessage::glGenProgramPipelines);
   11039 
   11040     // copy argument n
   11041     GLMessage_DataType *arg_n = glmsg.add_args();
   11042     arg_n->set_isarray(false);
   11043     arg_n->set_type(GLMessage::DataType::INT);
   11044     arg_n->add_intvalue(n);
   11045 
   11046     // copy argument pipelines
   11047     GLMessage_DataType *arg_pipelines = glmsg.add_args();
   11048     arg_pipelines->set_isarray(false);
   11049     arg_pipelines->set_type(GLMessage::DataType::INT64);
   11050     arg_pipelines->add_int64value((uintptr_t)pipelines);
   11051 
   11052     // call function
   11053     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11054     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11055     glContext->hooks->gl.glGenProgramPipelines(n, pipelines);
   11056     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11057     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11058 
   11059     void *pointerArgs[] = {
   11060         (void *) pipelines,
   11061     };
   11062 
   11063     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11064                               threadStartTime, threadEndTime,
   11065                               &glmsg, pointerArgs);
   11066     glContext->traceGLMessage(&glmsg);
   11067 }
   11068 
   11069 GLboolean GLTrace_glIsProgramPipeline(GLuint pipeline) {
   11070     GLMessage glmsg;
   11071     GLTraceContext *glContext = getGLTraceContext();
   11072 
   11073     glmsg.set_function(GLMessage::glIsProgramPipeline);
   11074 
   11075     // copy argument pipeline
   11076     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   11077     arg_pipeline->set_isarray(false);
   11078     arg_pipeline->set_type(GLMessage::DataType::INT);
   11079     arg_pipeline->add_intvalue(pipeline);
   11080 
   11081     // call function
   11082     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11083     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11084     GLboolean retValue = glContext->hooks->gl.glIsProgramPipeline(pipeline);
   11085     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11086     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11087 
   11088     // set return value
   11089     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   11090     rt->set_isarray(false);
   11091     rt->set_type(GLMessage::DataType::BOOL);
   11092     rt->add_boolvalue(retValue);
   11093 
   11094     void *pointerArgs[] = {
   11095     };
   11096 
   11097     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11098                               threadStartTime, threadEndTime,
   11099                               &glmsg, pointerArgs);
   11100     glContext->traceGLMessage(&glmsg);
   11101 
   11102     return retValue;
   11103 }
   11104 
   11105 void GLTrace_glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint * params) {
   11106     GLMessage glmsg;
   11107     GLTraceContext *glContext = getGLTraceContext();
   11108 
   11109     glmsg.set_function(GLMessage::glGetProgramPipelineiv);
   11110 
   11111     // copy argument pipeline
   11112     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   11113     arg_pipeline->set_isarray(false);
   11114     arg_pipeline->set_type(GLMessage::DataType::INT);
   11115     arg_pipeline->add_intvalue(pipeline);
   11116 
   11117     // copy argument pname
   11118     GLMessage_DataType *arg_pname = glmsg.add_args();
   11119     arg_pname->set_isarray(false);
   11120     arg_pname->set_type(GLMessage::DataType::ENUM);
   11121     arg_pname->add_intvalue((int)pname);
   11122 
   11123     // copy argument params
   11124     GLMessage_DataType *arg_params = glmsg.add_args();
   11125     arg_params->set_isarray(false);
   11126     arg_params->set_type(GLMessage::DataType::INT64);
   11127     arg_params->add_int64value((uintptr_t)params);
   11128 
   11129     // call function
   11130     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11131     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11132     glContext->hooks->gl.glGetProgramPipelineiv(pipeline, pname, params);
   11133     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11134     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11135 
   11136     void *pointerArgs[] = {
   11137         (void *) params,
   11138     };
   11139 
   11140     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11141                               threadStartTime, threadEndTime,
   11142                               &glmsg, pointerArgs);
   11143     glContext->traceGLMessage(&glmsg);
   11144 }
   11145 
   11146 void GLTrace_glProgramUniform1i(GLuint program, GLint location, GLint v0) {
   11147     GLMessage glmsg;
   11148     GLTraceContext *glContext = getGLTraceContext();
   11149 
   11150     glmsg.set_function(GLMessage::glProgramUniform1i);
   11151 
   11152     // copy argument program
   11153     GLMessage_DataType *arg_program = glmsg.add_args();
   11154     arg_program->set_isarray(false);
   11155     arg_program->set_type(GLMessage::DataType::INT);
   11156     arg_program->add_intvalue(program);
   11157 
   11158     // copy argument location
   11159     GLMessage_DataType *arg_location = glmsg.add_args();
   11160     arg_location->set_isarray(false);
   11161     arg_location->set_type(GLMessage::DataType::INT);
   11162     arg_location->add_intvalue(location);
   11163 
   11164     // copy argument v0
   11165     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11166     arg_v0->set_isarray(false);
   11167     arg_v0->set_type(GLMessage::DataType::INT);
   11168     arg_v0->add_intvalue(v0);
   11169 
   11170     // call function
   11171     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11172     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11173     glContext->hooks->gl.glProgramUniform1i(program, location, v0);
   11174     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11175     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11176 
   11177     void *pointerArgs[] = {
   11178     };
   11179 
   11180     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11181                               threadStartTime, threadEndTime,
   11182                               &glmsg, pointerArgs);
   11183     glContext->traceGLMessage(&glmsg);
   11184 }
   11185 
   11186 void GLTrace_glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1) {
   11187     GLMessage glmsg;
   11188     GLTraceContext *glContext = getGLTraceContext();
   11189 
   11190     glmsg.set_function(GLMessage::glProgramUniform2i);
   11191 
   11192     // copy argument program
   11193     GLMessage_DataType *arg_program = glmsg.add_args();
   11194     arg_program->set_isarray(false);
   11195     arg_program->set_type(GLMessage::DataType::INT);
   11196     arg_program->add_intvalue(program);
   11197 
   11198     // copy argument location
   11199     GLMessage_DataType *arg_location = glmsg.add_args();
   11200     arg_location->set_isarray(false);
   11201     arg_location->set_type(GLMessage::DataType::INT);
   11202     arg_location->add_intvalue(location);
   11203 
   11204     // copy argument v0
   11205     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11206     arg_v0->set_isarray(false);
   11207     arg_v0->set_type(GLMessage::DataType::INT);
   11208     arg_v0->add_intvalue(v0);
   11209 
   11210     // copy argument v1
   11211     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11212     arg_v1->set_isarray(false);
   11213     arg_v1->set_type(GLMessage::DataType::INT);
   11214     arg_v1->add_intvalue(v1);
   11215 
   11216     // call function
   11217     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11218     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11219     glContext->hooks->gl.glProgramUniform2i(program, location, v0, v1);
   11220     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11221     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11222 
   11223     void *pointerArgs[] = {
   11224     };
   11225 
   11226     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11227                               threadStartTime, threadEndTime,
   11228                               &glmsg, pointerArgs);
   11229     glContext->traceGLMessage(&glmsg);
   11230 }
   11231 
   11232 void GLTrace_glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) {
   11233     GLMessage glmsg;
   11234     GLTraceContext *glContext = getGLTraceContext();
   11235 
   11236     glmsg.set_function(GLMessage::glProgramUniform3i);
   11237 
   11238     // copy argument program
   11239     GLMessage_DataType *arg_program = glmsg.add_args();
   11240     arg_program->set_isarray(false);
   11241     arg_program->set_type(GLMessage::DataType::INT);
   11242     arg_program->add_intvalue(program);
   11243 
   11244     // copy argument location
   11245     GLMessage_DataType *arg_location = glmsg.add_args();
   11246     arg_location->set_isarray(false);
   11247     arg_location->set_type(GLMessage::DataType::INT);
   11248     arg_location->add_intvalue(location);
   11249 
   11250     // copy argument v0
   11251     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11252     arg_v0->set_isarray(false);
   11253     arg_v0->set_type(GLMessage::DataType::INT);
   11254     arg_v0->add_intvalue(v0);
   11255 
   11256     // copy argument v1
   11257     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11258     arg_v1->set_isarray(false);
   11259     arg_v1->set_type(GLMessage::DataType::INT);
   11260     arg_v1->add_intvalue(v1);
   11261 
   11262     // copy argument v2
   11263     GLMessage_DataType *arg_v2 = glmsg.add_args();
   11264     arg_v2->set_isarray(false);
   11265     arg_v2->set_type(GLMessage::DataType::INT);
   11266     arg_v2->add_intvalue(v2);
   11267 
   11268     // call function
   11269     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11270     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11271     glContext->hooks->gl.glProgramUniform3i(program, location, v0, v1, v2);
   11272     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11273     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11274 
   11275     void *pointerArgs[] = {
   11276     };
   11277 
   11278     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11279                               threadStartTime, threadEndTime,
   11280                               &glmsg, pointerArgs);
   11281     glContext->traceGLMessage(&glmsg);
   11282 }
   11283 
   11284 void GLTrace_glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {
   11285     GLMessage glmsg;
   11286     GLTraceContext *glContext = getGLTraceContext();
   11287 
   11288     glmsg.set_function(GLMessage::glProgramUniform4i);
   11289 
   11290     // copy argument program
   11291     GLMessage_DataType *arg_program = glmsg.add_args();
   11292     arg_program->set_isarray(false);
   11293     arg_program->set_type(GLMessage::DataType::INT);
   11294     arg_program->add_intvalue(program);
   11295 
   11296     // copy argument location
   11297     GLMessage_DataType *arg_location = glmsg.add_args();
   11298     arg_location->set_isarray(false);
   11299     arg_location->set_type(GLMessage::DataType::INT);
   11300     arg_location->add_intvalue(location);
   11301 
   11302     // copy argument v0
   11303     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11304     arg_v0->set_isarray(false);
   11305     arg_v0->set_type(GLMessage::DataType::INT);
   11306     arg_v0->add_intvalue(v0);
   11307 
   11308     // copy argument v1
   11309     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11310     arg_v1->set_isarray(false);
   11311     arg_v1->set_type(GLMessage::DataType::INT);
   11312     arg_v1->add_intvalue(v1);
   11313 
   11314     // copy argument v2
   11315     GLMessage_DataType *arg_v2 = glmsg.add_args();
   11316     arg_v2->set_isarray(false);
   11317     arg_v2->set_type(GLMessage::DataType::INT);
   11318     arg_v2->add_intvalue(v2);
   11319 
   11320     // copy argument v3
   11321     GLMessage_DataType *arg_v3 = glmsg.add_args();
   11322     arg_v3->set_isarray(false);
   11323     arg_v3->set_type(GLMessage::DataType::INT);
   11324     arg_v3->add_intvalue(v3);
   11325 
   11326     // call function
   11327     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11328     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11329     glContext->hooks->gl.glProgramUniform4i(program, location, v0, v1, v2, v3);
   11330     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11331     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11332 
   11333     void *pointerArgs[] = {
   11334     };
   11335 
   11336     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11337                               threadStartTime, threadEndTime,
   11338                               &glmsg, pointerArgs);
   11339     glContext->traceGLMessage(&glmsg);
   11340 }
   11341 
   11342 void GLTrace_glProgramUniform1ui(GLuint program, GLint location, GLuint v0) {
   11343     GLMessage glmsg;
   11344     GLTraceContext *glContext = getGLTraceContext();
   11345 
   11346     glmsg.set_function(GLMessage::glProgramUniform1ui);
   11347 
   11348     // copy argument program
   11349     GLMessage_DataType *arg_program = glmsg.add_args();
   11350     arg_program->set_isarray(false);
   11351     arg_program->set_type(GLMessage::DataType::INT);
   11352     arg_program->add_intvalue(program);
   11353 
   11354     // copy argument location
   11355     GLMessage_DataType *arg_location = glmsg.add_args();
   11356     arg_location->set_isarray(false);
   11357     arg_location->set_type(GLMessage::DataType::INT);
   11358     arg_location->add_intvalue(location);
   11359 
   11360     // copy argument v0
   11361     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11362     arg_v0->set_isarray(false);
   11363     arg_v0->set_type(GLMessage::DataType::INT);
   11364     arg_v0->add_intvalue(v0);
   11365 
   11366     // call function
   11367     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11368     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11369     glContext->hooks->gl.glProgramUniform1ui(program, location, v0);
   11370     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11371     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11372 
   11373     void *pointerArgs[] = {
   11374     };
   11375 
   11376     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11377                               threadStartTime, threadEndTime,
   11378                               &glmsg, pointerArgs);
   11379     glContext->traceGLMessage(&glmsg);
   11380 }
   11381 
   11382 void GLTrace_glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1) {
   11383     GLMessage glmsg;
   11384     GLTraceContext *glContext = getGLTraceContext();
   11385 
   11386     glmsg.set_function(GLMessage::glProgramUniform2ui);
   11387 
   11388     // copy argument program
   11389     GLMessage_DataType *arg_program = glmsg.add_args();
   11390     arg_program->set_isarray(false);
   11391     arg_program->set_type(GLMessage::DataType::INT);
   11392     arg_program->add_intvalue(program);
   11393 
   11394     // copy argument location
   11395     GLMessage_DataType *arg_location = glmsg.add_args();
   11396     arg_location->set_isarray(false);
   11397     arg_location->set_type(GLMessage::DataType::INT);
   11398     arg_location->add_intvalue(location);
   11399 
   11400     // copy argument v0
   11401     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11402     arg_v0->set_isarray(false);
   11403     arg_v0->set_type(GLMessage::DataType::INT);
   11404     arg_v0->add_intvalue(v0);
   11405 
   11406     // copy argument v1
   11407     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11408     arg_v1->set_isarray(false);
   11409     arg_v1->set_type(GLMessage::DataType::INT);
   11410     arg_v1->add_intvalue(v1);
   11411 
   11412     // call function
   11413     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11414     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11415     glContext->hooks->gl.glProgramUniform2ui(program, location, v0, v1);
   11416     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11417     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11418 
   11419     void *pointerArgs[] = {
   11420     };
   11421 
   11422     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11423                               threadStartTime, threadEndTime,
   11424                               &glmsg, pointerArgs);
   11425     glContext->traceGLMessage(&glmsg);
   11426 }
   11427 
   11428 void GLTrace_glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) {
   11429     GLMessage glmsg;
   11430     GLTraceContext *glContext = getGLTraceContext();
   11431 
   11432     glmsg.set_function(GLMessage::glProgramUniform3ui);
   11433 
   11434     // copy argument program
   11435     GLMessage_DataType *arg_program = glmsg.add_args();
   11436     arg_program->set_isarray(false);
   11437     arg_program->set_type(GLMessage::DataType::INT);
   11438     arg_program->add_intvalue(program);
   11439 
   11440     // copy argument location
   11441     GLMessage_DataType *arg_location = glmsg.add_args();
   11442     arg_location->set_isarray(false);
   11443     arg_location->set_type(GLMessage::DataType::INT);
   11444     arg_location->add_intvalue(location);
   11445 
   11446     // copy argument v0
   11447     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11448     arg_v0->set_isarray(false);
   11449     arg_v0->set_type(GLMessage::DataType::INT);
   11450     arg_v0->add_intvalue(v0);
   11451 
   11452     // copy argument v1
   11453     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11454     arg_v1->set_isarray(false);
   11455     arg_v1->set_type(GLMessage::DataType::INT);
   11456     arg_v1->add_intvalue(v1);
   11457 
   11458     // copy argument v2
   11459     GLMessage_DataType *arg_v2 = glmsg.add_args();
   11460     arg_v2->set_isarray(false);
   11461     arg_v2->set_type(GLMessage::DataType::INT);
   11462     arg_v2->add_intvalue(v2);
   11463 
   11464     // call function
   11465     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11466     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11467     glContext->hooks->gl.glProgramUniform3ui(program, location, v0, v1, v2);
   11468     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11469     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11470 
   11471     void *pointerArgs[] = {
   11472     };
   11473 
   11474     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11475                               threadStartTime, threadEndTime,
   11476                               &glmsg, pointerArgs);
   11477     glContext->traceGLMessage(&glmsg);
   11478 }
   11479 
   11480 void GLTrace_glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {
   11481     GLMessage glmsg;
   11482     GLTraceContext *glContext = getGLTraceContext();
   11483 
   11484     glmsg.set_function(GLMessage::glProgramUniform4ui);
   11485 
   11486     // copy argument program
   11487     GLMessage_DataType *arg_program = glmsg.add_args();
   11488     arg_program->set_isarray(false);
   11489     arg_program->set_type(GLMessage::DataType::INT);
   11490     arg_program->add_intvalue(program);
   11491 
   11492     // copy argument location
   11493     GLMessage_DataType *arg_location = glmsg.add_args();
   11494     arg_location->set_isarray(false);
   11495     arg_location->set_type(GLMessage::DataType::INT);
   11496     arg_location->add_intvalue(location);
   11497 
   11498     // copy argument v0
   11499     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11500     arg_v0->set_isarray(false);
   11501     arg_v0->set_type(GLMessage::DataType::INT);
   11502     arg_v0->add_intvalue(v0);
   11503 
   11504     // copy argument v1
   11505     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11506     arg_v1->set_isarray(false);
   11507     arg_v1->set_type(GLMessage::DataType::INT);
   11508     arg_v1->add_intvalue(v1);
   11509 
   11510     // copy argument v2
   11511     GLMessage_DataType *arg_v2 = glmsg.add_args();
   11512     arg_v2->set_isarray(false);
   11513     arg_v2->set_type(GLMessage::DataType::INT);
   11514     arg_v2->add_intvalue(v2);
   11515 
   11516     // copy argument v3
   11517     GLMessage_DataType *arg_v3 = glmsg.add_args();
   11518     arg_v3->set_isarray(false);
   11519     arg_v3->set_type(GLMessage::DataType::INT);
   11520     arg_v3->add_intvalue(v3);
   11521 
   11522     // call function
   11523     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11524     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11525     glContext->hooks->gl.glProgramUniform4ui(program, location, v0, v1, v2, v3);
   11526     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11527     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11528 
   11529     void *pointerArgs[] = {
   11530     };
   11531 
   11532     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11533                               threadStartTime, threadEndTime,
   11534                               &glmsg, pointerArgs);
   11535     glContext->traceGLMessage(&glmsg);
   11536 }
   11537 
   11538 void GLTrace_glProgramUniform1f(GLuint program, GLint location, GLfloat v0) {
   11539     GLMessage glmsg;
   11540     GLTraceContext *glContext = getGLTraceContext();
   11541 
   11542     glmsg.set_function(GLMessage::glProgramUniform1f);
   11543 
   11544     // copy argument program
   11545     GLMessage_DataType *arg_program = glmsg.add_args();
   11546     arg_program->set_isarray(false);
   11547     arg_program->set_type(GLMessage::DataType::INT);
   11548     arg_program->add_intvalue(program);
   11549 
   11550     // copy argument location
   11551     GLMessage_DataType *arg_location = glmsg.add_args();
   11552     arg_location->set_isarray(false);
   11553     arg_location->set_type(GLMessage::DataType::INT);
   11554     arg_location->add_intvalue(location);
   11555 
   11556     // copy argument v0
   11557     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11558     arg_v0->set_isarray(false);
   11559     arg_v0->set_type(GLMessage::DataType::FLOAT);
   11560     arg_v0->add_floatvalue(v0);
   11561 
   11562     // call function
   11563     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11564     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11565     glContext->hooks->gl.glProgramUniform1f(program, location, v0);
   11566     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11567     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11568 
   11569     void *pointerArgs[] = {
   11570     };
   11571 
   11572     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11573                               threadStartTime, threadEndTime,
   11574                               &glmsg, pointerArgs);
   11575     glContext->traceGLMessage(&glmsg);
   11576 }
   11577 
   11578 void GLTrace_glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1) {
   11579     GLMessage glmsg;
   11580     GLTraceContext *glContext = getGLTraceContext();
   11581 
   11582     glmsg.set_function(GLMessage::glProgramUniform2f);
   11583 
   11584     // copy argument program
   11585     GLMessage_DataType *arg_program = glmsg.add_args();
   11586     arg_program->set_isarray(false);
   11587     arg_program->set_type(GLMessage::DataType::INT);
   11588     arg_program->add_intvalue(program);
   11589 
   11590     // copy argument location
   11591     GLMessage_DataType *arg_location = glmsg.add_args();
   11592     arg_location->set_isarray(false);
   11593     arg_location->set_type(GLMessage::DataType::INT);
   11594     arg_location->add_intvalue(location);
   11595 
   11596     // copy argument v0
   11597     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11598     arg_v0->set_isarray(false);
   11599     arg_v0->set_type(GLMessage::DataType::FLOAT);
   11600     arg_v0->add_floatvalue(v0);
   11601 
   11602     // copy argument v1
   11603     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11604     arg_v1->set_isarray(false);
   11605     arg_v1->set_type(GLMessage::DataType::FLOAT);
   11606     arg_v1->add_floatvalue(v1);
   11607 
   11608     // call function
   11609     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11610     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11611     glContext->hooks->gl.glProgramUniform2f(program, location, v0, v1);
   11612     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11613     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11614 
   11615     void *pointerArgs[] = {
   11616     };
   11617 
   11618     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11619                               threadStartTime, threadEndTime,
   11620                               &glmsg, pointerArgs);
   11621     glContext->traceGLMessage(&glmsg);
   11622 }
   11623 
   11624 void GLTrace_glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
   11625     GLMessage glmsg;
   11626     GLTraceContext *glContext = getGLTraceContext();
   11627 
   11628     glmsg.set_function(GLMessage::glProgramUniform3f);
   11629 
   11630     // copy argument program
   11631     GLMessage_DataType *arg_program = glmsg.add_args();
   11632     arg_program->set_isarray(false);
   11633     arg_program->set_type(GLMessage::DataType::INT);
   11634     arg_program->add_intvalue(program);
   11635 
   11636     // copy argument location
   11637     GLMessage_DataType *arg_location = glmsg.add_args();
   11638     arg_location->set_isarray(false);
   11639     arg_location->set_type(GLMessage::DataType::INT);
   11640     arg_location->add_intvalue(location);
   11641 
   11642     // copy argument v0
   11643     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11644     arg_v0->set_isarray(false);
   11645     arg_v0->set_type(GLMessage::DataType::FLOAT);
   11646     arg_v0->add_floatvalue(v0);
   11647 
   11648     // copy argument v1
   11649     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11650     arg_v1->set_isarray(false);
   11651     arg_v1->set_type(GLMessage::DataType::FLOAT);
   11652     arg_v1->add_floatvalue(v1);
   11653 
   11654     // copy argument v2
   11655     GLMessage_DataType *arg_v2 = glmsg.add_args();
   11656     arg_v2->set_isarray(false);
   11657     arg_v2->set_type(GLMessage::DataType::FLOAT);
   11658     arg_v2->add_floatvalue(v2);
   11659 
   11660     // call function
   11661     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11662     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11663     glContext->hooks->gl.glProgramUniform3f(program, location, v0, v1, v2);
   11664     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11665     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11666 
   11667     void *pointerArgs[] = {
   11668     };
   11669 
   11670     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11671                               threadStartTime, threadEndTime,
   11672                               &glmsg, pointerArgs);
   11673     glContext->traceGLMessage(&glmsg);
   11674 }
   11675 
   11676 void GLTrace_glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {
   11677     GLMessage glmsg;
   11678     GLTraceContext *glContext = getGLTraceContext();
   11679 
   11680     glmsg.set_function(GLMessage::glProgramUniform4f);
   11681 
   11682     // copy argument program
   11683     GLMessage_DataType *arg_program = glmsg.add_args();
   11684     arg_program->set_isarray(false);
   11685     arg_program->set_type(GLMessage::DataType::INT);
   11686     arg_program->add_intvalue(program);
   11687 
   11688     // copy argument location
   11689     GLMessage_DataType *arg_location = glmsg.add_args();
   11690     arg_location->set_isarray(false);
   11691     arg_location->set_type(GLMessage::DataType::INT);
   11692     arg_location->add_intvalue(location);
   11693 
   11694     // copy argument v0
   11695     GLMessage_DataType *arg_v0 = glmsg.add_args();
   11696     arg_v0->set_isarray(false);
   11697     arg_v0->set_type(GLMessage::DataType::FLOAT);
   11698     arg_v0->add_floatvalue(v0);
   11699 
   11700     // copy argument v1
   11701     GLMessage_DataType *arg_v1 = glmsg.add_args();
   11702     arg_v1->set_isarray(false);
   11703     arg_v1->set_type(GLMessage::DataType::FLOAT);
   11704     arg_v1->add_floatvalue(v1);
   11705 
   11706     // copy argument v2
   11707     GLMessage_DataType *arg_v2 = glmsg.add_args();
   11708     arg_v2->set_isarray(false);
   11709     arg_v2->set_type(GLMessage::DataType::FLOAT);
   11710     arg_v2->add_floatvalue(v2);
   11711 
   11712     // copy argument v3
   11713     GLMessage_DataType *arg_v3 = glmsg.add_args();
   11714     arg_v3->set_isarray(false);
   11715     arg_v3->set_type(GLMessage::DataType::FLOAT);
   11716     arg_v3->add_floatvalue(v3);
   11717 
   11718     // call function
   11719     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11720     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11721     glContext->hooks->gl.glProgramUniform4f(program, location, v0, v1, v2, v3);
   11722     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11723     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11724 
   11725     void *pointerArgs[] = {
   11726     };
   11727 
   11728     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11729                               threadStartTime, threadEndTime,
   11730                               &glmsg, pointerArgs);
   11731     glContext->traceGLMessage(&glmsg);
   11732 }
   11733 
   11734 void GLTrace_glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint * value) {
   11735     GLMessage glmsg;
   11736     GLTraceContext *glContext = getGLTraceContext();
   11737 
   11738     glmsg.set_function(GLMessage::glProgramUniform1iv);
   11739 
   11740     // copy argument program
   11741     GLMessage_DataType *arg_program = glmsg.add_args();
   11742     arg_program->set_isarray(false);
   11743     arg_program->set_type(GLMessage::DataType::INT);
   11744     arg_program->add_intvalue(program);
   11745 
   11746     // copy argument location
   11747     GLMessage_DataType *arg_location = glmsg.add_args();
   11748     arg_location->set_isarray(false);
   11749     arg_location->set_type(GLMessage::DataType::INT);
   11750     arg_location->add_intvalue(location);
   11751 
   11752     // copy argument count
   11753     GLMessage_DataType *arg_count = glmsg.add_args();
   11754     arg_count->set_isarray(false);
   11755     arg_count->set_type(GLMessage::DataType::INT);
   11756     arg_count->add_intvalue(count);
   11757 
   11758     // copy argument value
   11759     GLMessage_DataType *arg_value = glmsg.add_args();
   11760     arg_value->set_isarray(false);
   11761     arg_value->set_type(GLMessage::DataType::INT64);
   11762     arg_value->add_int64value((uintptr_t)value);
   11763 
   11764     // call function
   11765     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11766     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11767     glContext->hooks->gl.glProgramUniform1iv(program, location, count, value);
   11768     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11769     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11770 
   11771     void *pointerArgs[] = {
   11772         (void *) value,
   11773     };
   11774 
   11775     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11776                               threadStartTime, threadEndTime,
   11777                               &glmsg, pointerArgs);
   11778     glContext->traceGLMessage(&glmsg);
   11779 }
   11780 
   11781 void GLTrace_glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint * value) {
   11782     GLMessage glmsg;
   11783     GLTraceContext *glContext = getGLTraceContext();
   11784 
   11785     glmsg.set_function(GLMessage::glProgramUniform2iv);
   11786 
   11787     // copy argument program
   11788     GLMessage_DataType *arg_program = glmsg.add_args();
   11789     arg_program->set_isarray(false);
   11790     arg_program->set_type(GLMessage::DataType::INT);
   11791     arg_program->add_intvalue(program);
   11792 
   11793     // copy argument location
   11794     GLMessage_DataType *arg_location = glmsg.add_args();
   11795     arg_location->set_isarray(false);
   11796     arg_location->set_type(GLMessage::DataType::INT);
   11797     arg_location->add_intvalue(location);
   11798 
   11799     // copy argument count
   11800     GLMessage_DataType *arg_count = glmsg.add_args();
   11801     arg_count->set_isarray(false);
   11802     arg_count->set_type(GLMessage::DataType::INT);
   11803     arg_count->add_intvalue(count);
   11804 
   11805     // copy argument value
   11806     GLMessage_DataType *arg_value = glmsg.add_args();
   11807     arg_value->set_isarray(false);
   11808     arg_value->set_type(GLMessage::DataType::INT64);
   11809     arg_value->add_int64value((uintptr_t)value);
   11810 
   11811     // call function
   11812     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11813     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11814     glContext->hooks->gl.glProgramUniform2iv(program, location, count, value);
   11815     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11816     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11817 
   11818     void *pointerArgs[] = {
   11819         (void *) value,
   11820     };
   11821 
   11822     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11823                               threadStartTime, threadEndTime,
   11824                               &glmsg, pointerArgs);
   11825     glContext->traceGLMessage(&glmsg);
   11826 }
   11827 
   11828 void GLTrace_glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint * value) {
   11829     GLMessage glmsg;
   11830     GLTraceContext *glContext = getGLTraceContext();
   11831 
   11832     glmsg.set_function(GLMessage::glProgramUniform3iv);
   11833 
   11834     // copy argument program
   11835     GLMessage_DataType *arg_program = glmsg.add_args();
   11836     arg_program->set_isarray(false);
   11837     arg_program->set_type(GLMessage::DataType::INT);
   11838     arg_program->add_intvalue(program);
   11839 
   11840     // copy argument location
   11841     GLMessage_DataType *arg_location = glmsg.add_args();
   11842     arg_location->set_isarray(false);
   11843     arg_location->set_type(GLMessage::DataType::INT);
   11844     arg_location->add_intvalue(location);
   11845 
   11846     // copy argument count
   11847     GLMessage_DataType *arg_count = glmsg.add_args();
   11848     arg_count->set_isarray(false);
   11849     arg_count->set_type(GLMessage::DataType::INT);
   11850     arg_count->add_intvalue(count);
   11851 
   11852     // copy argument value
   11853     GLMessage_DataType *arg_value = glmsg.add_args();
   11854     arg_value->set_isarray(false);
   11855     arg_value->set_type(GLMessage::DataType::INT64);
   11856     arg_value->add_int64value((uintptr_t)value);
   11857 
   11858     // call function
   11859     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11860     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11861     glContext->hooks->gl.glProgramUniform3iv(program, location, count, value);
   11862     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11863     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11864 
   11865     void *pointerArgs[] = {
   11866         (void *) value,
   11867     };
   11868 
   11869     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11870                               threadStartTime, threadEndTime,
   11871                               &glmsg, pointerArgs);
   11872     glContext->traceGLMessage(&glmsg);
   11873 }
   11874 
   11875 void GLTrace_glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint * value) {
   11876     GLMessage glmsg;
   11877     GLTraceContext *glContext = getGLTraceContext();
   11878 
   11879     glmsg.set_function(GLMessage::glProgramUniform4iv);
   11880 
   11881     // copy argument program
   11882     GLMessage_DataType *arg_program = glmsg.add_args();
   11883     arg_program->set_isarray(false);
   11884     arg_program->set_type(GLMessage::DataType::INT);
   11885     arg_program->add_intvalue(program);
   11886 
   11887     // copy argument location
   11888     GLMessage_DataType *arg_location = glmsg.add_args();
   11889     arg_location->set_isarray(false);
   11890     arg_location->set_type(GLMessage::DataType::INT);
   11891     arg_location->add_intvalue(location);
   11892 
   11893     // copy argument count
   11894     GLMessage_DataType *arg_count = glmsg.add_args();
   11895     arg_count->set_isarray(false);
   11896     arg_count->set_type(GLMessage::DataType::INT);
   11897     arg_count->add_intvalue(count);
   11898 
   11899     // copy argument value
   11900     GLMessage_DataType *arg_value = glmsg.add_args();
   11901     arg_value->set_isarray(false);
   11902     arg_value->set_type(GLMessage::DataType::INT64);
   11903     arg_value->add_int64value((uintptr_t)value);
   11904 
   11905     // call function
   11906     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11907     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11908     glContext->hooks->gl.glProgramUniform4iv(program, location, count, value);
   11909     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11910     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11911 
   11912     void *pointerArgs[] = {
   11913         (void *) value,
   11914     };
   11915 
   11916     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11917                               threadStartTime, threadEndTime,
   11918                               &glmsg, pointerArgs);
   11919     glContext->traceGLMessage(&glmsg);
   11920 }
   11921 
   11922 void GLTrace_glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {
   11923     GLMessage glmsg;
   11924     GLTraceContext *glContext = getGLTraceContext();
   11925 
   11926     glmsg.set_function(GLMessage::glProgramUniform1uiv);
   11927 
   11928     // copy argument program
   11929     GLMessage_DataType *arg_program = glmsg.add_args();
   11930     arg_program->set_isarray(false);
   11931     arg_program->set_type(GLMessage::DataType::INT);
   11932     arg_program->add_intvalue(program);
   11933 
   11934     // copy argument location
   11935     GLMessage_DataType *arg_location = glmsg.add_args();
   11936     arg_location->set_isarray(false);
   11937     arg_location->set_type(GLMessage::DataType::INT);
   11938     arg_location->add_intvalue(location);
   11939 
   11940     // copy argument count
   11941     GLMessage_DataType *arg_count = glmsg.add_args();
   11942     arg_count->set_isarray(false);
   11943     arg_count->set_type(GLMessage::DataType::INT);
   11944     arg_count->add_intvalue(count);
   11945 
   11946     // copy argument value
   11947     GLMessage_DataType *arg_value = glmsg.add_args();
   11948     arg_value->set_isarray(false);
   11949     arg_value->set_type(GLMessage::DataType::INT64);
   11950     arg_value->add_int64value((uintptr_t)value);
   11951 
   11952     // call function
   11953     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11954     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   11955     glContext->hooks->gl.glProgramUniform1uiv(program, location, count, value);
   11956     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   11957     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   11958 
   11959     void *pointerArgs[] = {
   11960         (void *) value,
   11961     };
   11962 
   11963     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   11964                               threadStartTime, threadEndTime,
   11965                               &glmsg, pointerArgs);
   11966     glContext->traceGLMessage(&glmsg);
   11967 }
   11968 
   11969 void GLTrace_glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {
   11970     GLMessage glmsg;
   11971     GLTraceContext *glContext = getGLTraceContext();
   11972 
   11973     glmsg.set_function(GLMessage::glProgramUniform2uiv);
   11974 
   11975     // copy argument program
   11976     GLMessage_DataType *arg_program = glmsg.add_args();
   11977     arg_program->set_isarray(false);
   11978     arg_program->set_type(GLMessage::DataType::INT);
   11979     arg_program->add_intvalue(program);
   11980 
   11981     // copy argument location
   11982     GLMessage_DataType *arg_location = glmsg.add_args();
   11983     arg_location->set_isarray(false);
   11984     arg_location->set_type(GLMessage::DataType::INT);
   11985     arg_location->add_intvalue(location);
   11986 
   11987     // copy argument count
   11988     GLMessage_DataType *arg_count = glmsg.add_args();
   11989     arg_count->set_isarray(false);
   11990     arg_count->set_type(GLMessage::DataType::INT);
   11991     arg_count->add_intvalue(count);
   11992 
   11993     // copy argument value
   11994     GLMessage_DataType *arg_value = glmsg.add_args();
   11995     arg_value->set_isarray(false);
   11996     arg_value->set_type(GLMessage::DataType::INT64);
   11997     arg_value->add_int64value((uintptr_t)value);
   11998 
   11999     // call function
   12000     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12001     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12002     glContext->hooks->gl.glProgramUniform2uiv(program, location, count, value);
   12003     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12004     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12005 
   12006     void *pointerArgs[] = {
   12007         (void *) value,
   12008     };
   12009 
   12010     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12011                               threadStartTime, threadEndTime,
   12012                               &glmsg, pointerArgs);
   12013     glContext->traceGLMessage(&glmsg);
   12014 }
   12015 
   12016 void GLTrace_glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {
   12017     GLMessage glmsg;
   12018     GLTraceContext *glContext = getGLTraceContext();
   12019 
   12020     glmsg.set_function(GLMessage::glProgramUniform3uiv);
   12021 
   12022     // copy argument program
   12023     GLMessage_DataType *arg_program = glmsg.add_args();
   12024     arg_program->set_isarray(false);
   12025     arg_program->set_type(GLMessage::DataType::INT);
   12026     arg_program->add_intvalue(program);
   12027 
   12028     // copy argument location
   12029     GLMessage_DataType *arg_location = glmsg.add_args();
   12030     arg_location->set_isarray(false);
   12031     arg_location->set_type(GLMessage::DataType::INT);
   12032     arg_location->add_intvalue(location);
   12033 
   12034     // copy argument count
   12035     GLMessage_DataType *arg_count = glmsg.add_args();
   12036     arg_count->set_isarray(false);
   12037     arg_count->set_type(GLMessage::DataType::INT);
   12038     arg_count->add_intvalue(count);
   12039 
   12040     // copy argument value
   12041     GLMessage_DataType *arg_value = glmsg.add_args();
   12042     arg_value->set_isarray(false);
   12043     arg_value->set_type(GLMessage::DataType::INT64);
   12044     arg_value->add_int64value((uintptr_t)value);
   12045 
   12046     // call function
   12047     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12048     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12049     glContext->hooks->gl.glProgramUniform3uiv(program, location, count, value);
   12050     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12051     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12052 
   12053     void *pointerArgs[] = {
   12054         (void *) value,
   12055     };
   12056 
   12057     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12058                               threadStartTime, threadEndTime,
   12059                               &glmsg, pointerArgs);
   12060     glContext->traceGLMessage(&glmsg);
   12061 }
   12062 
   12063 void GLTrace_glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {
   12064     GLMessage glmsg;
   12065     GLTraceContext *glContext = getGLTraceContext();
   12066 
   12067     glmsg.set_function(GLMessage::glProgramUniform4uiv);
   12068 
   12069     // copy argument program
   12070     GLMessage_DataType *arg_program = glmsg.add_args();
   12071     arg_program->set_isarray(false);
   12072     arg_program->set_type(GLMessage::DataType::INT);
   12073     arg_program->add_intvalue(program);
   12074 
   12075     // copy argument location
   12076     GLMessage_DataType *arg_location = glmsg.add_args();
   12077     arg_location->set_isarray(false);
   12078     arg_location->set_type(GLMessage::DataType::INT);
   12079     arg_location->add_intvalue(location);
   12080 
   12081     // copy argument count
   12082     GLMessage_DataType *arg_count = glmsg.add_args();
   12083     arg_count->set_isarray(false);
   12084     arg_count->set_type(GLMessage::DataType::INT);
   12085     arg_count->add_intvalue(count);
   12086 
   12087     // copy argument value
   12088     GLMessage_DataType *arg_value = glmsg.add_args();
   12089     arg_value->set_isarray(false);
   12090     arg_value->set_type(GLMessage::DataType::INT64);
   12091     arg_value->add_int64value((uintptr_t)value);
   12092 
   12093     // call function
   12094     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12095     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12096     glContext->hooks->gl.glProgramUniform4uiv(program, location, count, value);
   12097     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12098     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12099 
   12100     void *pointerArgs[] = {
   12101         (void *) value,
   12102     };
   12103 
   12104     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12105                               threadStartTime, threadEndTime,
   12106                               &glmsg, pointerArgs);
   12107     glContext->traceGLMessage(&glmsg);
   12108 }
   12109 
   12110 void GLTrace_glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
   12111     GLMessage glmsg;
   12112     GLTraceContext *glContext = getGLTraceContext();
   12113 
   12114     glmsg.set_function(GLMessage::glProgramUniform1fv);
   12115 
   12116     // copy argument program
   12117     GLMessage_DataType *arg_program = glmsg.add_args();
   12118     arg_program->set_isarray(false);
   12119     arg_program->set_type(GLMessage::DataType::INT);
   12120     arg_program->add_intvalue(program);
   12121 
   12122     // copy argument location
   12123     GLMessage_DataType *arg_location = glmsg.add_args();
   12124     arg_location->set_isarray(false);
   12125     arg_location->set_type(GLMessage::DataType::INT);
   12126     arg_location->add_intvalue(location);
   12127 
   12128     // copy argument count
   12129     GLMessage_DataType *arg_count = glmsg.add_args();
   12130     arg_count->set_isarray(false);
   12131     arg_count->set_type(GLMessage::DataType::INT);
   12132     arg_count->add_intvalue(count);
   12133 
   12134     // copy argument value
   12135     GLMessage_DataType *arg_value = glmsg.add_args();
   12136     arg_value->set_isarray(false);
   12137     arg_value->set_type(GLMessage::DataType::INT64);
   12138     arg_value->add_int64value((uintptr_t)value);
   12139 
   12140     // call function
   12141     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12142     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12143     glContext->hooks->gl.glProgramUniform1fv(program, location, count, value);
   12144     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12145     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12146 
   12147     void *pointerArgs[] = {
   12148         (void *) value,
   12149     };
   12150 
   12151     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12152                               threadStartTime, threadEndTime,
   12153                               &glmsg, pointerArgs);
   12154     glContext->traceGLMessage(&glmsg);
   12155 }
   12156 
   12157 void GLTrace_glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
   12158     GLMessage glmsg;
   12159     GLTraceContext *glContext = getGLTraceContext();
   12160 
   12161     glmsg.set_function(GLMessage::glProgramUniform2fv);
   12162 
   12163     // copy argument program
   12164     GLMessage_DataType *arg_program = glmsg.add_args();
   12165     arg_program->set_isarray(false);
   12166     arg_program->set_type(GLMessage::DataType::INT);
   12167     arg_program->add_intvalue(program);
   12168 
   12169     // copy argument location
   12170     GLMessage_DataType *arg_location = glmsg.add_args();
   12171     arg_location->set_isarray(false);
   12172     arg_location->set_type(GLMessage::DataType::INT);
   12173     arg_location->add_intvalue(location);
   12174 
   12175     // copy argument count
   12176     GLMessage_DataType *arg_count = glmsg.add_args();
   12177     arg_count->set_isarray(false);
   12178     arg_count->set_type(GLMessage::DataType::INT);
   12179     arg_count->add_intvalue(count);
   12180 
   12181     // copy argument value
   12182     GLMessage_DataType *arg_value = glmsg.add_args();
   12183     arg_value->set_isarray(false);
   12184     arg_value->set_type(GLMessage::DataType::INT64);
   12185     arg_value->add_int64value((uintptr_t)value);
   12186 
   12187     // call function
   12188     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12189     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12190     glContext->hooks->gl.glProgramUniform2fv(program, location, count, value);
   12191     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12192     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12193 
   12194     void *pointerArgs[] = {
   12195         (void *) value,
   12196     };
   12197 
   12198     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12199                               threadStartTime, threadEndTime,
   12200                               &glmsg, pointerArgs);
   12201     glContext->traceGLMessage(&glmsg);
   12202 }
   12203 
   12204 void GLTrace_glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
   12205     GLMessage glmsg;
   12206     GLTraceContext *glContext = getGLTraceContext();
   12207 
   12208     glmsg.set_function(GLMessage::glProgramUniform3fv);
   12209 
   12210     // copy argument program
   12211     GLMessage_DataType *arg_program = glmsg.add_args();
   12212     arg_program->set_isarray(false);
   12213     arg_program->set_type(GLMessage::DataType::INT);
   12214     arg_program->add_intvalue(program);
   12215 
   12216     // copy argument location
   12217     GLMessage_DataType *arg_location = glmsg.add_args();
   12218     arg_location->set_isarray(false);
   12219     arg_location->set_type(GLMessage::DataType::INT);
   12220     arg_location->add_intvalue(location);
   12221 
   12222     // copy argument count
   12223     GLMessage_DataType *arg_count = glmsg.add_args();
   12224     arg_count->set_isarray(false);
   12225     arg_count->set_type(GLMessage::DataType::INT);
   12226     arg_count->add_intvalue(count);
   12227 
   12228     // copy argument value
   12229     GLMessage_DataType *arg_value = glmsg.add_args();
   12230     arg_value->set_isarray(false);
   12231     arg_value->set_type(GLMessage::DataType::INT64);
   12232     arg_value->add_int64value((uintptr_t)value);
   12233 
   12234     // call function
   12235     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12236     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12237     glContext->hooks->gl.glProgramUniform3fv(program, location, count, value);
   12238     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12239     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12240 
   12241     void *pointerArgs[] = {
   12242         (void *) value,
   12243     };
   12244 
   12245     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12246                               threadStartTime, threadEndTime,
   12247                               &glmsg, pointerArgs);
   12248     glContext->traceGLMessage(&glmsg);
   12249 }
   12250 
   12251 void GLTrace_glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
   12252     GLMessage glmsg;
   12253     GLTraceContext *glContext = getGLTraceContext();
   12254 
   12255     glmsg.set_function(GLMessage::glProgramUniform4fv);
   12256 
   12257     // copy argument program
   12258     GLMessage_DataType *arg_program = glmsg.add_args();
   12259     arg_program->set_isarray(false);
   12260     arg_program->set_type(GLMessage::DataType::INT);
   12261     arg_program->add_intvalue(program);
   12262 
   12263     // copy argument location
   12264     GLMessage_DataType *arg_location = glmsg.add_args();
   12265     arg_location->set_isarray(false);
   12266     arg_location->set_type(GLMessage::DataType::INT);
   12267     arg_location->add_intvalue(location);
   12268 
   12269     // copy argument count
   12270     GLMessage_DataType *arg_count = glmsg.add_args();
   12271     arg_count->set_isarray(false);
   12272     arg_count->set_type(GLMessage::DataType::INT);
   12273     arg_count->add_intvalue(count);
   12274 
   12275     // copy argument value
   12276     GLMessage_DataType *arg_value = glmsg.add_args();
   12277     arg_value->set_isarray(false);
   12278     arg_value->set_type(GLMessage::DataType::INT64);
   12279     arg_value->add_int64value((uintptr_t)value);
   12280 
   12281     // call function
   12282     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12283     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12284     glContext->hooks->gl.glProgramUniform4fv(program, location, count, value);
   12285     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12286     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12287 
   12288     void *pointerArgs[] = {
   12289         (void *) value,
   12290     };
   12291 
   12292     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12293                               threadStartTime, threadEndTime,
   12294                               &glmsg, pointerArgs);
   12295     glContext->traceGLMessage(&glmsg);
   12296 }
   12297 
   12298 void GLTrace_glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12299     GLMessage glmsg;
   12300     GLTraceContext *glContext = getGLTraceContext();
   12301 
   12302     glmsg.set_function(GLMessage::glProgramUniformMatrix2fv);
   12303 
   12304     // copy argument program
   12305     GLMessage_DataType *arg_program = glmsg.add_args();
   12306     arg_program->set_isarray(false);
   12307     arg_program->set_type(GLMessage::DataType::INT);
   12308     arg_program->add_intvalue(program);
   12309 
   12310     // copy argument location
   12311     GLMessage_DataType *arg_location = glmsg.add_args();
   12312     arg_location->set_isarray(false);
   12313     arg_location->set_type(GLMessage::DataType::INT);
   12314     arg_location->add_intvalue(location);
   12315 
   12316     // copy argument count
   12317     GLMessage_DataType *arg_count = glmsg.add_args();
   12318     arg_count->set_isarray(false);
   12319     arg_count->set_type(GLMessage::DataType::INT);
   12320     arg_count->add_intvalue(count);
   12321 
   12322     // copy argument transpose
   12323     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12324     arg_transpose->set_isarray(false);
   12325     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12326     arg_transpose->add_boolvalue(transpose);
   12327 
   12328     // copy argument value
   12329     GLMessage_DataType *arg_value = glmsg.add_args();
   12330     arg_value->set_isarray(false);
   12331     arg_value->set_type(GLMessage::DataType::INT64);
   12332     arg_value->add_int64value((uintptr_t)value);
   12333 
   12334     // call function
   12335     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12336     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12337     glContext->hooks->gl.glProgramUniformMatrix2fv(program, location, count, transpose, value);
   12338     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12339     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12340 
   12341     void *pointerArgs[] = {
   12342         (void *) value,
   12343     };
   12344 
   12345     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12346                               threadStartTime, threadEndTime,
   12347                               &glmsg, pointerArgs);
   12348     glContext->traceGLMessage(&glmsg);
   12349 }
   12350 
   12351 void GLTrace_glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12352     GLMessage glmsg;
   12353     GLTraceContext *glContext = getGLTraceContext();
   12354 
   12355     glmsg.set_function(GLMessage::glProgramUniformMatrix3fv);
   12356 
   12357     // copy argument program
   12358     GLMessage_DataType *arg_program = glmsg.add_args();
   12359     arg_program->set_isarray(false);
   12360     arg_program->set_type(GLMessage::DataType::INT);
   12361     arg_program->add_intvalue(program);
   12362 
   12363     // copy argument location
   12364     GLMessage_DataType *arg_location = glmsg.add_args();
   12365     arg_location->set_isarray(false);
   12366     arg_location->set_type(GLMessage::DataType::INT);
   12367     arg_location->add_intvalue(location);
   12368 
   12369     // copy argument count
   12370     GLMessage_DataType *arg_count = glmsg.add_args();
   12371     arg_count->set_isarray(false);
   12372     arg_count->set_type(GLMessage::DataType::INT);
   12373     arg_count->add_intvalue(count);
   12374 
   12375     // copy argument transpose
   12376     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12377     arg_transpose->set_isarray(false);
   12378     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12379     arg_transpose->add_boolvalue(transpose);
   12380 
   12381     // copy argument value
   12382     GLMessage_DataType *arg_value = glmsg.add_args();
   12383     arg_value->set_isarray(false);
   12384     arg_value->set_type(GLMessage::DataType::INT64);
   12385     arg_value->add_int64value((uintptr_t)value);
   12386 
   12387     // call function
   12388     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12389     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12390     glContext->hooks->gl.glProgramUniformMatrix3fv(program, location, count, transpose, value);
   12391     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12392     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12393 
   12394     void *pointerArgs[] = {
   12395         (void *) value,
   12396     };
   12397 
   12398     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12399                               threadStartTime, threadEndTime,
   12400                               &glmsg, pointerArgs);
   12401     glContext->traceGLMessage(&glmsg);
   12402 }
   12403 
   12404 void GLTrace_glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12405     GLMessage glmsg;
   12406     GLTraceContext *glContext = getGLTraceContext();
   12407 
   12408     glmsg.set_function(GLMessage::glProgramUniformMatrix4fv);
   12409 
   12410     // copy argument program
   12411     GLMessage_DataType *arg_program = glmsg.add_args();
   12412     arg_program->set_isarray(false);
   12413     arg_program->set_type(GLMessage::DataType::INT);
   12414     arg_program->add_intvalue(program);
   12415 
   12416     // copy argument location
   12417     GLMessage_DataType *arg_location = glmsg.add_args();
   12418     arg_location->set_isarray(false);
   12419     arg_location->set_type(GLMessage::DataType::INT);
   12420     arg_location->add_intvalue(location);
   12421 
   12422     // copy argument count
   12423     GLMessage_DataType *arg_count = glmsg.add_args();
   12424     arg_count->set_isarray(false);
   12425     arg_count->set_type(GLMessage::DataType::INT);
   12426     arg_count->add_intvalue(count);
   12427 
   12428     // copy argument transpose
   12429     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12430     arg_transpose->set_isarray(false);
   12431     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12432     arg_transpose->add_boolvalue(transpose);
   12433 
   12434     // copy argument value
   12435     GLMessage_DataType *arg_value = glmsg.add_args();
   12436     arg_value->set_isarray(false);
   12437     arg_value->set_type(GLMessage::DataType::INT64);
   12438     arg_value->add_int64value((uintptr_t)value);
   12439 
   12440     // call function
   12441     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12442     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12443     glContext->hooks->gl.glProgramUniformMatrix4fv(program, location, count, transpose, value);
   12444     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12445     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12446 
   12447     void *pointerArgs[] = {
   12448         (void *) value,
   12449     };
   12450 
   12451     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12452                               threadStartTime, threadEndTime,
   12453                               &glmsg, pointerArgs);
   12454     glContext->traceGLMessage(&glmsg);
   12455 }
   12456 
   12457 void GLTrace_glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12458     GLMessage glmsg;
   12459     GLTraceContext *glContext = getGLTraceContext();
   12460 
   12461     glmsg.set_function(GLMessage::glProgramUniformMatrix2x3fv);
   12462 
   12463     // copy argument program
   12464     GLMessage_DataType *arg_program = glmsg.add_args();
   12465     arg_program->set_isarray(false);
   12466     arg_program->set_type(GLMessage::DataType::INT);
   12467     arg_program->add_intvalue(program);
   12468 
   12469     // copy argument location
   12470     GLMessage_DataType *arg_location = glmsg.add_args();
   12471     arg_location->set_isarray(false);
   12472     arg_location->set_type(GLMessage::DataType::INT);
   12473     arg_location->add_intvalue(location);
   12474 
   12475     // copy argument count
   12476     GLMessage_DataType *arg_count = glmsg.add_args();
   12477     arg_count->set_isarray(false);
   12478     arg_count->set_type(GLMessage::DataType::INT);
   12479     arg_count->add_intvalue(count);
   12480 
   12481     // copy argument transpose
   12482     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12483     arg_transpose->set_isarray(false);
   12484     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12485     arg_transpose->add_boolvalue(transpose);
   12486 
   12487     // copy argument value
   12488     GLMessage_DataType *arg_value = glmsg.add_args();
   12489     arg_value->set_isarray(false);
   12490     arg_value->set_type(GLMessage::DataType::INT64);
   12491     arg_value->add_int64value((uintptr_t)value);
   12492 
   12493     // call function
   12494     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12495     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12496     glContext->hooks->gl.glProgramUniformMatrix2x3fv(program, location, count, transpose, value);
   12497     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12498     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12499 
   12500     void *pointerArgs[] = {
   12501         (void *) value,
   12502     };
   12503 
   12504     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12505                               threadStartTime, threadEndTime,
   12506                               &glmsg, pointerArgs);
   12507     glContext->traceGLMessage(&glmsg);
   12508 }
   12509 
   12510 void GLTrace_glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12511     GLMessage glmsg;
   12512     GLTraceContext *glContext = getGLTraceContext();
   12513 
   12514     glmsg.set_function(GLMessage::glProgramUniformMatrix3x2fv);
   12515 
   12516     // copy argument program
   12517     GLMessage_DataType *arg_program = glmsg.add_args();
   12518     arg_program->set_isarray(false);
   12519     arg_program->set_type(GLMessage::DataType::INT);
   12520     arg_program->add_intvalue(program);
   12521 
   12522     // copy argument location
   12523     GLMessage_DataType *arg_location = glmsg.add_args();
   12524     arg_location->set_isarray(false);
   12525     arg_location->set_type(GLMessage::DataType::INT);
   12526     arg_location->add_intvalue(location);
   12527 
   12528     // copy argument count
   12529     GLMessage_DataType *arg_count = glmsg.add_args();
   12530     arg_count->set_isarray(false);
   12531     arg_count->set_type(GLMessage::DataType::INT);
   12532     arg_count->add_intvalue(count);
   12533 
   12534     // copy argument transpose
   12535     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12536     arg_transpose->set_isarray(false);
   12537     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12538     arg_transpose->add_boolvalue(transpose);
   12539 
   12540     // copy argument value
   12541     GLMessage_DataType *arg_value = glmsg.add_args();
   12542     arg_value->set_isarray(false);
   12543     arg_value->set_type(GLMessage::DataType::INT64);
   12544     arg_value->add_int64value((uintptr_t)value);
   12545 
   12546     // call function
   12547     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12548     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12549     glContext->hooks->gl.glProgramUniformMatrix3x2fv(program, location, count, transpose, value);
   12550     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12551     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12552 
   12553     void *pointerArgs[] = {
   12554         (void *) value,
   12555     };
   12556 
   12557     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12558                               threadStartTime, threadEndTime,
   12559                               &glmsg, pointerArgs);
   12560     glContext->traceGLMessage(&glmsg);
   12561 }
   12562 
   12563 void GLTrace_glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12564     GLMessage glmsg;
   12565     GLTraceContext *glContext = getGLTraceContext();
   12566 
   12567     glmsg.set_function(GLMessage::glProgramUniformMatrix2x4fv);
   12568 
   12569     // copy argument program
   12570     GLMessage_DataType *arg_program = glmsg.add_args();
   12571     arg_program->set_isarray(false);
   12572     arg_program->set_type(GLMessage::DataType::INT);
   12573     arg_program->add_intvalue(program);
   12574 
   12575     // copy argument location
   12576     GLMessage_DataType *arg_location = glmsg.add_args();
   12577     arg_location->set_isarray(false);
   12578     arg_location->set_type(GLMessage::DataType::INT);
   12579     arg_location->add_intvalue(location);
   12580 
   12581     // copy argument count
   12582     GLMessage_DataType *arg_count = glmsg.add_args();
   12583     arg_count->set_isarray(false);
   12584     arg_count->set_type(GLMessage::DataType::INT);
   12585     arg_count->add_intvalue(count);
   12586 
   12587     // copy argument transpose
   12588     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12589     arg_transpose->set_isarray(false);
   12590     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12591     arg_transpose->add_boolvalue(transpose);
   12592 
   12593     // copy argument value
   12594     GLMessage_DataType *arg_value = glmsg.add_args();
   12595     arg_value->set_isarray(false);
   12596     arg_value->set_type(GLMessage::DataType::INT64);
   12597     arg_value->add_int64value((uintptr_t)value);
   12598 
   12599     // call function
   12600     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12601     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12602     glContext->hooks->gl.glProgramUniformMatrix2x4fv(program, location, count, transpose, value);
   12603     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12604     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12605 
   12606     void *pointerArgs[] = {
   12607         (void *) value,
   12608     };
   12609 
   12610     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12611                               threadStartTime, threadEndTime,
   12612                               &glmsg, pointerArgs);
   12613     glContext->traceGLMessage(&glmsg);
   12614 }
   12615 
   12616 void GLTrace_glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12617     GLMessage glmsg;
   12618     GLTraceContext *glContext = getGLTraceContext();
   12619 
   12620     glmsg.set_function(GLMessage::glProgramUniformMatrix4x2fv);
   12621 
   12622     // copy argument program
   12623     GLMessage_DataType *arg_program = glmsg.add_args();
   12624     arg_program->set_isarray(false);
   12625     arg_program->set_type(GLMessage::DataType::INT);
   12626     arg_program->add_intvalue(program);
   12627 
   12628     // copy argument location
   12629     GLMessage_DataType *arg_location = glmsg.add_args();
   12630     arg_location->set_isarray(false);
   12631     arg_location->set_type(GLMessage::DataType::INT);
   12632     arg_location->add_intvalue(location);
   12633 
   12634     // copy argument count
   12635     GLMessage_DataType *arg_count = glmsg.add_args();
   12636     arg_count->set_isarray(false);
   12637     arg_count->set_type(GLMessage::DataType::INT);
   12638     arg_count->add_intvalue(count);
   12639 
   12640     // copy argument transpose
   12641     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12642     arg_transpose->set_isarray(false);
   12643     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12644     arg_transpose->add_boolvalue(transpose);
   12645 
   12646     // copy argument value
   12647     GLMessage_DataType *arg_value = glmsg.add_args();
   12648     arg_value->set_isarray(false);
   12649     arg_value->set_type(GLMessage::DataType::INT64);
   12650     arg_value->add_int64value((uintptr_t)value);
   12651 
   12652     // call function
   12653     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12654     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12655     glContext->hooks->gl.glProgramUniformMatrix4x2fv(program, location, count, transpose, value);
   12656     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12657     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12658 
   12659     void *pointerArgs[] = {
   12660         (void *) value,
   12661     };
   12662 
   12663     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12664                               threadStartTime, threadEndTime,
   12665                               &glmsg, pointerArgs);
   12666     glContext->traceGLMessage(&glmsg);
   12667 }
   12668 
   12669 void GLTrace_glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12670     GLMessage glmsg;
   12671     GLTraceContext *glContext = getGLTraceContext();
   12672 
   12673     glmsg.set_function(GLMessage::glProgramUniformMatrix3x4fv);
   12674 
   12675     // copy argument program
   12676     GLMessage_DataType *arg_program = glmsg.add_args();
   12677     arg_program->set_isarray(false);
   12678     arg_program->set_type(GLMessage::DataType::INT);
   12679     arg_program->add_intvalue(program);
   12680 
   12681     // copy argument location
   12682     GLMessage_DataType *arg_location = glmsg.add_args();
   12683     arg_location->set_isarray(false);
   12684     arg_location->set_type(GLMessage::DataType::INT);
   12685     arg_location->add_intvalue(location);
   12686 
   12687     // copy argument count
   12688     GLMessage_DataType *arg_count = glmsg.add_args();
   12689     arg_count->set_isarray(false);
   12690     arg_count->set_type(GLMessage::DataType::INT);
   12691     arg_count->add_intvalue(count);
   12692 
   12693     // copy argument transpose
   12694     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12695     arg_transpose->set_isarray(false);
   12696     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12697     arg_transpose->add_boolvalue(transpose);
   12698 
   12699     // copy argument value
   12700     GLMessage_DataType *arg_value = glmsg.add_args();
   12701     arg_value->set_isarray(false);
   12702     arg_value->set_type(GLMessage::DataType::INT64);
   12703     arg_value->add_int64value((uintptr_t)value);
   12704 
   12705     // call function
   12706     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12707     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12708     glContext->hooks->gl.glProgramUniformMatrix3x4fv(program, location, count, transpose, value);
   12709     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12710     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12711 
   12712     void *pointerArgs[] = {
   12713         (void *) value,
   12714     };
   12715 
   12716     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12717                               threadStartTime, threadEndTime,
   12718                               &glmsg, pointerArgs);
   12719     glContext->traceGLMessage(&glmsg);
   12720 }
   12721 
   12722 void GLTrace_glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
   12723     GLMessage glmsg;
   12724     GLTraceContext *glContext = getGLTraceContext();
   12725 
   12726     glmsg.set_function(GLMessage::glProgramUniformMatrix4x3fv);
   12727 
   12728     // copy argument program
   12729     GLMessage_DataType *arg_program = glmsg.add_args();
   12730     arg_program->set_isarray(false);
   12731     arg_program->set_type(GLMessage::DataType::INT);
   12732     arg_program->add_intvalue(program);
   12733 
   12734     // copy argument location
   12735     GLMessage_DataType *arg_location = glmsg.add_args();
   12736     arg_location->set_isarray(false);
   12737     arg_location->set_type(GLMessage::DataType::INT);
   12738     arg_location->add_intvalue(location);
   12739 
   12740     // copy argument count
   12741     GLMessage_DataType *arg_count = glmsg.add_args();
   12742     arg_count->set_isarray(false);
   12743     arg_count->set_type(GLMessage::DataType::INT);
   12744     arg_count->add_intvalue(count);
   12745 
   12746     // copy argument transpose
   12747     GLMessage_DataType *arg_transpose = glmsg.add_args();
   12748     arg_transpose->set_isarray(false);
   12749     arg_transpose->set_type(GLMessage::DataType::BOOL);
   12750     arg_transpose->add_boolvalue(transpose);
   12751 
   12752     // copy argument value
   12753     GLMessage_DataType *arg_value = glmsg.add_args();
   12754     arg_value->set_isarray(false);
   12755     arg_value->set_type(GLMessage::DataType::INT64);
   12756     arg_value->add_int64value((uintptr_t)value);
   12757 
   12758     // call function
   12759     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12760     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12761     glContext->hooks->gl.glProgramUniformMatrix4x3fv(program, location, count, transpose, value);
   12762     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12763     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12764 
   12765     void *pointerArgs[] = {
   12766         (void *) value,
   12767     };
   12768 
   12769     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12770                               threadStartTime, threadEndTime,
   12771                               &glmsg, pointerArgs);
   12772     glContext->traceGLMessage(&glmsg);
   12773 }
   12774 
   12775 void GLTrace_glValidateProgramPipeline(GLuint pipeline) {
   12776     GLMessage glmsg;
   12777     GLTraceContext *glContext = getGLTraceContext();
   12778 
   12779     glmsg.set_function(GLMessage::glValidateProgramPipeline);
   12780 
   12781     // copy argument pipeline
   12782     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   12783     arg_pipeline->set_isarray(false);
   12784     arg_pipeline->set_type(GLMessage::DataType::INT);
   12785     arg_pipeline->add_intvalue(pipeline);
   12786 
   12787     // call function
   12788     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12789     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12790     glContext->hooks->gl.glValidateProgramPipeline(pipeline);
   12791     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12792     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12793 
   12794     void *pointerArgs[] = {
   12795     };
   12796 
   12797     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12798                               threadStartTime, threadEndTime,
   12799                               &glmsg, pointerArgs);
   12800     glContext->traceGLMessage(&glmsg);
   12801 }
   12802 
   12803 void GLTrace_glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {
   12804     GLMessage glmsg;
   12805     GLTraceContext *glContext = getGLTraceContext();
   12806 
   12807     glmsg.set_function(GLMessage::glGetProgramPipelineInfoLog);
   12808 
   12809     // copy argument pipeline
   12810     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   12811     arg_pipeline->set_isarray(false);
   12812     arg_pipeline->set_type(GLMessage::DataType::INT);
   12813     arg_pipeline->add_intvalue(pipeline);
   12814 
   12815     // copy argument bufSize
   12816     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   12817     arg_bufSize->set_isarray(false);
   12818     arg_bufSize->set_type(GLMessage::DataType::INT);
   12819     arg_bufSize->add_intvalue(bufSize);
   12820 
   12821     // copy argument length
   12822     GLMessage_DataType *arg_length = glmsg.add_args();
   12823     arg_length->set_isarray(false);
   12824     arg_length->set_type(GLMessage::DataType::INT64);
   12825     arg_length->add_int64value((uintptr_t)length);
   12826 
   12827     // copy argument infoLog
   12828     GLMessage_DataType *arg_infoLog = glmsg.add_args();
   12829     arg_infoLog->set_isarray(false);
   12830     arg_infoLog->set_type(GLMessage::DataType::INT64);
   12831     arg_infoLog->add_int64value((uintptr_t)infoLog);
   12832 
   12833     // call function
   12834     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12835     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12836     glContext->hooks->gl.glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
   12837     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12838     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12839 
   12840     void *pointerArgs[] = {
   12841         (void *) length,
   12842         (void *) infoLog,
   12843     };
   12844 
   12845     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12846                               threadStartTime, threadEndTime,
   12847                               &glmsg, pointerArgs);
   12848     glContext->traceGLMessage(&glmsg);
   12849 }
   12850 
   12851 void GLTrace_glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) {
   12852     GLMessage glmsg;
   12853     GLTraceContext *glContext = getGLTraceContext();
   12854 
   12855     glmsg.set_function(GLMessage::glBindImageTexture);
   12856 
   12857     // copy argument unit
   12858     GLMessage_DataType *arg_unit = glmsg.add_args();
   12859     arg_unit->set_isarray(false);
   12860     arg_unit->set_type(GLMessage::DataType::INT);
   12861     arg_unit->add_intvalue(unit);
   12862 
   12863     // copy argument texture
   12864     GLMessage_DataType *arg_texture = glmsg.add_args();
   12865     arg_texture->set_isarray(false);
   12866     arg_texture->set_type(GLMessage::DataType::INT);
   12867     arg_texture->add_intvalue(texture);
   12868 
   12869     // copy argument level
   12870     GLMessage_DataType *arg_level = glmsg.add_args();
   12871     arg_level->set_isarray(false);
   12872     arg_level->set_type(GLMessage::DataType::INT);
   12873     arg_level->add_intvalue(level);
   12874 
   12875     // copy argument layered
   12876     GLMessage_DataType *arg_layered = glmsg.add_args();
   12877     arg_layered->set_isarray(false);
   12878     arg_layered->set_type(GLMessage::DataType::BOOL);
   12879     arg_layered->add_boolvalue(layered);
   12880 
   12881     // copy argument layer
   12882     GLMessage_DataType *arg_layer = glmsg.add_args();
   12883     arg_layer->set_isarray(false);
   12884     arg_layer->set_type(GLMessage::DataType::INT);
   12885     arg_layer->add_intvalue(layer);
   12886 
   12887     // copy argument access
   12888     GLMessage_DataType *arg_access = glmsg.add_args();
   12889     arg_access->set_isarray(false);
   12890     arg_access->set_type(GLMessage::DataType::ENUM);
   12891     arg_access->add_intvalue((int)access);
   12892 
   12893     // copy argument format
   12894     GLMessage_DataType *arg_format = glmsg.add_args();
   12895     arg_format->set_isarray(false);
   12896     arg_format->set_type(GLMessage::DataType::ENUM);
   12897     arg_format->add_intvalue((int)format);
   12898 
   12899     // call function
   12900     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12901     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12902     glContext->hooks->gl.glBindImageTexture(unit, texture, level, layered, layer, access, format);
   12903     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12904     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12905 
   12906     void *pointerArgs[] = {
   12907     };
   12908 
   12909     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12910                               threadStartTime, threadEndTime,
   12911                               &glmsg, pointerArgs);
   12912     glContext->traceGLMessage(&glmsg);
   12913 }
   12914 
   12915 void GLTrace_glGetBooleani_v(GLenum target, GLuint index, GLboolean * data) {
   12916     GLMessage glmsg;
   12917     GLTraceContext *glContext = getGLTraceContext();
   12918 
   12919     glmsg.set_function(GLMessage::glGetBooleani_v);
   12920 
   12921     // copy argument target
   12922     GLMessage_DataType *arg_target = glmsg.add_args();
   12923     arg_target->set_isarray(false);
   12924     arg_target->set_type(GLMessage::DataType::ENUM);
   12925     arg_target->add_intvalue((int)target);
   12926 
   12927     // copy argument index
   12928     GLMessage_DataType *arg_index = glmsg.add_args();
   12929     arg_index->set_isarray(false);
   12930     arg_index->set_type(GLMessage::DataType::INT);
   12931     arg_index->add_intvalue(index);
   12932 
   12933     // copy argument data
   12934     GLMessage_DataType *arg_data = glmsg.add_args();
   12935     arg_data->set_isarray(false);
   12936     arg_data->set_type(GLMessage::DataType::INT64);
   12937     arg_data->add_int64value((uintptr_t)data);
   12938 
   12939     // call function
   12940     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12941     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12942     glContext->hooks->gl.glGetBooleani_v(target, index, data);
   12943     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12944     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12945 
   12946     void *pointerArgs[] = {
   12947         (void *) data,
   12948     };
   12949 
   12950     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12951                               threadStartTime, threadEndTime,
   12952                               &glmsg, pointerArgs);
   12953     glContext->traceGLMessage(&glmsg);
   12954 }
   12955 
   12956 void GLTrace_glMemoryBarrier(GLbitfield barriers) {
   12957     GLMessage glmsg;
   12958     GLTraceContext *glContext = getGLTraceContext();
   12959 
   12960     glmsg.set_function(GLMessage::glMemoryBarrier);
   12961 
   12962     // copy argument barriers
   12963     GLMessage_DataType *arg_barriers = glmsg.add_args();
   12964     arg_barriers->set_isarray(false);
   12965     arg_barriers->set_type(GLMessage::DataType::INT);
   12966     arg_barriers->add_intvalue(barriers);
   12967 
   12968     // call function
   12969     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12970     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12971     glContext->hooks->gl.glMemoryBarrier(barriers);
   12972     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   12973     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12974 
   12975     void *pointerArgs[] = {
   12976     };
   12977 
   12978     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   12979                               threadStartTime, threadEndTime,
   12980                               &glmsg, pointerArgs);
   12981     glContext->traceGLMessage(&glmsg);
   12982 }
   12983 
   12984 void GLTrace_glMemoryBarrierByRegion(GLbitfield barriers) {
   12985     GLMessage glmsg;
   12986     GLTraceContext *glContext = getGLTraceContext();
   12987 
   12988     glmsg.set_function(GLMessage::glMemoryBarrierByRegion);
   12989 
   12990     // copy argument barriers
   12991     GLMessage_DataType *arg_barriers = glmsg.add_args();
   12992     arg_barriers->set_isarray(false);
   12993     arg_barriers->set_type(GLMessage::DataType::INT);
   12994     arg_barriers->add_intvalue(barriers);
   12995 
   12996     // call function
   12997     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   12998     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   12999     glContext->hooks->gl.glMemoryBarrierByRegion(barriers);
   13000     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13001     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13002 
   13003     void *pointerArgs[] = {
   13004     };
   13005 
   13006     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13007                               threadStartTime, threadEndTime,
   13008                               &glmsg, pointerArgs);
   13009     glContext->traceGLMessage(&glmsg);
   13010 }
   13011 
   13012 void GLTrace_glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) {
   13013     GLMessage glmsg;
   13014     GLTraceContext *glContext = getGLTraceContext();
   13015 
   13016     glmsg.set_function(GLMessage::glTexStorage2DMultisample);
   13017 
   13018     // copy argument target
   13019     GLMessage_DataType *arg_target = glmsg.add_args();
   13020     arg_target->set_isarray(false);
   13021     arg_target->set_type(GLMessage::DataType::ENUM);
   13022     arg_target->add_intvalue((int)target);
   13023 
   13024     // copy argument samples
   13025     GLMessage_DataType *arg_samples = glmsg.add_args();
   13026     arg_samples->set_isarray(false);
   13027     arg_samples->set_type(GLMessage::DataType::INT);
   13028     arg_samples->add_intvalue(samples);
   13029 
   13030     // copy argument internalformat
   13031     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   13032     arg_internalformat->set_isarray(false);
   13033     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   13034     arg_internalformat->add_intvalue((int)internalformat);
   13035 
   13036     // copy argument width
   13037     GLMessage_DataType *arg_width = glmsg.add_args();
   13038     arg_width->set_isarray(false);
   13039     arg_width->set_type(GLMessage::DataType::INT);
   13040     arg_width->add_intvalue(width);
   13041 
   13042     // copy argument height
   13043     GLMessage_DataType *arg_height = glmsg.add_args();
   13044     arg_height->set_isarray(false);
   13045     arg_height->set_type(GLMessage::DataType::INT);
   13046     arg_height->add_intvalue(height);
   13047 
   13048     // copy argument fixedsamplelocations
   13049     GLMessage_DataType *arg_fixedsamplelocations = glmsg.add_args();
   13050     arg_fixedsamplelocations->set_isarray(false);
   13051     arg_fixedsamplelocations->set_type(GLMessage::DataType::BOOL);
   13052     arg_fixedsamplelocations->add_boolvalue(fixedsamplelocations);
   13053 
   13054     // call function
   13055     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13056     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13057     glContext->hooks->gl.glTexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
   13058     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13059     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13060 
   13061     void *pointerArgs[] = {
   13062     };
   13063 
   13064     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13065                               threadStartTime, threadEndTime,
   13066                               &glmsg, pointerArgs);
   13067     glContext->traceGLMessage(&glmsg);
   13068 }
   13069 
   13070 void GLTrace_glGetMultisamplefv(GLenum pname, GLuint index, GLfloat * val) {
   13071     GLMessage glmsg;
   13072     GLTraceContext *glContext = getGLTraceContext();
   13073 
   13074     glmsg.set_function(GLMessage::glGetMultisamplefv);
   13075 
   13076     // copy argument pname
   13077     GLMessage_DataType *arg_pname = glmsg.add_args();
   13078     arg_pname->set_isarray(false);
   13079     arg_pname->set_type(GLMessage::DataType::ENUM);
   13080     arg_pname->add_intvalue((int)pname);
   13081 
   13082     // copy argument index
   13083     GLMessage_DataType *arg_index = glmsg.add_args();
   13084     arg_index->set_isarray(false);
   13085     arg_index->set_type(GLMessage::DataType::INT);
   13086     arg_index->add_intvalue(index);
   13087 
   13088     // copy argument val
   13089     GLMessage_DataType *arg_val = glmsg.add_args();
   13090     arg_val->set_isarray(false);
   13091     arg_val->set_type(GLMessage::DataType::INT64);
   13092     arg_val->add_int64value((uintptr_t)val);
   13093 
   13094     // call function
   13095     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13096     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13097     glContext->hooks->gl.glGetMultisamplefv(pname, index, val);
   13098     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13099     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13100 
   13101     void *pointerArgs[] = {
   13102         (void *) val,
   13103     };
   13104 
   13105     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13106                               threadStartTime, threadEndTime,
   13107                               &glmsg, pointerArgs);
   13108     glContext->traceGLMessage(&glmsg);
   13109 }
   13110 
   13111 void GLTrace_glSampleMaski(GLuint maskNumber, GLbitfield mask) {
   13112     GLMessage glmsg;
   13113     GLTraceContext *glContext = getGLTraceContext();
   13114 
   13115     glmsg.set_function(GLMessage::glSampleMaski);
   13116 
   13117     // copy argument maskNumber
   13118     GLMessage_DataType *arg_maskNumber = glmsg.add_args();
   13119     arg_maskNumber->set_isarray(false);
   13120     arg_maskNumber->set_type(GLMessage::DataType::INT);
   13121     arg_maskNumber->add_intvalue(maskNumber);
   13122 
   13123     // copy argument mask
   13124     GLMessage_DataType *arg_mask = glmsg.add_args();
   13125     arg_mask->set_isarray(false);
   13126     arg_mask->set_type(GLMessage::DataType::INT);
   13127     arg_mask->add_intvalue(mask);
   13128 
   13129     // call function
   13130     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13131     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13132     glContext->hooks->gl.glSampleMaski(maskNumber, mask);
   13133     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13134     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13135 
   13136     void *pointerArgs[] = {
   13137     };
   13138 
   13139     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13140                               threadStartTime, threadEndTime,
   13141                               &glmsg, pointerArgs);
   13142     glContext->traceGLMessage(&glmsg);
   13143 }
   13144 
   13145 void GLTrace_glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint * params) {
   13146     GLMessage glmsg;
   13147     GLTraceContext *glContext = getGLTraceContext();
   13148 
   13149     glmsg.set_function(GLMessage::glGetTexLevelParameteriv);
   13150 
   13151     // copy argument target
   13152     GLMessage_DataType *arg_target = glmsg.add_args();
   13153     arg_target->set_isarray(false);
   13154     arg_target->set_type(GLMessage::DataType::ENUM);
   13155     arg_target->add_intvalue((int)target);
   13156 
   13157     // copy argument level
   13158     GLMessage_DataType *arg_level = glmsg.add_args();
   13159     arg_level->set_isarray(false);
   13160     arg_level->set_type(GLMessage::DataType::INT);
   13161     arg_level->add_intvalue(level);
   13162 
   13163     // copy argument pname
   13164     GLMessage_DataType *arg_pname = glmsg.add_args();
   13165     arg_pname->set_isarray(false);
   13166     arg_pname->set_type(GLMessage::DataType::ENUM);
   13167     arg_pname->add_intvalue((int)pname);
   13168 
   13169     // copy argument params
   13170     GLMessage_DataType *arg_params = glmsg.add_args();
   13171     arg_params->set_isarray(false);
   13172     arg_params->set_type(GLMessage::DataType::INT64);
   13173     arg_params->add_int64value((uintptr_t)params);
   13174 
   13175     // call function
   13176     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13177     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13178     glContext->hooks->gl.glGetTexLevelParameteriv(target, level, pname, params);
   13179     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13180     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13181 
   13182     void *pointerArgs[] = {
   13183         (void *) params,
   13184     };
   13185 
   13186     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13187                               threadStartTime, threadEndTime,
   13188                               &glmsg, pointerArgs);
   13189     glContext->traceGLMessage(&glmsg);
   13190 }
   13191 
   13192 void GLTrace_glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat * params) {
   13193     GLMessage glmsg;
   13194     GLTraceContext *glContext = getGLTraceContext();
   13195 
   13196     glmsg.set_function(GLMessage::glGetTexLevelParameterfv);
   13197 
   13198     // copy argument target
   13199     GLMessage_DataType *arg_target = glmsg.add_args();
   13200     arg_target->set_isarray(false);
   13201     arg_target->set_type(GLMessage::DataType::ENUM);
   13202     arg_target->add_intvalue((int)target);
   13203 
   13204     // copy argument level
   13205     GLMessage_DataType *arg_level = glmsg.add_args();
   13206     arg_level->set_isarray(false);
   13207     arg_level->set_type(GLMessage::DataType::INT);
   13208     arg_level->add_intvalue(level);
   13209 
   13210     // copy argument pname
   13211     GLMessage_DataType *arg_pname = glmsg.add_args();
   13212     arg_pname->set_isarray(false);
   13213     arg_pname->set_type(GLMessage::DataType::ENUM);
   13214     arg_pname->add_intvalue((int)pname);
   13215 
   13216     // copy argument params
   13217     GLMessage_DataType *arg_params = glmsg.add_args();
   13218     arg_params->set_isarray(false);
   13219     arg_params->set_type(GLMessage::DataType::INT64);
   13220     arg_params->add_int64value((uintptr_t)params);
   13221 
   13222     // call function
   13223     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13224     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13225     glContext->hooks->gl.glGetTexLevelParameterfv(target, level, pname, params);
   13226     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13227     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13228 
   13229     void *pointerArgs[] = {
   13230         (void *) params,
   13231     };
   13232 
   13233     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13234                               threadStartTime, threadEndTime,
   13235                               &glmsg, pointerArgs);
   13236     glContext->traceGLMessage(&glmsg);
   13237 }
   13238 
   13239 void GLTrace_glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) {
   13240     GLMessage glmsg;
   13241     GLTraceContext *glContext = getGLTraceContext();
   13242 
   13243     glmsg.set_function(GLMessage::glBindVertexBuffer);
   13244 
   13245     // copy argument bindingindex
   13246     GLMessage_DataType *arg_bindingindex = glmsg.add_args();
   13247     arg_bindingindex->set_isarray(false);
   13248     arg_bindingindex->set_type(GLMessage::DataType::INT);
   13249     arg_bindingindex->add_intvalue(bindingindex);
   13250 
   13251     // copy argument buffer
   13252     GLMessage_DataType *arg_buffer = glmsg.add_args();
   13253     arg_buffer->set_isarray(false);
   13254     arg_buffer->set_type(GLMessage::DataType::INT);
   13255     arg_buffer->add_intvalue(buffer);
   13256 
   13257     // copy argument offset
   13258     GLMessage_DataType *arg_offset = glmsg.add_args();
   13259     arg_offset->set_isarray(false);
   13260     arg_offset->set_type(GLMessage::DataType::INT);
   13261     arg_offset->add_intvalue(offset);
   13262 
   13263     // copy argument stride
   13264     GLMessage_DataType *arg_stride = glmsg.add_args();
   13265     arg_stride->set_isarray(false);
   13266     arg_stride->set_type(GLMessage::DataType::INT);
   13267     arg_stride->add_intvalue(stride);
   13268 
   13269     // call function
   13270     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13271     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13272     glContext->hooks->gl.glBindVertexBuffer(bindingindex, buffer, offset, stride);
   13273     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13274     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13275 
   13276     void *pointerArgs[] = {
   13277     };
   13278 
   13279     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13280                               threadStartTime, threadEndTime,
   13281                               &glmsg, pointerArgs);
   13282     glContext->traceGLMessage(&glmsg);
   13283 }
   13284 
   13285 void GLTrace_glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) {
   13286     GLMessage glmsg;
   13287     GLTraceContext *glContext = getGLTraceContext();
   13288 
   13289     glmsg.set_function(GLMessage::glVertexAttribFormat);
   13290 
   13291     // copy argument attribindex
   13292     GLMessage_DataType *arg_attribindex = glmsg.add_args();
   13293     arg_attribindex->set_isarray(false);
   13294     arg_attribindex->set_type(GLMessage::DataType::INT);
   13295     arg_attribindex->add_intvalue(attribindex);
   13296 
   13297     // copy argument size
   13298     GLMessage_DataType *arg_size = glmsg.add_args();
   13299     arg_size->set_isarray(false);
   13300     arg_size->set_type(GLMessage::DataType::INT);
   13301     arg_size->add_intvalue(size);
   13302 
   13303     // copy argument type
   13304     GLMessage_DataType *arg_type = glmsg.add_args();
   13305     arg_type->set_isarray(false);
   13306     arg_type->set_type(GLMessage::DataType::ENUM);
   13307     arg_type->add_intvalue((int)type);
   13308 
   13309     // copy argument normalized
   13310     GLMessage_DataType *arg_normalized = glmsg.add_args();
   13311     arg_normalized->set_isarray(false);
   13312     arg_normalized->set_type(GLMessage::DataType::BOOL);
   13313     arg_normalized->add_boolvalue(normalized);
   13314 
   13315     // copy argument relativeoffset
   13316     GLMessage_DataType *arg_relativeoffset = glmsg.add_args();
   13317     arg_relativeoffset->set_isarray(false);
   13318     arg_relativeoffset->set_type(GLMessage::DataType::INT);
   13319     arg_relativeoffset->add_intvalue(relativeoffset);
   13320 
   13321     // call function
   13322     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13323     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13324     glContext->hooks->gl.glVertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
   13325     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13326     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13327 
   13328     void *pointerArgs[] = {
   13329     };
   13330 
   13331     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13332                               threadStartTime, threadEndTime,
   13333                               &glmsg, pointerArgs);
   13334     glContext->traceGLMessage(&glmsg);
   13335 }
   13336 
   13337 void GLTrace_glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) {
   13338     GLMessage glmsg;
   13339     GLTraceContext *glContext = getGLTraceContext();
   13340 
   13341     glmsg.set_function(GLMessage::glVertexAttribIFormat);
   13342 
   13343     // copy argument attribindex
   13344     GLMessage_DataType *arg_attribindex = glmsg.add_args();
   13345     arg_attribindex->set_isarray(false);
   13346     arg_attribindex->set_type(GLMessage::DataType::INT);
   13347     arg_attribindex->add_intvalue(attribindex);
   13348 
   13349     // copy argument size
   13350     GLMessage_DataType *arg_size = glmsg.add_args();
   13351     arg_size->set_isarray(false);
   13352     arg_size->set_type(GLMessage::DataType::INT);
   13353     arg_size->add_intvalue(size);
   13354 
   13355     // copy argument type
   13356     GLMessage_DataType *arg_type = glmsg.add_args();
   13357     arg_type->set_isarray(false);
   13358     arg_type->set_type(GLMessage::DataType::ENUM);
   13359     arg_type->add_intvalue((int)type);
   13360 
   13361     // copy argument relativeoffset
   13362     GLMessage_DataType *arg_relativeoffset = glmsg.add_args();
   13363     arg_relativeoffset->set_isarray(false);
   13364     arg_relativeoffset->set_type(GLMessage::DataType::INT);
   13365     arg_relativeoffset->add_intvalue(relativeoffset);
   13366 
   13367     // call function
   13368     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13369     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13370     glContext->hooks->gl.glVertexAttribIFormat(attribindex, size, type, relativeoffset);
   13371     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13372     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13373 
   13374     void *pointerArgs[] = {
   13375     };
   13376 
   13377     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13378                               threadStartTime, threadEndTime,
   13379                               &glmsg, pointerArgs);
   13380     glContext->traceGLMessage(&glmsg);
   13381 }
   13382 
   13383 void GLTrace_glVertexAttribBinding(GLuint attribindex, GLuint bindingindex) {
   13384     GLMessage glmsg;
   13385     GLTraceContext *glContext = getGLTraceContext();
   13386 
   13387     glmsg.set_function(GLMessage::glVertexAttribBinding);
   13388 
   13389     // copy argument attribindex
   13390     GLMessage_DataType *arg_attribindex = glmsg.add_args();
   13391     arg_attribindex->set_isarray(false);
   13392     arg_attribindex->set_type(GLMessage::DataType::INT);
   13393     arg_attribindex->add_intvalue(attribindex);
   13394 
   13395     // copy argument bindingindex
   13396     GLMessage_DataType *arg_bindingindex = glmsg.add_args();
   13397     arg_bindingindex->set_isarray(false);
   13398     arg_bindingindex->set_type(GLMessage::DataType::INT);
   13399     arg_bindingindex->add_intvalue(bindingindex);
   13400 
   13401     // call function
   13402     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13403     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13404     glContext->hooks->gl.glVertexAttribBinding(attribindex, bindingindex);
   13405     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13406     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13407 
   13408     void *pointerArgs[] = {
   13409     };
   13410 
   13411     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13412                               threadStartTime, threadEndTime,
   13413                               &glmsg, pointerArgs);
   13414     glContext->traceGLMessage(&glmsg);
   13415 }
   13416 
   13417 void GLTrace_glVertexBindingDivisor(GLuint bindingindex, GLuint divisor) {
   13418     GLMessage glmsg;
   13419     GLTraceContext *glContext = getGLTraceContext();
   13420 
   13421     glmsg.set_function(GLMessage::glVertexBindingDivisor);
   13422 
   13423     // copy argument bindingindex
   13424     GLMessage_DataType *arg_bindingindex = glmsg.add_args();
   13425     arg_bindingindex->set_isarray(false);
   13426     arg_bindingindex->set_type(GLMessage::DataType::INT);
   13427     arg_bindingindex->add_intvalue(bindingindex);
   13428 
   13429     // copy argument divisor
   13430     GLMessage_DataType *arg_divisor = glmsg.add_args();
   13431     arg_divisor->set_isarray(false);
   13432     arg_divisor->set_type(GLMessage::DataType::INT);
   13433     arg_divisor->add_intvalue(divisor);
   13434 
   13435     // call function
   13436     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13437     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13438     glContext->hooks->gl.glVertexBindingDivisor(bindingindex, divisor);
   13439     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13440     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13441 
   13442     void *pointerArgs[] = {
   13443     };
   13444 
   13445     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13446                               threadStartTime, threadEndTime,
   13447                               &glmsg, pointerArgs);
   13448     glContext->traceGLMessage(&glmsg);
   13449 }
   13450 
   13451 
   13452 // Definitions for GL2Ext APIs
   13453 
   13454 void GLTrace_glBlendBarrierKHR(void) {
   13455     GLMessage glmsg;
   13456     GLTraceContext *glContext = getGLTraceContext();
   13457 
   13458     glmsg.set_function(GLMessage::glBlendBarrierKHR);
   13459 
   13460     // call function
   13461     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13462     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13463     glContext->hooks->gl.glBlendBarrierKHR();
   13464     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13465     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13466 
   13467     void *pointerArgs[] = {
   13468     };
   13469 
   13470     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13471                               threadStartTime, threadEndTime,
   13472                               &glmsg, pointerArgs);
   13473     glContext->traceGLMessage(&glmsg);
   13474 }
   13475 
   13476 void GLTrace_glDebugMessageControlKHR(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled) {
   13477     GLMessage glmsg;
   13478     GLTraceContext *glContext = getGLTraceContext();
   13479 
   13480     glmsg.set_function(GLMessage::glDebugMessageControlKHR);
   13481 
   13482     // copy argument source
   13483     GLMessage_DataType *arg_source = glmsg.add_args();
   13484     arg_source->set_isarray(false);
   13485     arg_source->set_type(GLMessage::DataType::ENUM);
   13486     arg_source->add_intvalue((int)source);
   13487 
   13488     // copy argument type
   13489     GLMessage_DataType *arg_type = glmsg.add_args();
   13490     arg_type->set_isarray(false);
   13491     arg_type->set_type(GLMessage::DataType::ENUM);
   13492     arg_type->add_intvalue((int)type);
   13493 
   13494     // copy argument severity
   13495     GLMessage_DataType *arg_severity = glmsg.add_args();
   13496     arg_severity->set_isarray(false);
   13497     arg_severity->set_type(GLMessage::DataType::ENUM);
   13498     arg_severity->add_intvalue((int)severity);
   13499 
   13500     // copy argument count
   13501     GLMessage_DataType *arg_count = glmsg.add_args();
   13502     arg_count->set_isarray(false);
   13503     arg_count->set_type(GLMessage::DataType::INT);
   13504     arg_count->add_intvalue(count);
   13505 
   13506     // copy argument ids
   13507     GLMessage_DataType *arg_ids = glmsg.add_args();
   13508     arg_ids->set_isarray(false);
   13509     arg_ids->set_type(GLMessage::DataType::INT64);
   13510     arg_ids->add_int64value((uintptr_t)ids);
   13511 
   13512     // copy argument enabled
   13513     GLMessage_DataType *arg_enabled = glmsg.add_args();
   13514     arg_enabled->set_isarray(false);
   13515     arg_enabled->set_type(GLMessage::DataType::BOOL);
   13516     arg_enabled->add_boolvalue(enabled);
   13517 
   13518     // call function
   13519     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13520     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13521     glContext->hooks->gl.glDebugMessageControlKHR(source, type, severity, count, ids, enabled);
   13522     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13523     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13524 
   13525     void *pointerArgs[] = {
   13526         (void *) ids,
   13527     };
   13528 
   13529     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13530                               threadStartTime, threadEndTime,
   13531                               &glmsg, pointerArgs);
   13532     glContext->traceGLMessage(&glmsg);
   13533 }
   13534 
   13535 void GLTrace_glDebugMessageInsertKHR(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf) {
   13536     GLMessage glmsg;
   13537     GLTraceContext *glContext = getGLTraceContext();
   13538 
   13539     glmsg.set_function(GLMessage::glDebugMessageInsertKHR);
   13540 
   13541     // copy argument source
   13542     GLMessage_DataType *arg_source = glmsg.add_args();
   13543     arg_source->set_isarray(false);
   13544     arg_source->set_type(GLMessage::DataType::ENUM);
   13545     arg_source->add_intvalue((int)source);
   13546 
   13547     // copy argument type
   13548     GLMessage_DataType *arg_type = glmsg.add_args();
   13549     arg_type->set_isarray(false);
   13550     arg_type->set_type(GLMessage::DataType::ENUM);
   13551     arg_type->add_intvalue((int)type);
   13552 
   13553     // copy argument id
   13554     GLMessage_DataType *arg_id = glmsg.add_args();
   13555     arg_id->set_isarray(false);
   13556     arg_id->set_type(GLMessage::DataType::INT);
   13557     arg_id->add_intvalue(id);
   13558 
   13559     // copy argument severity
   13560     GLMessage_DataType *arg_severity = glmsg.add_args();
   13561     arg_severity->set_isarray(false);
   13562     arg_severity->set_type(GLMessage::DataType::ENUM);
   13563     arg_severity->add_intvalue((int)severity);
   13564 
   13565     // copy argument length
   13566     GLMessage_DataType *arg_length = glmsg.add_args();
   13567     arg_length->set_isarray(false);
   13568     arg_length->set_type(GLMessage::DataType::INT);
   13569     arg_length->add_intvalue(length);
   13570 
   13571     // copy argument buf
   13572     GLMessage_DataType *arg_buf = glmsg.add_args();
   13573     arg_buf->set_isarray(false);
   13574     arg_buf->set_type(GLMessage::DataType::INT64);
   13575     arg_buf->add_int64value((uintptr_t)buf);
   13576 
   13577     // call function
   13578     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13579     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13580     glContext->hooks->gl.glDebugMessageInsertKHR(source, type, id, severity, length, buf);
   13581     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13582     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13583 
   13584     void *pointerArgs[] = {
   13585         (void *) buf,
   13586     };
   13587 
   13588     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13589                               threadStartTime, threadEndTime,
   13590                               &glmsg, pointerArgs);
   13591     glContext->traceGLMessage(&glmsg);
   13592 }
   13593 
   13594 void GLTrace_glDebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void * userParam) {
   13595     GLMessage glmsg;
   13596     GLTraceContext *glContext = getGLTraceContext();
   13597 
   13598     glmsg.set_function(GLMessage::glDebugMessageCallbackKHR);
   13599 
   13600     // copy argument callback
   13601     GLMessage_DataType *arg_callback = glmsg.add_args();
   13602     arg_callback->set_isarray(false);
   13603     arg_callback->set_type(GLMessage::DataType::INT64);
   13604     arg_callback->add_int64value((uintptr_t)callback);
   13605 
   13606     // copy argument userParam
   13607     GLMessage_DataType *arg_userParam = glmsg.add_args();
   13608     arg_userParam->set_isarray(false);
   13609     arg_userParam->set_type(GLMessage::DataType::INT64);
   13610     arg_userParam->add_int64value((uintptr_t)userParam);
   13611 
   13612     // call function
   13613     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13614     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13615     glContext->hooks->gl.glDebugMessageCallbackKHR(callback, userParam);
   13616     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13617     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13618 
   13619     void *pointerArgs[] = {
   13620         (void *) callback,
   13621         (void *) userParam,
   13622     };
   13623 
   13624     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13625                               threadStartTime, threadEndTime,
   13626                               &glmsg, pointerArgs);
   13627     glContext->traceGLMessage(&glmsg);
   13628 }
   13629 
   13630 GLuint GLTrace_glGetDebugMessageLogKHR(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog) {
   13631     GLMessage glmsg;
   13632     GLTraceContext *glContext = getGLTraceContext();
   13633 
   13634     glmsg.set_function(GLMessage::glGetDebugMessageLogKHR);
   13635 
   13636     // copy argument count
   13637     GLMessage_DataType *arg_count = glmsg.add_args();
   13638     arg_count->set_isarray(false);
   13639     arg_count->set_type(GLMessage::DataType::INT);
   13640     arg_count->add_intvalue(count);
   13641 
   13642     // copy argument bufSize
   13643     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   13644     arg_bufSize->set_isarray(false);
   13645     arg_bufSize->set_type(GLMessage::DataType::INT);
   13646     arg_bufSize->add_intvalue(bufSize);
   13647 
   13648     // copy argument sources
   13649     GLMessage_DataType *arg_sources = glmsg.add_args();
   13650     arg_sources->set_isarray(false);
   13651     arg_sources->set_type(GLMessage::DataType::INT64);
   13652     arg_sources->add_int64value((uintptr_t)sources);
   13653 
   13654     // copy argument types
   13655     GLMessage_DataType *arg_types = glmsg.add_args();
   13656     arg_types->set_isarray(false);
   13657     arg_types->set_type(GLMessage::DataType::INT64);
   13658     arg_types->add_int64value((uintptr_t)types);
   13659 
   13660     // copy argument ids
   13661     GLMessage_DataType *arg_ids = glmsg.add_args();
   13662     arg_ids->set_isarray(false);
   13663     arg_ids->set_type(GLMessage::DataType::INT64);
   13664     arg_ids->add_int64value((uintptr_t)ids);
   13665 
   13666     // copy argument severities
   13667     GLMessage_DataType *arg_severities = glmsg.add_args();
   13668     arg_severities->set_isarray(false);
   13669     arg_severities->set_type(GLMessage::DataType::INT64);
   13670     arg_severities->add_int64value((uintptr_t)severities);
   13671 
   13672     // copy argument lengths
   13673     GLMessage_DataType *arg_lengths = glmsg.add_args();
   13674     arg_lengths->set_isarray(false);
   13675     arg_lengths->set_type(GLMessage::DataType::INT64);
   13676     arg_lengths->add_int64value((uintptr_t)lengths);
   13677 
   13678     // copy argument messageLog
   13679     GLMessage_DataType *arg_messageLog = glmsg.add_args();
   13680     arg_messageLog->set_isarray(false);
   13681     arg_messageLog->set_type(GLMessage::DataType::INT64);
   13682     arg_messageLog->add_int64value((uintptr_t)messageLog);
   13683 
   13684     // call function
   13685     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13686     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13687     GLuint retValue = glContext->hooks->gl.glGetDebugMessageLogKHR(count, bufSize, sources, types, ids, severities, lengths, messageLog);
   13688     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13689     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13690 
   13691     // set return value
   13692     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   13693     rt->set_isarray(false);
   13694     rt->set_type(GLMessage::DataType::INT);
   13695     rt->add_intvalue(retValue);
   13696 
   13697     void *pointerArgs[] = {
   13698         (void *) sources,
   13699         (void *) types,
   13700         (void *) ids,
   13701         (void *) severities,
   13702         (void *) lengths,
   13703         (void *) messageLog,
   13704     };
   13705 
   13706     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13707                               threadStartTime, threadEndTime,
   13708                               &glmsg, pointerArgs);
   13709     glContext->traceGLMessage(&glmsg);
   13710 
   13711     return retValue;
   13712 }
   13713 
   13714 void GLTrace_glPushDebugGroupKHR(GLenum source, GLuint id, GLsizei length, const GLchar * message) {
   13715     GLMessage glmsg;
   13716     GLTraceContext *glContext = getGLTraceContext();
   13717 
   13718     glmsg.set_function(GLMessage::glPushDebugGroupKHR);
   13719 
   13720     // copy argument source
   13721     GLMessage_DataType *arg_source = glmsg.add_args();
   13722     arg_source->set_isarray(false);
   13723     arg_source->set_type(GLMessage::DataType::ENUM);
   13724     arg_source->add_intvalue((int)source);
   13725 
   13726     // copy argument id
   13727     GLMessage_DataType *arg_id = glmsg.add_args();
   13728     arg_id->set_isarray(false);
   13729     arg_id->set_type(GLMessage::DataType::INT);
   13730     arg_id->add_intvalue(id);
   13731 
   13732     // copy argument length
   13733     GLMessage_DataType *arg_length = glmsg.add_args();
   13734     arg_length->set_isarray(false);
   13735     arg_length->set_type(GLMessage::DataType::INT);
   13736     arg_length->add_intvalue(length);
   13737 
   13738     // copy argument message
   13739     GLMessage_DataType *arg_message = glmsg.add_args();
   13740     arg_message->set_isarray(false);
   13741     arg_message->set_type(GLMessage::DataType::INT64);
   13742     arg_message->add_int64value((uintptr_t)message);
   13743 
   13744     // call function
   13745     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13746     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13747     glContext->hooks->gl.glPushDebugGroupKHR(source, id, length, message);
   13748     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13749     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13750 
   13751     void *pointerArgs[] = {
   13752         (void *) message,
   13753     };
   13754 
   13755     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13756                               threadStartTime, threadEndTime,
   13757                               &glmsg, pointerArgs);
   13758     glContext->traceGLMessage(&glmsg);
   13759 }
   13760 
   13761 void GLTrace_glPopDebugGroupKHR(void) {
   13762     GLMessage glmsg;
   13763     GLTraceContext *glContext = getGLTraceContext();
   13764 
   13765     glmsg.set_function(GLMessage::glPopDebugGroupKHR);
   13766 
   13767     // call function
   13768     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13769     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13770     glContext->hooks->gl.glPopDebugGroupKHR();
   13771     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13772     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13773 
   13774     void *pointerArgs[] = {
   13775     };
   13776 
   13777     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13778                               threadStartTime, threadEndTime,
   13779                               &glmsg, pointerArgs);
   13780     glContext->traceGLMessage(&glmsg);
   13781 }
   13782 
   13783 void GLTrace_glObjectLabelKHR(GLenum identifier, GLuint name, GLsizei length, const GLchar * label) {
   13784     GLMessage glmsg;
   13785     GLTraceContext *glContext = getGLTraceContext();
   13786 
   13787     glmsg.set_function(GLMessage::glObjectLabelKHR);
   13788 
   13789     // copy argument identifier
   13790     GLMessage_DataType *arg_identifier = glmsg.add_args();
   13791     arg_identifier->set_isarray(false);
   13792     arg_identifier->set_type(GLMessage::DataType::ENUM);
   13793     arg_identifier->add_intvalue((int)identifier);
   13794 
   13795     // copy argument name
   13796     GLMessage_DataType *arg_name = glmsg.add_args();
   13797     arg_name->set_isarray(false);
   13798     arg_name->set_type(GLMessage::DataType::INT);
   13799     arg_name->add_intvalue(name);
   13800 
   13801     // copy argument length
   13802     GLMessage_DataType *arg_length = glmsg.add_args();
   13803     arg_length->set_isarray(false);
   13804     arg_length->set_type(GLMessage::DataType::INT);
   13805     arg_length->add_intvalue(length);
   13806 
   13807     // copy argument label
   13808     GLMessage_DataType *arg_label = glmsg.add_args();
   13809     arg_label->set_isarray(false);
   13810     arg_label->set_type(GLMessage::DataType::INT64);
   13811     arg_label->add_int64value((uintptr_t)label);
   13812 
   13813     // call function
   13814     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13815     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13816     glContext->hooks->gl.glObjectLabelKHR(identifier, name, length, label);
   13817     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13818     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13819 
   13820     void *pointerArgs[] = {
   13821         (void *) label,
   13822     };
   13823 
   13824     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13825                               threadStartTime, threadEndTime,
   13826                               &glmsg, pointerArgs);
   13827     glContext->traceGLMessage(&glmsg);
   13828 }
   13829 
   13830 void GLTrace_glGetObjectLabelKHR(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label) {
   13831     GLMessage glmsg;
   13832     GLTraceContext *glContext = getGLTraceContext();
   13833 
   13834     glmsg.set_function(GLMessage::glGetObjectLabelKHR);
   13835 
   13836     // copy argument identifier
   13837     GLMessage_DataType *arg_identifier = glmsg.add_args();
   13838     arg_identifier->set_isarray(false);
   13839     arg_identifier->set_type(GLMessage::DataType::ENUM);
   13840     arg_identifier->add_intvalue((int)identifier);
   13841 
   13842     // copy argument name
   13843     GLMessage_DataType *arg_name = glmsg.add_args();
   13844     arg_name->set_isarray(false);
   13845     arg_name->set_type(GLMessage::DataType::INT);
   13846     arg_name->add_intvalue(name);
   13847 
   13848     // copy argument bufSize
   13849     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   13850     arg_bufSize->set_isarray(false);
   13851     arg_bufSize->set_type(GLMessage::DataType::INT);
   13852     arg_bufSize->add_intvalue(bufSize);
   13853 
   13854     // copy argument length
   13855     GLMessage_DataType *arg_length = glmsg.add_args();
   13856     arg_length->set_isarray(false);
   13857     arg_length->set_type(GLMessage::DataType::INT64);
   13858     arg_length->add_int64value((uintptr_t)length);
   13859 
   13860     // copy argument label
   13861     GLMessage_DataType *arg_label = glmsg.add_args();
   13862     arg_label->set_isarray(false);
   13863     arg_label->set_type(GLMessage::DataType::INT64);
   13864     arg_label->add_int64value((uintptr_t)label);
   13865 
   13866     // call function
   13867     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13868     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13869     glContext->hooks->gl.glGetObjectLabelKHR(identifier, name, bufSize, length, label);
   13870     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13871     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13872 
   13873     void *pointerArgs[] = {
   13874         (void *) length,
   13875         (void *) label,
   13876     };
   13877 
   13878     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13879                               threadStartTime, threadEndTime,
   13880                               &glmsg, pointerArgs);
   13881     glContext->traceGLMessage(&glmsg);
   13882 }
   13883 
   13884 void GLTrace_glObjectPtrLabelKHR(const void * ptr, GLsizei length, const GLchar * label) {
   13885     GLMessage glmsg;
   13886     GLTraceContext *glContext = getGLTraceContext();
   13887 
   13888     glmsg.set_function(GLMessage::glObjectPtrLabelKHR);
   13889 
   13890     // copy argument ptr
   13891     GLMessage_DataType *arg_ptr = glmsg.add_args();
   13892     arg_ptr->set_isarray(false);
   13893     arg_ptr->set_type(GLMessage::DataType::INT64);
   13894     arg_ptr->add_int64value((uintptr_t)ptr);
   13895 
   13896     // copy argument length
   13897     GLMessage_DataType *arg_length = glmsg.add_args();
   13898     arg_length->set_isarray(false);
   13899     arg_length->set_type(GLMessage::DataType::INT);
   13900     arg_length->add_intvalue(length);
   13901 
   13902     // copy argument label
   13903     GLMessage_DataType *arg_label = glmsg.add_args();
   13904     arg_label->set_isarray(false);
   13905     arg_label->set_type(GLMessage::DataType::INT64);
   13906     arg_label->add_int64value((uintptr_t)label);
   13907 
   13908     // call function
   13909     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13910     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13911     glContext->hooks->gl.glObjectPtrLabelKHR(ptr, length, label);
   13912     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13913     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13914 
   13915     void *pointerArgs[] = {
   13916         (void *) ptr,
   13917         (void *) label,
   13918     };
   13919 
   13920     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13921                               threadStartTime, threadEndTime,
   13922                               &glmsg, pointerArgs);
   13923     glContext->traceGLMessage(&glmsg);
   13924 }
   13925 
   13926 void GLTrace_glGetObjectPtrLabelKHR(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label) {
   13927     GLMessage glmsg;
   13928     GLTraceContext *glContext = getGLTraceContext();
   13929 
   13930     glmsg.set_function(GLMessage::glGetObjectPtrLabelKHR);
   13931 
   13932     // copy argument ptr
   13933     GLMessage_DataType *arg_ptr = glmsg.add_args();
   13934     arg_ptr->set_isarray(false);
   13935     arg_ptr->set_type(GLMessage::DataType::INT64);
   13936     arg_ptr->add_int64value((uintptr_t)ptr);
   13937 
   13938     // copy argument bufSize
   13939     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   13940     arg_bufSize->set_isarray(false);
   13941     arg_bufSize->set_type(GLMessage::DataType::INT);
   13942     arg_bufSize->add_intvalue(bufSize);
   13943 
   13944     // copy argument length
   13945     GLMessage_DataType *arg_length = glmsg.add_args();
   13946     arg_length->set_isarray(false);
   13947     arg_length->set_type(GLMessage::DataType::INT64);
   13948     arg_length->add_int64value((uintptr_t)length);
   13949 
   13950     // copy argument label
   13951     GLMessage_DataType *arg_label = glmsg.add_args();
   13952     arg_label->set_isarray(false);
   13953     arg_label->set_type(GLMessage::DataType::INT64);
   13954     arg_label->add_int64value((uintptr_t)label);
   13955 
   13956     // call function
   13957     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13958     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13959     glContext->hooks->gl.glGetObjectPtrLabelKHR(ptr, bufSize, length, label);
   13960     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13961     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13962 
   13963     void *pointerArgs[] = {
   13964         (void *) ptr,
   13965         (void *) length,
   13966         (void *) label,
   13967     };
   13968 
   13969     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   13970                               threadStartTime, threadEndTime,
   13971                               &glmsg, pointerArgs);
   13972     glContext->traceGLMessage(&glmsg);
   13973 }
   13974 
   13975 void GLTrace_glGetPointervKHR(GLenum pname, void ** params) {
   13976     GLMessage glmsg;
   13977     GLTraceContext *glContext = getGLTraceContext();
   13978 
   13979     glmsg.set_function(GLMessage::glGetPointervKHR);
   13980 
   13981     // copy argument pname
   13982     GLMessage_DataType *arg_pname = glmsg.add_args();
   13983     arg_pname->set_isarray(false);
   13984     arg_pname->set_type(GLMessage::DataType::ENUM);
   13985     arg_pname->add_intvalue((int)pname);
   13986 
   13987     // copy argument params
   13988     GLMessage_DataType *arg_params = glmsg.add_args();
   13989     arg_params->set_isarray(false);
   13990     arg_params->set_type(GLMessage::DataType::INT64);
   13991     arg_params->add_int64value((uintptr_t)params);
   13992 
   13993     // call function
   13994     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13995     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   13996     glContext->hooks->gl.glGetPointervKHR(pname, params);
   13997     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   13998     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   13999 
   14000     void *pointerArgs[] = {
   14001         (void *) params,
   14002     };
   14003 
   14004     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14005                               threadStartTime, threadEndTime,
   14006                               &glmsg, pointerArgs);
   14007     glContext->traceGLMessage(&glmsg);
   14008 }
   14009 
   14010 void GLTrace_glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) {
   14011     GLMessage glmsg;
   14012     GLTraceContext *glContext = getGLTraceContext();
   14013 
   14014     glmsg.set_function(GLMessage::glEGLImageTargetTexture2DOES);
   14015 
   14016     // copy argument target
   14017     GLMessage_DataType *arg_target = glmsg.add_args();
   14018     arg_target->set_isarray(false);
   14019     arg_target->set_type(GLMessage::DataType::ENUM);
   14020     arg_target->add_intvalue((int)target);
   14021 
   14022     // copy argument image
   14023     GLMessage_DataType *arg_image = glmsg.add_args();
   14024     arg_image->set_isarray(false);
   14025     arg_image->set_type(GLMessage::DataType::INT64);
   14026     arg_image->add_int64value((uintptr_t)image);
   14027 
   14028     // call function
   14029     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14030     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14031     glContext->hooks->gl.glEGLImageTargetTexture2DOES(target, image);
   14032     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14033     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14034 
   14035     void *pointerArgs[] = {
   14036         (void *) image,
   14037     };
   14038 
   14039     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14040                               threadStartTime, threadEndTime,
   14041                               &glmsg, pointerArgs);
   14042     glContext->traceGLMessage(&glmsg);
   14043 }
   14044 
   14045 void GLTrace_glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image) {
   14046     GLMessage glmsg;
   14047     GLTraceContext *glContext = getGLTraceContext();
   14048 
   14049     glmsg.set_function(GLMessage::glEGLImageTargetRenderbufferStorageOES);
   14050 
   14051     // copy argument target
   14052     GLMessage_DataType *arg_target = glmsg.add_args();
   14053     arg_target->set_isarray(false);
   14054     arg_target->set_type(GLMessage::DataType::ENUM);
   14055     arg_target->add_intvalue((int)target);
   14056 
   14057     // copy argument image
   14058     GLMessage_DataType *arg_image = glmsg.add_args();
   14059     arg_image->set_isarray(false);
   14060     arg_image->set_type(GLMessage::DataType::INT64);
   14061     arg_image->add_int64value((uintptr_t)image);
   14062 
   14063     // call function
   14064     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14065     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14066     glContext->hooks->gl.glEGLImageTargetRenderbufferStorageOES(target, image);
   14067     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14068     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14069 
   14070     void *pointerArgs[] = {
   14071         (void *) image,
   14072     };
   14073 
   14074     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14075                               threadStartTime, threadEndTime,
   14076                               &glmsg, pointerArgs);
   14077     glContext->traceGLMessage(&glmsg);
   14078 }
   14079 
   14080 void GLTrace_glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary) {
   14081     GLMessage glmsg;
   14082     GLTraceContext *glContext = getGLTraceContext();
   14083 
   14084     glmsg.set_function(GLMessage::glGetProgramBinaryOES);
   14085 
   14086     // copy argument program
   14087     GLMessage_DataType *arg_program = glmsg.add_args();
   14088     arg_program->set_isarray(false);
   14089     arg_program->set_type(GLMessage::DataType::INT);
   14090     arg_program->add_intvalue(program);
   14091 
   14092     // copy argument bufSize
   14093     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   14094     arg_bufSize->set_isarray(false);
   14095     arg_bufSize->set_type(GLMessage::DataType::INT);
   14096     arg_bufSize->add_intvalue(bufSize);
   14097 
   14098     // copy argument length
   14099     GLMessage_DataType *arg_length = glmsg.add_args();
   14100     arg_length->set_isarray(false);
   14101     arg_length->set_type(GLMessage::DataType::INT64);
   14102     arg_length->add_int64value((uintptr_t)length);
   14103 
   14104     // copy argument binaryFormat
   14105     GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
   14106     arg_binaryFormat->set_isarray(false);
   14107     arg_binaryFormat->set_type(GLMessage::DataType::INT64);
   14108     arg_binaryFormat->add_int64value((uintptr_t)binaryFormat);
   14109 
   14110     // copy argument binary
   14111     GLMessage_DataType *arg_binary = glmsg.add_args();
   14112     arg_binary->set_isarray(false);
   14113     arg_binary->set_type(GLMessage::DataType::INT64);
   14114     arg_binary->add_int64value((uintptr_t)binary);
   14115 
   14116     // call function
   14117     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14118     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14119     glContext->hooks->gl.glGetProgramBinaryOES(program, bufSize, length, binaryFormat, binary);
   14120     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14121     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14122 
   14123     void *pointerArgs[] = {
   14124         (void *) length,
   14125         (void *) binaryFormat,
   14126         (void *) binary,
   14127     };
   14128 
   14129     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14130                               threadStartTime, threadEndTime,
   14131                               &glmsg, pointerArgs);
   14132     glContext->traceGLMessage(&glmsg);
   14133 }
   14134 
   14135 void GLTrace_glProgramBinaryOES(GLuint program, GLenum binaryFormat, const void * binary, GLint length) {
   14136     GLMessage glmsg;
   14137     GLTraceContext *glContext = getGLTraceContext();
   14138 
   14139     glmsg.set_function(GLMessage::glProgramBinaryOES);
   14140 
   14141     // copy argument program
   14142     GLMessage_DataType *arg_program = glmsg.add_args();
   14143     arg_program->set_isarray(false);
   14144     arg_program->set_type(GLMessage::DataType::INT);
   14145     arg_program->add_intvalue(program);
   14146 
   14147     // copy argument binaryFormat
   14148     GLMessage_DataType *arg_binaryFormat = glmsg.add_args();
   14149     arg_binaryFormat->set_isarray(false);
   14150     arg_binaryFormat->set_type(GLMessage::DataType::ENUM);
   14151     arg_binaryFormat->add_intvalue((int)binaryFormat);
   14152 
   14153     // copy argument binary
   14154     GLMessage_DataType *arg_binary = glmsg.add_args();
   14155     arg_binary->set_isarray(false);
   14156     arg_binary->set_type(GLMessage::DataType::INT64);
   14157     arg_binary->add_int64value((uintptr_t)binary);
   14158 
   14159     // copy argument length
   14160     GLMessage_DataType *arg_length = glmsg.add_args();
   14161     arg_length->set_isarray(false);
   14162     arg_length->set_type(GLMessage::DataType::INT);
   14163     arg_length->add_intvalue(length);
   14164 
   14165     // call function
   14166     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14167     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14168     glContext->hooks->gl.glProgramBinaryOES(program, binaryFormat, binary, length);
   14169     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14170     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14171 
   14172     void *pointerArgs[] = {
   14173         (void *) binary,
   14174     };
   14175 
   14176     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14177                               threadStartTime, threadEndTime,
   14178                               &glmsg, pointerArgs);
   14179     glContext->traceGLMessage(&glmsg);
   14180 }
   14181 
   14182 void * GLTrace_glMapBufferOES(GLenum target, GLenum access) {
   14183     GLMessage glmsg;
   14184     GLTraceContext *glContext = getGLTraceContext();
   14185 
   14186     glmsg.set_function(GLMessage::glMapBufferOES);
   14187 
   14188     // copy argument target
   14189     GLMessage_DataType *arg_target = glmsg.add_args();
   14190     arg_target->set_isarray(false);
   14191     arg_target->set_type(GLMessage::DataType::ENUM);
   14192     arg_target->add_intvalue((int)target);
   14193 
   14194     // copy argument access
   14195     GLMessage_DataType *arg_access = glmsg.add_args();
   14196     arg_access->set_isarray(false);
   14197     arg_access->set_type(GLMessage::DataType::ENUM);
   14198     arg_access->add_intvalue((int)access);
   14199 
   14200     // call function
   14201     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14202     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14203     void * retValue = glContext->hooks->gl.glMapBufferOES(target, access);
   14204     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14205     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14206 
   14207     // set return value
   14208     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   14209     rt->set_isarray(false);
   14210     rt->set_type(GLMessage::DataType::INT64);
   14211     rt->add_int64value((uintptr_t)retValue);
   14212 
   14213     void *pointerArgs[] = {
   14214         (void *) retValue,
   14215     };
   14216 
   14217     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14218                               threadStartTime, threadEndTime,
   14219                               &glmsg, pointerArgs);
   14220     glContext->traceGLMessage(&glmsg);
   14221 
   14222     return retValue;
   14223 }
   14224 
   14225 GLboolean GLTrace_glUnmapBufferOES(GLenum target) {
   14226     GLMessage glmsg;
   14227     GLTraceContext *glContext = getGLTraceContext();
   14228 
   14229     glmsg.set_function(GLMessage::glUnmapBufferOES);
   14230 
   14231     // copy argument target
   14232     GLMessage_DataType *arg_target = glmsg.add_args();
   14233     arg_target->set_isarray(false);
   14234     arg_target->set_type(GLMessage::DataType::ENUM);
   14235     arg_target->add_intvalue((int)target);
   14236 
   14237     // call function
   14238     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14239     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14240     GLboolean retValue = glContext->hooks->gl.glUnmapBufferOES(target);
   14241     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14242     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14243 
   14244     // set return value
   14245     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   14246     rt->set_isarray(false);
   14247     rt->set_type(GLMessage::DataType::BOOL);
   14248     rt->add_boolvalue(retValue);
   14249 
   14250     void *pointerArgs[] = {
   14251     };
   14252 
   14253     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14254                               threadStartTime, threadEndTime,
   14255                               &glmsg, pointerArgs);
   14256     glContext->traceGLMessage(&glmsg);
   14257 
   14258     return retValue;
   14259 }
   14260 
   14261 void GLTrace_glGetBufferPointervOES(GLenum target, GLenum pname, void ** params) {
   14262     GLMessage glmsg;
   14263     GLTraceContext *glContext = getGLTraceContext();
   14264 
   14265     glmsg.set_function(GLMessage::glGetBufferPointervOES);
   14266 
   14267     // copy argument target
   14268     GLMessage_DataType *arg_target = glmsg.add_args();
   14269     arg_target->set_isarray(false);
   14270     arg_target->set_type(GLMessage::DataType::ENUM);
   14271     arg_target->add_intvalue((int)target);
   14272 
   14273     // copy argument pname
   14274     GLMessage_DataType *arg_pname = glmsg.add_args();
   14275     arg_pname->set_isarray(false);
   14276     arg_pname->set_type(GLMessage::DataType::ENUM);
   14277     arg_pname->add_intvalue((int)pname);
   14278 
   14279     // copy argument params
   14280     GLMessage_DataType *arg_params = glmsg.add_args();
   14281     arg_params->set_isarray(false);
   14282     arg_params->set_type(GLMessage::DataType::INT64);
   14283     arg_params->add_int64value((uintptr_t)params);
   14284 
   14285     // call function
   14286     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14287     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14288     glContext->hooks->gl.glGetBufferPointervOES(target, pname, params);
   14289     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14290     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14291 
   14292     void *pointerArgs[] = {
   14293         (void *) params,
   14294     };
   14295 
   14296     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14297                               threadStartTime, threadEndTime,
   14298                               &glmsg, pointerArgs);
   14299     glContext->traceGLMessage(&glmsg);
   14300 }
   14301 
   14302 void GLTrace_glMinSampleShadingOES(GLfloat value) {
   14303     GLMessage glmsg;
   14304     GLTraceContext *glContext = getGLTraceContext();
   14305 
   14306     glmsg.set_function(GLMessage::glMinSampleShadingOES);
   14307 
   14308     // copy argument value
   14309     GLMessage_DataType *arg_value = glmsg.add_args();
   14310     arg_value->set_isarray(false);
   14311     arg_value->set_type(GLMessage::DataType::FLOAT);
   14312     arg_value->add_floatvalue(value);
   14313 
   14314     // call function
   14315     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14316     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14317     glContext->hooks->gl.glMinSampleShadingOES(value);
   14318     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14319     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14320 
   14321     void *pointerArgs[] = {
   14322     };
   14323 
   14324     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14325                               threadStartTime, threadEndTime,
   14326                               &glmsg, pointerArgs);
   14327     glContext->traceGLMessage(&glmsg);
   14328 }
   14329 
   14330 void GLTrace_glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels) {
   14331     GLMessage glmsg;
   14332     GLTraceContext *glContext = getGLTraceContext();
   14333 
   14334     glmsg.set_function(GLMessage::glTexImage3DOES);
   14335 
   14336     // copy argument target
   14337     GLMessage_DataType *arg_target = glmsg.add_args();
   14338     arg_target->set_isarray(false);
   14339     arg_target->set_type(GLMessage::DataType::ENUM);
   14340     arg_target->add_intvalue((int)target);
   14341 
   14342     // copy argument level
   14343     GLMessage_DataType *arg_level = glmsg.add_args();
   14344     arg_level->set_isarray(false);
   14345     arg_level->set_type(GLMessage::DataType::INT);
   14346     arg_level->add_intvalue(level);
   14347 
   14348     // copy argument internalformat
   14349     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   14350     arg_internalformat->set_isarray(false);
   14351     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   14352     arg_internalformat->add_intvalue((int)internalformat);
   14353 
   14354     // copy argument width
   14355     GLMessage_DataType *arg_width = glmsg.add_args();
   14356     arg_width->set_isarray(false);
   14357     arg_width->set_type(GLMessage::DataType::INT);
   14358     arg_width->add_intvalue(width);
   14359 
   14360     // copy argument height
   14361     GLMessage_DataType *arg_height = glmsg.add_args();
   14362     arg_height->set_isarray(false);
   14363     arg_height->set_type(GLMessage::DataType::INT);
   14364     arg_height->add_intvalue(height);
   14365 
   14366     // copy argument depth
   14367     GLMessage_DataType *arg_depth = glmsg.add_args();
   14368     arg_depth->set_isarray(false);
   14369     arg_depth->set_type(GLMessage::DataType::INT);
   14370     arg_depth->add_intvalue(depth);
   14371 
   14372     // copy argument border
   14373     GLMessage_DataType *arg_border = glmsg.add_args();
   14374     arg_border->set_isarray(false);
   14375     arg_border->set_type(GLMessage::DataType::INT);
   14376     arg_border->add_intvalue(border);
   14377 
   14378     // copy argument format
   14379     GLMessage_DataType *arg_format = glmsg.add_args();
   14380     arg_format->set_isarray(false);
   14381     arg_format->set_type(GLMessage::DataType::ENUM);
   14382     arg_format->add_intvalue((int)format);
   14383 
   14384     // copy argument type
   14385     GLMessage_DataType *arg_type = glmsg.add_args();
   14386     arg_type->set_isarray(false);
   14387     arg_type->set_type(GLMessage::DataType::ENUM);
   14388     arg_type->add_intvalue((int)type);
   14389 
   14390     // copy argument pixels
   14391     GLMessage_DataType *arg_pixels = glmsg.add_args();
   14392     arg_pixels->set_isarray(false);
   14393     arg_pixels->set_type(GLMessage::DataType::INT64);
   14394     arg_pixels->add_int64value((uintptr_t)pixels);
   14395 
   14396     // call function
   14397     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14398     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14399     glContext->hooks->gl.glTexImage3DOES(target, level, internalformat, width, height, depth, border, format, type, pixels);
   14400     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14401     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14402 
   14403     void *pointerArgs[] = {
   14404         (void *) pixels,
   14405     };
   14406 
   14407     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14408                               threadStartTime, threadEndTime,
   14409                               &glmsg, pointerArgs);
   14410     glContext->traceGLMessage(&glmsg);
   14411 }
   14412 
   14413 void GLTrace_glTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels) {
   14414     GLMessage glmsg;
   14415     GLTraceContext *glContext = getGLTraceContext();
   14416 
   14417     glmsg.set_function(GLMessage::glTexSubImage3DOES);
   14418 
   14419     // copy argument target
   14420     GLMessage_DataType *arg_target = glmsg.add_args();
   14421     arg_target->set_isarray(false);
   14422     arg_target->set_type(GLMessage::DataType::ENUM);
   14423     arg_target->add_intvalue((int)target);
   14424 
   14425     // copy argument level
   14426     GLMessage_DataType *arg_level = glmsg.add_args();
   14427     arg_level->set_isarray(false);
   14428     arg_level->set_type(GLMessage::DataType::INT);
   14429     arg_level->add_intvalue(level);
   14430 
   14431     // copy argument xoffset
   14432     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   14433     arg_xoffset->set_isarray(false);
   14434     arg_xoffset->set_type(GLMessage::DataType::INT);
   14435     arg_xoffset->add_intvalue(xoffset);
   14436 
   14437     // copy argument yoffset
   14438     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   14439     arg_yoffset->set_isarray(false);
   14440     arg_yoffset->set_type(GLMessage::DataType::INT);
   14441     arg_yoffset->add_intvalue(yoffset);
   14442 
   14443     // copy argument zoffset
   14444     GLMessage_DataType *arg_zoffset = glmsg.add_args();
   14445     arg_zoffset->set_isarray(false);
   14446     arg_zoffset->set_type(GLMessage::DataType::INT);
   14447     arg_zoffset->add_intvalue(zoffset);
   14448 
   14449     // copy argument width
   14450     GLMessage_DataType *arg_width = glmsg.add_args();
   14451     arg_width->set_isarray(false);
   14452     arg_width->set_type(GLMessage::DataType::INT);
   14453     arg_width->add_intvalue(width);
   14454 
   14455     // copy argument height
   14456     GLMessage_DataType *arg_height = glmsg.add_args();
   14457     arg_height->set_isarray(false);
   14458     arg_height->set_type(GLMessage::DataType::INT);
   14459     arg_height->add_intvalue(height);
   14460 
   14461     // copy argument depth
   14462     GLMessage_DataType *arg_depth = glmsg.add_args();
   14463     arg_depth->set_isarray(false);
   14464     arg_depth->set_type(GLMessage::DataType::INT);
   14465     arg_depth->add_intvalue(depth);
   14466 
   14467     // copy argument format
   14468     GLMessage_DataType *arg_format = glmsg.add_args();
   14469     arg_format->set_isarray(false);
   14470     arg_format->set_type(GLMessage::DataType::ENUM);
   14471     arg_format->add_intvalue((int)format);
   14472 
   14473     // copy argument type
   14474     GLMessage_DataType *arg_type = glmsg.add_args();
   14475     arg_type->set_isarray(false);
   14476     arg_type->set_type(GLMessage::DataType::ENUM);
   14477     arg_type->add_intvalue((int)type);
   14478 
   14479     // copy argument pixels
   14480     GLMessage_DataType *arg_pixels = glmsg.add_args();
   14481     arg_pixels->set_isarray(false);
   14482     arg_pixels->set_type(GLMessage::DataType::INT64);
   14483     arg_pixels->add_int64value((uintptr_t)pixels);
   14484 
   14485     // call function
   14486     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14487     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14488     glContext->hooks->gl.glTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
   14489     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14490     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14491 
   14492     void *pointerArgs[] = {
   14493         (void *) pixels,
   14494     };
   14495 
   14496     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14497                               threadStartTime, threadEndTime,
   14498                               &glmsg, pointerArgs);
   14499     glContext->traceGLMessage(&glmsg);
   14500 }
   14501 
   14502 void GLTrace_glCopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
   14503     GLMessage glmsg;
   14504     GLTraceContext *glContext = getGLTraceContext();
   14505 
   14506     glmsg.set_function(GLMessage::glCopyTexSubImage3DOES);
   14507 
   14508     // copy argument target
   14509     GLMessage_DataType *arg_target = glmsg.add_args();
   14510     arg_target->set_isarray(false);
   14511     arg_target->set_type(GLMessage::DataType::ENUM);
   14512     arg_target->add_intvalue((int)target);
   14513 
   14514     // copy argument level
   14515     GLMessage_DataType *arg_level = glmsg.add_args();
   14516     arg_level->set_isarray(false);
   14517     arg_level->set_type(GLMessage::DataType::INT);
   14518     arg_level->add_intvalue(level);
   14519 
   14520     // copy argument xoffset
   14521     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   14522     arg_xoffset->set_isarray(false);
   14523     arg_xoffset->set_type(GLMessage::DataType::INT);
   14524     arg_xoffset->add_intvalue(xoffset);
   14525 
   14526     // copy argument yoffset
   14527     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   14528     arg_yoffset->set_isarray(false);
   14529     arg_yoffset->set_type(GLMessage::DataType::INT);
   14530     arg_yoffset->add_intvalue(yoffset);
   14531 
   14532     // copy argument zoffset
   14533     GLMessage_DataType *arg_zoffset = glmsg.add_args();
   14534     arg_zoffset->set_isarray(false);
   14535     arg_zoffset->set_type(GLMessage::DataType::INT);
   14536     arg_zoffset->add_intvalue(zoffset);
   14537 
   14538     // copy argument x
   14539     GLMessage_DataType *arg_x = glmsg.add_args();
   14540     arg_x->set_isarray(false);
   14541     arg_x->set_type(GLMessage::DataType::INT);
   14542     arg_x->add_intvalue(x);
   14543 
   14544     // copy argument y
   14545     GLMessage_DataType *arg_y = glmsg.add_args();
   14546     arg_y->set_isarray(false);
   14547     arg_y->set_type(GLMessage::DataType::INT);
   14548     arg_y->add_intvalue(y);
   14549 
   14550     // copy argument width
   14551     GLMessage_DataType *arg_width = glmsg.add_args();
   14552     arg_width->set_isarray(false);
   14553     arg_width->set_type(GLMessage::DataType::INT);
   14554     arg_width->add_intvalue(width);
   14555 
   14556     // copy argument height
   14557     GLMessage_DataType *arg_height = glmsg.add_args();
   14558     arg_height->set_isarray(false);
   14559     arg_height->set_type(GLMessage::DataType::INT);
   14560     arg_height->add_intvalue(height);
   14561 
   14562     // call function
   14563     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14564     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14565     glContext->hooks->gl.glCopyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height);
   14566     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14567     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14568 
   14569     void *pointerArgs[] = {
   14570     };
   14571 
   14572     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14573                               threadStartTime, threadEndTime,
   14574                               &glmsg, pointerArgs);
   14575     glContext->traceGLMessage(&glmsg);
   14576 }
   14577 
   14578 void GLTrace_glCompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data) {
   14579     GLMessage glmsg;
   14580     GLTraceContext *glContext = getGLTraceContext();
   14581 
   14582     glmsg.set_function(GLMessage::glCompressedTexImage3DOES);
   14583 
   14584     // copy argument target
   14585     GLMessage_DataType *arg_target = glmsg.add_args();
   14586     arg_target->set_isarray(false);
   14587     arg_target->set_type(GLMessage::DataType::ENUM);
   14588     arg_target->add_intvalue((int)target);
   14589 
   14590     // copy argument level
   14591     GLMessage_DataType *arg_level = glmsg.add_args();
   14592     arg_level->set_isarray(false);
   14593     arg_level->set_type(GLMessage::DataType::INT);
   14594     arg_level->add_intvalue(level);
   14595 
   14596     // copy argument internalformat
   14597     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   14598     arg_internalformat->set_isarray(false);
   14599     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   14600     arg_internalformat->add_intvalue((int)internalformat);
   14601 
   14602     // copy argument width
   14603     GLMessage_DataType *arg_width = glmsg.add_args();
   14604     arg_width->set_isarray(false);
   14605     arg_width->set_type(GLMessage::DataType::INT);
   14606     arg_width->add_intvalue(width);
   14607 
   14608     // copy argument height
   14609     GLMessage_DataType *arg_height = glmsg.add_args();
   14610     arg_height->set_isarray(false);
   14611     arg_height->set_type(GLMessage::DataType::INT);
   14612     arg_height->add_intvalue(height);
   14613 
   14614     // copy argument depth
   14615     GLMessage_DataType *arg_depth = glmsg.add_args();
   14616     arg_depth->set_isarray(false);
   14617     arg_depth->set_type(GLMessage::DataType::INT);
   14618     arg_depth->add_intvalue(depth);
   14619 
   14620     // copy argument border
   14621     GLMessage_DataType *arg_border = glmsg.add_args();
   14622     arg_border->set_isarray(false);
   14623     arg_border->set_type(GLMessage::DataType::INT);
   14624     arg_border->add_intvalue(border);
   14625 
   14626     // copy argument imageSize
   14627     GLMessage_DataType *arg_imageSize = glmsg.add_args();
   14628     arg_imageSize->set_isarray(false);
   14629     arg_imageSize->set_type(GLMessage::DataType::INT);
   14630     arg_imageSize->add_intvalue(imageSize);
   14631 
   14632     // copy argument data
   14633     GLMessage_DataType *arg_data = glmsg.add_args();
   14634     arg_data->set_isarray(false);
   14635     arg_data->set_type(GLMessage::DataType::INT64);
   14636     arg_data->add_int64value((uintptr_t)data);
   14637 
   14638     // call function
   14639     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14640     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14641     glContext->hooks->gl.glCompressedTexImage3DOES(target, level, internalformat, width, height, depth, border, imageSize, data);
   14642     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14643     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14644 
   14645     void *pointerArgs[] = {
   14646         (void *) data,
   14647     };
   14648 
   14649     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14650                               threadStartTime, threadEndTime,
   14651                               &glmsg, pointerArgs);
   14652     glContext->traceGLMessage(&glmsg);
   14653 }
   14654 
   14655 void GLTrace_glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data) {
   14656     GLMessage glmsg;
   14657     GLTraceContext *glContext = getGLTraceContext();
   14658 
   14659     glmsg.set_function(GLMessage::glCompressedTexSubImage3DOES);
   14660 
   14661     // copy argument target
   14662     GLMessage_DataType *arg_target = glmsg.add_args();
   14663     arg_target->set_isarray(false);
   14664     arg_target->set_type(GLMessage::DataType::ENUM);
   14665     arg_target->add_intvalue((int)target);
   14666 
   14667     // copy argument level
   14668     GLMessage_DataType *arg_level = glmsg.add_args();
   14669     arg_level->set_isarray(false);
   14670     arg_level->set_type(GLMessage::DataType::INT);
   14671     arg_level->add_intvalue(level);
   14672 
   14673     // copy argument xoffset
   14674     GLMessage_DataType *arg_xoffset = glmsg.add_args();
   14675     arg_xoffset->set_isarray(false);
   14676     arg_xoffset->set_type(GLMessage::DataType::INT);
   14677     arg_xoffset->add_intvalue(xoffset);
   14678 
   14679     // copy argument yoffset
   14680     GLMessage_DataType *arg_yoffset = glmsg.add_args();
   14681     arg_yoffset->set_isarray(false);
   14682     arg_yoffset->set_type(GLMessage::DataType::INT);
   14683     arg_yoffset->add_intvalue(yoffset);
   14684 
   14685     // copy argument zoffset
   14686     GLMessage_DataType *arg_zoffset = glmsg.add_args();
   14687     arg_zoffset->set_isarray(false);
   14688     arg_zoffset->set_type(GLMessage::DataType::INT);
   14689     arg_zoffset->add_intvalue(zoffset);
   14690 
   14691     // copy argument width
   14692     GLMessage_DataType *arg_width = glmsg.add_args();
   14693     arg_width->set_isarray(false);
   14694     arg_width->set_type(GLMessage::DataType::INT);
   14695     arg_width->add_intvalue(width);
   14696 
   14697     // copy argument height
   14698     GLMessage_DataType *arg_height = glmsg.add_args();
   14699     arg_height->set_isarray(false);
   14700     arg_height->set_type(GLMessage::DataType::INT);
   14701     arg_height->add_intvalue(height);
   14702 
   14703     // copy argument depth
   14704     GLMessage_DataType *arg_depth = glmsg.add_args();
   14705     arg_depth->set_isarray(false);
   14706     arg_depth->set_type(GLMessage::DataType::INT);
   14707     arg_depth->add_intvalue(depth);
   14708 
   14709     // copy argument format
   14710     GLMessage_DataType *arg_format = glmsg.add_args();
   14711     arg_format->set_isarray(false);
   14712     arg_format->set_type(GLMessage::DataType::ENUM);
   14713     arg_format->add_intvalue((int)format);
   14714 
   14715     // copy argument imageSize
   14716     GLMessage_DataType *arg_imageSize = glmsg.add_args();
   14717     arg_imageSize->set_isarray(false);
   14718     arg_imageSize->set_type(GLMessage::DataType::INT);
   14719     arg_imageSize->add_intvalue(imageSize);
   14720 
   14721     // copy argument data
   14722     GLMessage_DataType *arg_data = glmsg.add_args();
   14723     arg_data->set_isarray(false);
   14724     arg_data->set_type(GLMessage::DataType::INT64);
   14725     arg_data->add_int64value((uintptr_t)data);
   14726 
   14727     // call function
   14728     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14729     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14730     glContext->hooks->gl.glCompressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
   14731     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14732     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14733 
   14734     void *pointerArgs[] = {
   14735         (void *) data,
   14736     };
   14737 
   14738     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14739                               threadStartTime, threadEndTime,
   14740                               &glmsg, pointerArgs);
   14741     glContext->traceGLMessage(&glmsg);
   14742 }
   14743 
   14744 void GLTrace_glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {
   14745     GLMessage glmsg;
   14746     GLTraceContext *glContext = getGLTraceContext();
   14747 
   14748     glmsg.set_function(GLMessage::glFramebufferTexture3DOES);
   14749 
   14750     // copy argument target
   14751     GLMessage_DataType *arg_target = glmsg.add_args();
   14752     arg_target->set_isarray(false);
   14753     arg_target->set_type(GLMessage::DataType::ENUM);
   14754     arg_target->add_intvalue((int)target);
   14755 
   14756     // copy argument attachment
   14757     GLMessage_DataType *arg_attachment = glmsg.add_args();
   14758     arg_attachment->set_isarray(false);
   14759     arg_attachment->set_type(GLMessage::DataType::ENUM);
   14760     arg_attachment->add_intvalue((int)attachment);
   14761 
   14762     // copy argument textarget
   14763     GLMessage_DataType *arg_textarget = glmsg.add_args();
   14764     arg_textarget->set_isarray(false);
   14765     arg_textarget->set_type(GLMessage::DataType::ENUM);
   14766     arg_textarget->add_intvalue((int)textarget);
   14767 
   14768     // copy argument texture
   14769     GLMessage_DataType *arg_texture = glmsg.add_args();
   14770     arg_texture->set_isarray(false);
   14771     arg_texture->set_type(GLMessage::DataType::INT);
   14772     arg_texture->add_intvalue(texture);
   14773 
   14774     // copy argument level
   14775     GLMessage_DataType *arg_level = glmsg.add_args();
   14776     arg_level->set_isarray(false);
   14777     arg_level->set_type(GLMessage::DataType::INT);
   14778     arg_level->add_intvalue(level);
   14779 
   14780     // copy argument zoffset
   14781     GLMessage_DataType *arg_zoffset = glmsg.add_args();
   14782     arg_zoffset->set_isarray(false);
   14783     arg_zoffset->set_type(GLMessage::DataType::INT);
   14784     arg_zoffset->add_intvalue(zoffset);
   14785 
   14786     // call function
   14787     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14788     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14789     glContext->hooks->gl.glFramebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset);
   14790     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14791     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14792 
   14793     void *pointerArgs[] = {
   14794     };
   14795 
   14796     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14797                               threadStartTime, threadEndTime,
   14798                               &glmsg, pointerArgs);
   14799     glContext->traceGLMessage(&glmsg);
   14800 }
   14801 
   14802 void GLTrace_glTexStorage3DMultisampleOES(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) {
   14803     GLMessage glmsg;
   14804     GLTraceContext *glContext = getGLTraceContext();
   14805 
   14806     glmsg.set_function(GLMessage::glTexStorage3DMultisampleOES);
   14807 
   14808     // copy argument target
   14809     GLMessage_DataType *arg_target = glmsg.add_args();
   14810     arg_target->set_isarray(false);
   14811     arg_target->set_type(GLMessage::DataType::ENUM);
   14812     arg_target->add_intvalue((int)target);
   14813 
   14814     // copy argument samples
   14815     GLMessage_DataType *arg_samples = glmsg.add_args();
   14816     arg_samples->set_isarray(false);
   14817     arg_samples->set_type(GLMessage::DataType::INT);
   14818     arg_samples->add_intvalue(samples);
   14819 
   14820     // copy argument internalformat
   14821     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   14822     arg_internalformat->set_isarray(false);
   14823     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   14824     arg_internalformat->add_intvalue((int)internalformat);
   14825 
   14826     // copy argument width
   14827     GLMessage_DataType *arg_width = glmsg.add_args();
   14828     arg_width->set_isarray(false);
   14829     arg_width->set_type(GLMessage::DataType::INT);
   14830     arg_width->add_intvalue(width);
   14831 
   14832     // copy argument height
   14833     GLMessage_DataType *arg_height = glmsg.add_args();
   14834     arg_height->set_isarray(false);
   14835     arg_height->set_type(GLMessage::DataType::INT);
   14836     arg_height->add_intvalue(height);
   14837 
   14838     // copy argument depth
   14839     GLMessage_DataType *arg_depth = glmsg.add_args();
   14840     arg_depth->set_isarray(false);
   14841     arg_depth->set_type(GLMessage::DataType::INT);
   14842     arg_depth->add_intvalue(depth);
   14843 
   14844     // copy argument fixedsamplelocations
   14845     GLMessage_DataType *arg_fixedsamplelocations = glmsg.add_args();
   14846     arg_fixedsamplelocations->set_isarray(false);
   14847     arg_fixedsamplelocations->set_type(GLMessage::DataType::BOOL);
   14848     arg_fixedsamplelocations->add_boolvalue(fixedsamplelocations);
   14849 
   14850     // call function
   14851     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14852     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14853     glContext->hooks->gl.glTexStorage3DMultisampleOES(target, samples, internalformat, width, height, depth, fixedsamplelocations);
   14854     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14855     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14856 
   14857     void *pointerArgs[] = {
   14858     };
   14859 
   14860     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14861                               threadStartTime, threadEndTime,
   14862                               &glmsg, pointerArgs);
   14863     glContext->traceGLMessage(&glmsg);
   14864 }
   14865 
   14866 void GLTrace_glBindVertexArrayOES(GLuint array) {
   14867     GLMessage glmsg;
   14868     GLTraceContext *glContext = getGLTraceContext();
   14869 
   14870     glmsg.set_function(GLMessage::glBindVertexArrayOES);
   14871 
   14872     // copy argument array
   14873     GLMessage_DataType *arg_array = glmsg.add_args();
   14874     arg_array->set_isarray(false);
   14875     arg_array->set_type(GLMessage::DataType::INT);
   14876     arg_array->add_intvalue(array);
   14877 
   14878     // call function
   14879     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14880     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14881     glContext->hooks->gl.glBindVertexArrayOES(array);
   14882     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14883     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14884 
   14885     void *pointerArgs[] = {
   14886     };
   14887 
   14888     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14889                               threadStartTime, threadEndTime,
   14890                               &glmsg, pointerArgs);
   14891     glContext->traceGLMessage(&glmsg);
   14892 }
   14893 
   14894 void GLTrace_glDeleteVertexArraysOES(GLsizei n, const GLuint * arrays) {
   14895     GLMessage glmsg;
   14896     GLTraceContext *glContext = getGLTraceContext();
   14897 
   14898     glmsg.set_function(GLMessage::glDeleteVertexArraysOES);
   14899 
   14900     // copy argument n
   14901     GLMessage_DataType *arg_n = glmsg.add_args();
   14902     arg_n->set_isarray(false);
   14903     arg_n->set_type(GLMessage::DataType::INT);
   14904     arg_n->add_intvalue(n);
   14905 
   14906     // copy argument arrays
   14907     GLMessage_DataType *arg_arrays = glmsg.add_args();
   14908     arg_arrays->set_isarray(false);
   14909     arg_arrays->set_type(GLMessage::DataType::INT64);
   14910     arg_arrays->add_int64value((uintptr_t)arrays);
   14911 
   14912     // call function
   14913     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14914     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14915     glContext->hooks->gl.glDeleteVertexArraysOES(n, arrays);
   14916     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14917     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14918 
   14919     void *pointerArgs[] = {
   14920         (void *) arrays,
   14921     };
   14922 
   14923     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14924                               threadStartTime, threadEndTime,
   14925                               &glmsg, pointerArgs);
   14926     glContext->traceGLMessage(&glmsg);
   14927 }
   14928 
   14929 void GLTrace_glGenVertexArraysOES(GLsizei n, GLuint * arrays) {
   14930     GLMessage glmsg;
   14931     GLTraceContext *glContext = getGLTraceContext();
   14932 
   14933     glmsg.set_function(GLMessage::glGenVertexArraysOES);
   14934 
   14935     // copy argument n
   14936     GLMessage_DataType *arg_n = glmsg.add_args();
   14937     arg_n->set_isarray(false);
   14938     arg_n->set_type(GLMessage::DataType::INT);
   14939     arg_n->add_intvalue(n);
   14940 
   14941     // copy argument arrays
   14942     GLMessage_DataType *arg_arrays = glmsg.add_args();
   14943     arg_arrays->set_isarray(false);
   14944     arg_arrays->set_type(GLMessage::DataType::INT64);
   14945     arg_arrays->add_int64value((uintptr_t)arrays);
   14946 
   14947     // call function
   14948     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14949     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14950     glContext->hooks->gl.glGenVertexArraysOES(n, arrays);
   14951     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14952     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14953 
   14954     void *pointerArgs[] = {
   14955         (void *) arrays,
   14956     };
   14957 
   14958     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14959                               threadStartTime, threadEndTime,
   14960                               &glmsg, pointerArgs);
   14961     glContext->traceGLMessage(&glmsg);
   14962 }
   14963 
   14964 GLboolean GLTrace_glIsVertexArrayOES(GLuint array) {
   14965     GLMessage glmsg;
   14966     GLTraceContext *glContext = getGLTraceContext();
   14967 
   14968     glmsg.set_function(GLMessage::glIsVertexArrayOES);
   14969 
   14970     // copy argument array
   14971     GLMessage_DataType *arg_array = glmsg.add_args();
   14972     arg_array->set_isarray(false);
   14973     arg_array->set_type(GLMessage::DataType::INT);
   14974     arg_array->add_intvalue(array);
   14975 
   14976     // call function
   14977     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14978     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   14979     GLboolean retValue = glContext->hooks->gl.glIsVertexArrayOES(array);
   14980     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   14981     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   14982 
   14983     // set return value
   14984     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   14985     rt->set_isarray(false);
   14986     rt->set_type(GLMessage::DataType::BOOL);
   14987     rt->add_boolvalue(retValue);
   14988 
   14989     void *pointerArgs[] = {
   14990     };
   14991 
   14992     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   14993                               threadStartTime, threadEndTime,
   14994                               &glmsg, pointerArgs);
   14995     glContext->traceGLMessage(&glmsg);
   14996 
   14997     return retValue;
   14998 }
   14999 
   15000 void GLTrace_glGetPerfMonitorGroupsAMD(GLint * numGroups, GLsizei groupsSize, GLuint * groups) {
   15001     GLMessage glmsg;
   15002     GLTraceContext *glContext = getGLTraceContext();
   15003 
   15004     glmsg.set_function(GLMessage::glGetPerfMonitorGroupsAMD);
   15005 
   15006     // copy argument numGroups
   15007     GLMessage_DataType *arg_numGroups = glmsg.add_args();
   15008     arg_numGroups->set_isarray(false);
   15009     arg_numGroups->set_type(GLMessage::DataType::INT64);
   15010     arg_numGroups->add_int64value((uintptr_t)numGroups);
   15011 
   15012     // copy argument groupsSize
   15013     GLMessage_DataType *arg_groupsSize = glmsg.add_args();
   15014     arg_groupsSize->set_isarray(false);
   15015     arg_groupsSize->set_type(GLMessage::DataType::INT);
   15016     arg_groupsSize->add_intvalue(groupsSize);
   15017 
   15018     // copy argument groups
   15019     GLMessage_DataType *arg_groups = glmsg.add_args();
   15020     arg_groups->set_isarray(false);
   15021     arg_groups->set_type(GLMessage::DataType::INT64);
   15022     arg_groups->add_int64value((uintptr_t)groups);
   15023 
   15024     // call function
   15025     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15026     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15027     glContext->hooks->gl.glGetPerfMonitorGroupsAMD(numGroups, groupsSize, groups);
   15028     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15029     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15030 
   15031     void *pointerArgs[] = {
   15032         (void *) numGroups,
   15033         (void *) groups,
   15034     };
   15035 
   15036     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15037                               threadStartTime, threadEndTime,
   15038                               &glmsg, pointerArgs);
   15039     glContext->traceGLMessage(&glmsg);
   15040 }
   15041 
   15042 void GLTrace_glGetPerfMonitorCountersAMD(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters) {
   15043     GLMessage glmsg;
   15044     GLTraceContext *glContext = getGLTraceContext();
   15045 
   15046     glmsg.set_function(GLMessage::glGetPerfMonitorCountersAMD);
   15047 
   15048     // copy argument group
   15049     GLMessage_DataType *arg_group = glmsg.add_args();
   15050     arg_group->set_isarray(false);
   15051     arg_group->set_type(GLMessage::DataType::INT);
   15052     arg_group->add_intvalue(group);
   15053 
   15054     // copy argument numCounters
   15055     GLMessage_DataType *arg_numCounters = glmsg.add_args();
   15056     arg_numCounters->set_isarray(false);
   15057     arg_numCounters->set_type(GLMessage::DataType::INT64);
   15058     arg_numCounters->add_int64value((uintptr_t)numCounters);
   15059 
   15060     // copy argument maxActiveCounters
   15061     GLMessage_DataType *arg_maxActiveCounters = glmsg.add_args();
   15062     arg_maxActiveCounters->set_isarray(false);
   15063     arg_maxActiveCounters->set_type(GLMessage::DataType::INT64);
   15064     arg_maxActiveCounters->add_int64value((uintptr_t)maxActiveCounters);
   15065 
   15066     // copy argument counterSize
   15067     GLMessage_DataType *arg_counterSize = glmsg.add_args();
   15068     arg_counterSize->set_isarray(false);
   15069     arg_counterSize->set_type(GLMessage::DataType::INT);
   15070     arg_counterSize->add_intvalue(counterSize);
   15071 
   15072     // copy argument counters
   15073     GLMessage_DataType *arg_counters = glmsg.add_args();
   15074     arg_counters->set_isarray(false);
   15075     arg_counters->set_type(GLMessage::DataType::INT64);
   15076     arg_counters->add_int64value((uintptr_t)counters);
   15077 
   15078     // call function
   15079     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15080     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15081     glContext->hooks->gl.glGetPerfMonitorCountersAMD(group, numCounters, maxActiveCounters, counterSize, counters);
   15082     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15083     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15084 
   15085     void *pointerArgs[] = {
   15086         (void *) numCounters,
   15087         (void *) maxActiveCounters,
   15088         (void *) counters,
   15089     };
   15090 
   15091     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15092                               threadStartTime, threadEndTime,
   15093                               &glmsg, pointerArgs);
   15094     glContext->traceGLMessage(&glmsg);
   15095 }
   15096 
   15097 void GLTrace_glGetPerfMonitorGroupStringAMD(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString) {
   15098     GLMessage glmsg;
   15099     GLTraceContext *glContext = getGLTraceContext();
   15100 
   15101     glmsg.set_function(GLMessage::glGetPerfMonitorGroupStringAMD);
   15102 
   15103     // copy argument group
   15104     GLMessage_DataType *arg_group = glmsg.add_args();
   15105     arg_group->set_isarray(false);
   15106     arg_group->set_type(GLMessage::DataType::INT);
   15107     arg_group->add_intvalue(group);
   15108 
   15109     // copy argument bufSize
   15110     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   15111     arg_bufSize->set_isarray(false);
   15112     arg_bufSize->set_type(GLMessage::DataType::INT);
   15113     arg_bufSize->add_intvalue(bufSize);
   15114 
   15115     // copy argument length
   15116     GLMessage_DataType *arg_length = glmsg.add_args();
   15117     arg_length->set_isarray(false);
   15118     arg_length->set_type(GLMessage::DataType::INT64);
   15119     arg_length->add_int64value((uintptr_t)length);
   15120 
   15121     // copy argument groupString
   15122     GLMessage_DataType *arg_groupString = glmsg.add_args();
   15123     arg_groupString->set_isarray(false);
   15124     arg_groupString->set_type(GLMessage::DataType::INT64);
   15125     arg_groupString->add_int64value((uintptr_t)groupString);
   15126 
   15127     // call function
   15128     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15129     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15130     glContext->hooks->gl.glGetPerfMonitorGroupStringAMD(group, bufSize, length, groupString);
   15131     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15132     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15133 
   15134     void *pointerArgs[] = {
   15135         (void *) length,
   15136         (void *) groupString,
   15137     };
   15138 
   15139     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15140                               threadStartTime, threadEndTime,
   15141                               &glmsg, pointerArgs);
   15142     glContext->traceGLMessage(&glmsg);
   15143 }
   15144 
   15145 void GLTrace_glGetPerfMonitorCounterStringAMD(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString) {
   15146     GLMessage glmsg;
   15147     GLTraceContext *glContext = getGLTraceContext();
   15148 
   15149     glmsg.set_function(GLMessage::glGetPerfMonitorCounterStringAMD);
   15150 
   15151     // copy argument group
   15152     GLMessage_DataType *arg_group = glmsg.add_args();
   15153     arg_group->set_isarray(false);
   15154     arg_group->set_type(GLMessage::DataType::INT);
   15155     arg_group->add_intvalue(group);
   15156 
   15157     // copy argument counter
   15158     GLMessage_DataType *arg_counter = glmsg.add_args();
   15159     arg_counter->set_isarray(false);
   15160     arg_counter->set_type(GLMessage::DataType::INT);
   15161     arg_counter->add_intvalue(counter);
   15162 
   15163     // copy argument bufSize
   15164     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   15165     arg_bufSize->set_isarray(false);
   15166     arg_bufSize->set_type(GLMessage::DataType::INT);
   15167     arg_bufSize->add_intvalue(bufSize);
   15168 
   15169     // copy argument length
   15170     GLMessage_DataType *arg_length = glmsg.add_args();
   15171     arg_length->set_isarray(false);
   15172     arg_length->set_type(GLMessage::DataType::INT64);
   15173     arg_length->add_int64value((uintptr_t)length);
   15174 
   15175     // copy argument counterString
   15176     GLMessage_DataType *arg_counterString = glmsg.add_args();
   15177     arg_counterString->set_isarray(false);
   15178     arg_counterString->set_type(GLMessage::DataType::INT64);
   15179     arg_counterString->add_int64value((uintptr_t)counterString);
   15180 
   15181     // call function
   15182     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15183     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15184     glContext->hooks->gl.glGetPerfMonitorCounterStringAMD(group, counter, bufSize, length, counterString);
   15185     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15186     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15187 
   15188     void *pointerArgs[] = {
   15189         (void *) length,
   15190         (void *) counterString,
   15191     };
   15192 
   15193     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15194                               threadStartTime, threadEndTime,
   15195                               &glmsg, pointerArgs);
   15196     glContext->traceGLMessage(&glmsg);
   15197 }
   15198 
   15199 void GLTrace_glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, void * data) {
   15200     GLMessage glmsg;
   15201     GLTraceContext *glContext = getGLTraceContext();
   15202 
   15203     glmsg.set_function(GLMessage::glGetPerfMonitorCounterInfoAMD);
   15204 
   15205     // copy argument group
   15206     GLMessage_DataType *arg_group = glmsg.add_args();
   15207     arg_group->set_isarray(false);
   15208     arg_group->set_type(GLMessage::DataType::INT);
   15209     arg_group->add_intvalue(group);
   15210 
   15211     // copy argument counter
   15212     GLMessage_DataType *arg_counter = glmsg.add_args();
   15213     arg_counter->set_isarray(false);
   15214     arg_counter->set_type(GLMessage::DataType::INT);
   15215     arg_counter->add_intvalue(counter);
   15216 
   15217     // copy argument pname
   15218     GLMessage_DataType *arg_pname = glmsg.add_args();
   15219     arg_pname->set_isarray(false);
   15220     arg_pname->set_type(GLMessage::DataType::ENUM);
   15221     arg_pname->add_intvalue((int)pname);
   15222 
   15223     // copy argument data
   15224     GLMessage_DataType *arg_data = glmsg.add_args();
   15225     arg_data->set_isarray(false);
   15226     arg_data->set_type(GLMessage::DataType::INT64);
   15227     arg_data->add_int64value((uintptr_t)data);
   15228 
   15229     // call function
   15230     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15231     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15232     glContext->hooks->gl.glGetPerfMonitorCounterInfoAMD(group, counter, pname, data);
   15233     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15234     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15235 
   15236     void *pointerArgs[] = {
   15237         (void *) data,
   15238     };
   15239 
   15240     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15241                               threadStartTime, threadEndTime,
   15242                               &glmsg, pointerArgs);
   15243     glContext->traceGLMessage(&glmsg);
   15244 }
   15245 
   15246 void GLTrace_glGenPerfMonitorsAMD(GLsizei n, GLuint * monitors) {
   15247     GLMessage glmsg;
   15248     GLTraceContext *glContext = getGLTraceContext();
   15249 
   15250     glmsg.set_function(GLMessage::glGenPerfMonitorsAMD);
   15251 
   15252     // copy argument n
   15253     GLMessage_DataType *arg_n = glmsg.add_args();
   15254     arg_n->set_isarray(false);
   15255     arg_n->set_type(GLMessage::DataType::INT);
   15256     arg_n->add_intvalue(n);
   15257 
   15258     // copy argument monitors
   15259     GLMessage_DataType *arg_monitors = glmsg.add_args();
   15260     arg_monitors->set_isarray(false);
   15261     arg_monitors->set_type(GLMessage::DataType::INT64);
   15262     arg_monitors->add_int64value((uintptr_t)monitors);
   15263 
   15264     // call function
   15265     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15266     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15267     glContext->hooks->gl.glGenPerfMonitorsAMD(n, monitors);
   15268     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15269     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15270 
   15271     void *pointerArgs[] = {
   15272         (void *) monitors,
   15273     };
   15274 
   15275     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15276                               threadStartTime, threadEndTime,
   15277                               &glmsg, pointerArgs);
   15278     glContext->traceGLMessage(&glmsg);
   15279 }
   15280 
   15281 void GLTrace_glDeletePerfMonitorsAMD(GLsizei n, GLuint * monitors) {
   15282     GLMessage glmsg;
   15283     GLTraceContext *glContext = getGLTraceContext();
   15284 
   15285     glmsg.set_function(GLMessage::glDeletePerfMonitorsAMD);
   15286 
   15287     // copy argument n
   15288     GLMessage_DataType *arg_n = glmsg.add_args();
   15289     arg_n->set_isarray(false);
   15290     arg_n->set_type(GLMessage::DataType::INT);
   15291     arg_n->add_intvalue(n);
   15292 
   15293     // copy argument monitors
   15294     GLMessage_DataType *arg_monitors = glmsg.add_args();
   15295     arg_monitors->set_isarray(false);
   15296     arg_monitors->set_type(GLMessage::DataType::INT64);
   15297     arg_monitors->add_int64value((uintptr_t)monitors);
   15298 
   15299     // call function
   15300     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15301     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15302     glContext->hooks->gl.glDeletePerfMonitorsAMD(n, monitors);
   15303     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15304     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15305 
   15306     void *pointerArgs[] = {
   15307         (void *) monitors,
   15308     };
   15309 
   15310     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15311                               threadStartTime, threadEndTime,
   15312                               &glmsg, pointerArgs);
   15313     glContext->traceGLMessage(&glmsg);
   15314 }
   15315 
   15316 void GLTrace_glSelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList) {
   15317     GLMessage glmsg;
   15318     GLTraceContext *glContext = getGLTraceContext();
   15319 
   15320     glmsg.set_function(GLMessage::glSelectPerfMonitorCountersAMD);
   15321 
   15322     // copy argument monitor
   15323     GLMessage_DataType *arg_monitor = glmsg.add_args();
   15324     arg_monitor->set_isarray(false);
   15325     arg_monitor->set_type(GLMessage::DataType::INT);
   15326     arg_monitor->add_intvalue(monitor);
   15327 
   15328     // copy argument enable
   15329     GLMessage_DataType *arg_enable = glmsg.add_args();
   15330     arg_enable->set_isarray(false);
   15331     arg_enable->set_type(GLMessage::DataType::BOOL);
   15332     arg_enable->add_boolvalue(enable);
   15333 
   15334     // copy argument group
   15335     GLMessage_DataType *arg_group = glmsg.add_args();
   15336     arg_group->set_isarray(false);
   15337     arg_group->set_type(GLMessage::DataType::INT);
   15338     arg_group->add_intvalue(group);
   15339 
   15340     // copy argument numCounters
   15341     GLMessage_DataType *arg_numCounters = glmsg.add_args();
   15342     arg_numCounters->set_isarray(false);
   15343     arg_numCounters->set_type(GLMessage::DataType::INT);
   15344     arg_numCounters->add_intvalue(numCounters);
   15345 
   15346     // copy argument counterList
   15347     GLMessage_DataType *arg_counterList = glmsg.add_args();
   15348     arg_counterList->set_isarray(false);
   15349     arg_counterList->set_type(GLMessage::DataType::INT64);
   15350     arg_counterList->add_int64value((uintptr_t)counterList);
   15351 
   15352     // call function
   15353     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15354     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15355     glContext->hooks->gl.glSelectPerfMonitorCountersAMD(monitor, enable, group, numCounters, counterList);
   15356     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15357     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15358 
   15359     void *pointerArgs[] = {
   15360         (void *) counterList,
   15361     };
   15362 
   15363     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15364                               threadStartTime, threadEndTime,
   15365                               &glmsg, pointerArgs);
   15366     glContext->traceGLMessage(&glmsg);
   15367 }
   15368 
   15369 void GLTrace_glBeginPerfMonitorAMD(GLuint monitor) {
   15370     GLMessage glmsg;
   15371     GLTraceContext *glContext = getGLTraceContext();
   15372 
   15373     glmsg.set_function(GLMessage::glBeginPerfMonitorAMD);
   15374 
   15375     // copy argument monitor
   15376     GLMessage_DataType *arg_monitor = glmsg.add_args();
   15377     arg_monitor->set_isarray(false);
   15378     arg_monitor->set_type(GLMessage::DataType::INT);
   15379     arg_monitor->add_intvalue(monitor);
   15380 
   15381     // call function
   15382     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15383     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15384     glContext->hooks->gl.glBeginPerfMonitorAMD(monitor);
   15385     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15386     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15387 
   15388     void *pointerArgs[] = {
   15389     };
   15390 
   15391     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15392                               threadStartTime, threadEndTime,
   15393                               &glmsg, pointerArgs);
   15394     glContext->traceGLMessage(&glmsg);
   15395 }
   15396 
   15397 void GLTrace_glEndPerfMonitorAMD(GLuint monitor) {
   15398     GLMessage glmsg;
   15399     GLTraceContext *glContext = getGLTraceContext();
   15400 
   15401     glmsg.set_function(GLMessage::glEndPerfMonitorAMD);
   15402 
   15403     // copy argument monitor
   15404     GLMessage_DataType *arg_monitor = glmsg.add_args();
   15405     arg_monitor->set_isarray(false);
   15406     arg_monitor->set_type(GLMessage::DataType::INT);
   15407     arg_monitor->add_intvalue(monitor);
   15408 
   15409     // call function
   15410     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15411     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15412     glContext->hooks->gl.glEndPerfMonitorAMD(monitor);
   15413     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15414     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15415 
   15416     void *pointerArgs[] = {
   15417     };
   15418 
   15419     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15420                               threadStartTime, threadEndTime,
   15421                               &glmsg, pointerArgs);
   15422     glContext->traceGLMessage(&glmsg);
   15423 }
   15424 
   15425 void GLTrace_glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten) {
   15426     GLMessage glmsg;
   15427     GLTraceContext *glContext = getGLTraceContext();
   15428 
   15429     glmsg.set_function(GLMessage::glGetPerfMonitorCounterDataAMD);
   15430 
   15431     // copy argument monitor
   15432     GLMessage_DataType *arg_monitor = glmsg.add_args();
   15433     arg_monitor->set_isarray(false);
   15434     arg_monitor->set_type(GLMessage::DataType::INT);
   15435     arg_monitor->add_intvalue(monitor);
   15436 
   15437     // copy argument pname
   15438     GLMessage_DataType *arg_pname = glmsg.add_args();
   15439     arg_pname->set_isarray(false);
   15440     arg_pname->set_type(GLMessage::DataType::ENUM);
   15441     arg_pname->add_intvalue((int)pname);
   15442 
   15443     // copy argument dataSize
   15444     GLMessage_DataType *arg_dataSize = glmsg.add_args();
   15445     arg_dataSize->set_isarray(false);
   15446     arg_dataSize->set_type(GLMessage::DataType::INT);
   15447     arg_dataSize->add_intvalue(dataSize);
   15448 
   15449     // copy argument data
   15450     GLMessage_DataType *arg_data = glmsg.add_args();
   15451     arg_data->set_isarray(false);
   15452     arg_data->set_type(GLMessage::DataType::INT64);
   15453     arg_data->add_int64value((uintptr_t)data);
   15454 
   15455     // copy argument bytesWritten
   15456     GLMessage_DataType *arg_bytesWritten = glmsg.add_args();
   15457     arg_bytesWritten->set_isarray(false);
   15458     arg_bytesWritten->set_type(GLMessage::DataType::INT64);
   15459     arg_bytesWritten->add_int64value((uintptr_t)bytesWritten);
   15460 
   15461     // call function
   15462     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15463     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15464     glContext->hooks->gl.glGetPerfMonitorCounterDataAMD(monitor, pname, dataSize, data, bytesWritten);
   15465     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15466     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15467 
   15468     void *pointerArgs[] = {
   15469         (void *) data,
   15470         (void *) bytesWritten,
   15471     };
   15472 
   15473     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15474                               threadStartTime, threadEndTime,
   15475                               &glmsg, pointerArgs);
   15476     glContext->traceGLMessage(&glmsg);
   15477 }
   15478 
   15479 void GLTrace_glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
   15480     GLMessage glmsg;
   15481     GLTraceContext *glContext = getGLTraceContext();
   15482 
   15483     glmsg.set_function(GLMessage::glBlitFramebufferANGLE);
   15484 
   15485     // copy argument srcX0
   15486     GLMessage_DataType *arg_srcX0 = glmsg.add_args();
   15487     arg_srcX0->set_isarray(false);
   15488     arg_srcX0->set_type(GLMessage::DataType::INT);
   15489     arg_srcX0->add_intvalue(srcX0);
   15490 
   15491     // copy argument srcY0
   15492     GLMessage_DataType *arg_srcY0 = glmsg.add_args();
   15493     arg_srcY0->set_isarray(false);
   15494     arg_srcY0->set_type(GLMessage::DataType::INT);
   15495     arg_srcY0->add_intvalue(srcY0);
   15496 
   15497     // copy argument srcX1
   15498     GLMessage_DataType *arg_srcX1 = glmsg.add_args();
   15499     arg_srcX1->set_isarray(false);
   15500     arg_srcX1->set_type(GLMessage::DataType::INT);
   15501     arg_srcX1->add_intvalue(srcX1);
   15502 
   15503     // copy argument srcY1
   15504     GLMessage_DataType *arg_srcY1 = glmsg.add_args();
   15505     arg_srcY1->set_isarray(false);
   15506     arg_srcY1->set_type(GLMessage::DataType::INT);
   15507     arg_srcY1->add_intvalue(srcY1);
   15508 
   15509     // copy argument dstX0
   15510     GLMessage_DataType *arg_dstX0 = glmsg.add_args();
   15511     arg_dstX0->set_isarray(false);
   15512     arg_dstX0->set_type(GLMessage::DataType::INT);
   15513     arg_dstX0->add_intvalue(dstX0);
   15514 
   15515     // copy argument dstY0
   15516     GLMessage_DataType *arg_dstY0 = glmsg.add_args();
   15517     arg_dstY0->set_isarray(false);
   15518     arg_dstY0->set_type(GLMessage::DataType::INT);
   15519     arg_dstY0->add_intvalue(dstY0);
   15520 
   15521     // copy argument dstX1
   15522     GLMessage_DataType *arg_dstX1 = glmsg.add_args();
   15523     arg_dstX1->set_isarray(false);
   15524     arg_dstX1->set_type(GLMessage::DataType::INT);
   15525     arg_dstX1->add_intvalue(dstX1);
   15526 
   15527     // copy argument dstY1
   15528     GLMessage_DataType *arg_dstY1 = glmsg.add_args();
   15529     arg_dstY1->set_isarray(false);
   15530     arg_dstY1->set_type(GLMessage::DataType::INT);
   15531     arg_dstY1->add_intvalue(dstY1);
   15532 
   15533     // copy argument mask
   15534     GLMessage_DataType *arg_mask = glmsg.add_args();
   15535     arg_mask->set_isarray(false);
   15536     arg_mask->set_type(GLMessage::DataType::INT);
   15537     arg_mask->add_intvalue(mask);
   15538 
   15539     // copy argument filter
   15540     GLMessage_DataType *arg_filter = glmsg.add_args();
   15541     arg_filter->set_isarray(false);
   15542     arg_filter->set_type(GLMessage::DataType::ENUM);
   15543     arg_filter->add_intvalue((int)filter);
   15544 
   15545     // call function
   15546     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15547     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15548     glContext->hooks->gl.glBlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
   15549     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15550     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15551 
   15552     void *pointerArgs[] = {
   15553     };
   15554 
   15555     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15556                               threadStartTime, threadEndTime,
   15557                               &glmsg, pointerArgs);
   15558     glContext->traceGLMessage(&glmsg);
   15559 }
   15560 
   15561 void GLTrace_glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
   15562     GLMessage glmsg;
   15563     GLTraceContext *glContext = getGLTraceContext();
   15564 
   15565     glmsg.set_function(GLMessage::glRenderbufferStorageMultisampleANGLE);
   15566 
   15567     // copy argument target
   15568     GLMessage_DataType *arg_target = glmsg.add_args();
   15569     arg_target->set_isarray(false);
   15570     arg_target->set_type(GLMessage::DataType::ENUM);
   15571     arg_target->add_intvalue((int)target);
   15572 
   15573     // copy argument samples
   15574     GLMessage_DataType *arg_samples = glmsg.add_args();
   15575     arg_samples->set_isarray(false);
   15576     arg_samples->set_type(GLMessage::DataType::INT);
   15577     arg_samples->add_intvalue(samples);
   15578 
   15579     // copy argument internalformat
   15580     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   15581     arg_internalformat->set_isarray(false);
   15582     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   15583     arg_internalformat->add_intvalue((int)internalformat);
   15584 
   15585     // copy argument width
   15586     GLMessage_DataType *arg_width = glmsg.add_args();
   15587     arg_width->set_isarray(false);
   15588     arg_width->set_type(GLMessage::DataType::INT);
   15589     arg_width->add_intvalue(width);
   15590 
   15591     // copy argument height
   15592     GLMessage_DataType *arg_height = glmsg.add_args();
   15593     arg_height->set_isarray(false);
   15594     arg_height->set_type(GLMessage::DataType::INT);
   15595     arg_height->add_intvalue(height);
   15596 
   15597     // call function
   15598     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15599     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15600     glContext->hooks->gl.glRenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
   15601     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15602     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15603 
   15604     void *pointerArgs[] = {
   15605     };
   15606 
   15607     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15608                               threadStartTime, threadEndTime,
   15609                               &glmsg, pointerArgs);
   15610     glContext->traceGLMessage(&glmsg);
   15611 }
   15612 
   15613 void GLTrace_glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
   15614     GLMessage glmsg;
   15615     GLTraceContext *glContext = getGLTraceContext();
   15616 
   15617     glmsg.set_function(GLMessage::glDrawArraysInstancedANGLE);
   15618 
   15619     // copy argument mode
   15620     GLMessage_DataType *arg_mode = glmsg.add_args();
   15621     arg_mode->set_isarray(false);
   15622     arg_mode->set_type(GLMessage::DataType::ENUM);
   15623     arg_mode->add_intvalue((int)mode);
   15624 
   15625     // copy argument first
   15626     GLMessage_DataType *arg_first = glmsg.add_args();
   15627     arg_first->set_isarray(false);
   15628     arg_first->set_type(GLMessage::DataType::INT);
   15629     arg_first->add_intvalue(first);
   15630 
   15631     // copy argument count
   15632     GLMessage_DataType *arg_count = glmsg.add_args();
   15633     arg_count->set_isarray(false);
   15634     arg_count->set_type(GLMessage::DataType::INT);
   15635     arg_count->add_intvalue(count);
   15636 
   15637     // copy argument primcount
   15638     GLMessage_DataType *arg_primcount = glmsg.add_args();
   15639     arg_primcount->set_isarray(false);
   15640     arg_primcount->set_type(GLMessage::DataType::INT);
   15641     arg_primcount->add_intvalue(primcount);
   15642 
   15643     // call function
   15644     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15645     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15646     glContext->hooks->gl.glDrawArraysInstancedANGLE(mode, first, count, primcount);
   15647     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15648     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15649 
   15650     void *pointerArgs[] = {
   15651     };
   15652 
   15653     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15654                               threadStartTime, threadEndTime,
   15655                               &glmsg, pointerArgs);
   15656     glContext->traceGLMessage(&glmsg);
   15657 }
   15658 
   15659 void GLTrace_glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount) {
   15660     GLMessage glmsg;
   15661     GLTraceContext *glContext = getGLTraceContext();
   15662 
   15663     glmsg.set_function(GLMessage::glDrawElementsInstancedANGLE);
   15664 
   15665     // copy argument mode
   15666     GLMessage_DataType *arg_mode = glmsg.add_args();
   15667     arg_mode->set_isarray(false);
   15668     arg_mode->set_type(GLMessage::DataType::ENUM);
   15669     arg_mode->add_intvalue((int)mode);
   15670 
   15671     // copy argument count
   15672     GLMessage_DataType *arg_count = glmsg.add_args();
   15673     arg_count->set_isarray(false);
   15674     arg_count->set_type(GLMessage::DataType::INT);
   15675     arg_count->add_intvalue(count);
   15676 
   15677     // copy argument type
   15678     GLMessage_DataType *arg_type = glmsg.add_args();
   15679     arg_type->set_isarray(false);
   15680     arg_type->set_type(GLMessage::DataType::ENUM);
   15681     arg_type->add_intvalue((int)type);
   15682 
   15683     // copy argument indices
   15684     GLMessage_DataType *arg_indices = glmsg.add_args();
   15685     arg_indices->set_isarray(false);
   15686     arg_indices->set_type(GLMessage::DataType::INT64);
   15687     arg_indices->add_int64value((uintptr_t)indices);
   15688 
   15689     // copy argument primcount
   15690     GLMessage_DataType *arg_primcount = glmsg.add_args();
   15691     arg_primcount->set_isarray(false);
   15692     arg_primcount->set_type(GLMessage::DataType::INT);
   15693     arg_primcount->add_intvalue(primcount);
   15694 
   15695     // call function
   15696     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15697     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15698     glContext->hooks->gl.glDrawElementsInstancedANGLE(mode, count, type, indices, primcount);
   15699     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15700     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15701 
   15702     void *pointerArgs[] = {
   15703         (void *) indices,
   15704     };
   15705 
   15706     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15707                               threadStartTime, threadEndTime,
   15708                               &glmsg, pointerArgs);
   15709     glContext->traceGLMessage(&glmsg);
   15710 }
   15711 
   15712 void GLTrace_glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) {
   15713     GLMessage glmsg;
   15714     GLTraceContext *glContext = getGLTraceContext();
   15715 
   15716     glmsg.set_function(GLMessage::glVertexAttribDivisorANGLE);
   15717 
   15718     // copy argument index
   15719     GLMessage_DataType *arg_index = glmsg.add_args();
   15720     arg_index->set_isarray(false);
   15721     arg_index->set_type(GLMessage::DataType::INT);
   15722     arg_index->add_intvalue(index);
   15723 
   15724     // copy argument divisor
   15725     GLMessage_DataType *arg_divisor = glmsg.add_args();
   15726     arg_divisor->set_isarray(false);
   15727     arg_divisor->set_type(GLMessage::DataType::INT);
   15728     arg_divisor->add_intvalue(divisor);
   15729 
   15730     // call function
   15731     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15732     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15733     glContext->hooks->gl.glVertexAttribDivisorANGLE(index, divisor);
   15734     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15735     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15736 
   15737     void *pointerArgs[] = {
   15738     };
   15739 
   15740     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15741                               threadStartTime, threadEndTime,
   15742                               &glmsg, pointerArgs);
   15743     glContext->traceGLMessage(&glmsg);
   15744 }
   15745 
   15746 void GLTrace_glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source) {
   15747     GLMessage glmsg;
   15748     GLTraceContext *glContext = getGLTraceContext();
   15749 
   15750     glmsg.set_function(GLMessage::glGetTranslatedShaderSourceANGLE);
   15751 
   15752     // copy argument shader
   15753     GLMessage_DataType *arg_shader = glmsg.add_args();
   15754     arg_shader->set_isarray(false);
   15755     arg_shader->set_type(GLMessage::DataType::INT);
   15756     arg_shader->add_intvalue(shader);
   15757 
   15758     // copy argument bufsize
   15759     GLMessage_DataType *arg_bufsize = glmsg.add_args();
   15760     arg_bufsize->set_isarray(false);
   15761     arg_bufsize->set_type(GLMessage::DataType::INT);
   15762     arg_bufsize->add_intvalue(bufsize);
   15763 
   15764     // copy argument length
   15765     GLMessage_DataType *arg_length = glmsg.add_args();
   15766     arg_length->set_isarray(false);
   15767     arg_length->set_type(GLMessage::DataType::INT64);
   15768     arg_length->add_int64value((uintptr_t)length);
   15769 
   15770     // copy argument source
   15771     GLMessage_DataType *arg_source = glmsg.add_args();
   15772     arg_source->set_isarray(false);
   15773     arg_source->set_type(GLMessage::DataType::INT64);
   15774     arg_source->add_int64value((uintptr_t)source);
   15775 
   15776     // call function
   15777     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15778     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15779     glContext->hooks->gl.glGetTranslatedShaderSourceANGLE(shader, bufsize, length, source);
   15780     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15781     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15782 
   15783     void *pointerArgs[] = {
   15784         (void *) length,
   15785         (void *) source,
   15786     };
   15787 
   15788     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15789                               threadStartTime, threadEndTime,
   15790                               &glmsg, pointerArgs);
   15791     glContext->traceGLMessage(&glmsg);
   15792 }
   15793 
   15794 void GLTrace_glCopyTextureLevelsAPPLE(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount) {
   15795     GLMessage glmsg;
   15796     GLTraceContext *glContext = getGLTraceContext();
   15797 
   15798     glmsg.set_function(GLMessage::glCopyTextureLevelsAPPLE);
   15799 
   15800     // copy argument destinationTexture
   15801     GLMessage_DataType *arg_destinationTexture = glmsg.add_args();
   15802     arg_destinationTexture->set_isarray(false);
   15803     arg_destinationTexture->set_type(GLMessage::DataType::INT);
   15804     arg_destinationTexture->add_intvalue(destinationTexture);
   15805 
   15806     // copy argument sourceTexture
   15807     GLMessage_DataType *arg_sourceTexture = glmsg.add_args();
   15808     arg_sourceTexture->set_isarray(false);
   15809     arg_sourceTexture->set_type(GLMessage::DataType::INT);
   15810     arg_sourceTexture->add_intvalue(sourceTexture);
   15811 
   15812     // copy argument sourceBaseLevel
   15813     GLMessage_DataType *arg_sourceBaseLevel = glmsg.add_args();
   15814     arg_sourceBaseLevel->set_isarray(false);
   15815     arg_sourceBaseLevel->set_type(GLMessage::DataType::INT);
   15816     arg_sourceBaseLevel->add_intvalue(sourceBaseLevel);
   15817 
   15818     // copy argument sourceLevelCount
   15819     GLMessage_DataType *arg_sourceLevelCount = glmsg.add_args();
   15820     arg_sourceLevelCount->set_isarray(false);
   15821     arg_sourceLevelCount->set_type(GLMessage::DataType::INT);
   15822     arg_sourceLevelCount->add_intvalue(sourceLevelCount);
   15823 
   15824     // call function
   15825     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15826     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15827     glContext->hooks->gl.glCopyTextureLevelsAPPLE(destinationTexture, sourceTexture, sourceBaseLevel, sourceLevelCount);
   15828     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15829     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15830 
   15831     void *pointerArgs[] = {
   15832     };
   15833 
   15834     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15835                               threadStartTime, threadEndTime,
   15836                               &glmsg, pointerArgs);
   15837     glContext->traceGLMessage(&glmsg);
   15838 }
   15839 
   15840 void GLTrace_glRenderbufferStorageMultisampleAPPLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
   15841     GLMessage glmsg;
   15842     GLTraceContext *glContext = getGLTraceContext();
   15843 
   15844     glmsg.set_function(GLMessage::glRenderbufferStorageMultisampleAPPLE);
   15845 
   15846     // copy argument target
   15847     GLMessage_DataType *arg_target = glmsg.add_args();
   15848     arg_target->set_isarray(false);
   15849     arg_target->set_type(GLMessage::DataType::ENUM);
   15850     arg_target->add_intvalue((int)target);
   15851 
   15852     // copy argument samples
   15853     GLMessage_DataType *arg_samples = glmsg.add_args();
   15854     arg_samples->set_isarray(false);
   15855     arg_samples->set_type(GLMessage::DataType::INT);
   15856     arg_samples->add_intvalue(samples);
   15857 
   15858     // copy argument internalformat
   15859     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   15860     arg_internalformat->set_isarray(false);
   15861     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   15862     arg_internalformat->add_intvalue((int)internalformat);
   15863 
   15864     // copy argument width
   15865     GLMessage_DataType *arg_width = glmsg.add_args();
   15866     arg_width->set_isarray(false);
   15867     arg_width->set_type(GLMessage::DataType::INT);
   15868     arg_width->add_intvalue(width);
   15869 
   15870     // copy argument height
   15871     GLMessage_DataType *arg_height = glmsg.add_args();
   15872     arg_height->set_isarray(false);
   15873     arg_height->set_type(GLMessage::DataType::INT);
   15874     arg_height->add_intvalue(height);
   15875 
   15876     // call function
   15877     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15878     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15879     glContext->hooks->gl.glRenderbufferStorageMultisampleAPPLE(target, samples, internalformat, width, height);
   15880     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15881     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15882 
   15883     void *pointerArgs[] = {
   15884     };
   15885 
   15886     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15887                               threadStartTime, threadEndTime,
   15888                               &glmsg, pointerArgs);
   15889     glContext->traceGLMessage(&glmsg);
   15890 }
   15891 
   15892 void GLTrace_glResolveMultisampleFramebufferAPPLE(void) {
   15893     GLMessage glmsg;
   15894     GLTraceContext *glContext = getGLTraceContext();
   15895 
   15896     glmsg.set_function(GLMessage::glResolveMultisampleFramebufferAPPLE);
   15897 
   15898     // call function
   15899     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15900     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15901     glContext->hooks->gl.glResolveMultisampleFramebufferAPPLE();
   15902     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15903     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15904 
   15905     void *pointerArgs[] = {
   15906     };
   15907 
   15908     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15909                               threadStartTime, threadEndTime,
   15910                               &glmsg, pointerArgs);
   15911     glContext->traceGLMessage(&glmsg);
   15912 }
   15913 
   15914 GLsync GLTrace_glFenceSyncAPPLE(GLenum condition, GLbitfield flags) {
   15915     GLMessage glmsg;
   15916     GLTraceContext *glContext = getGLTraceContext();
   15917 
   15918     glmsg.set_function(GLMessage::glFenceSyncAPPLE);
   15919 
   15920     // copy argument condition
   15921     GLMessage_DataType *arg_condition = glmsg.add_args();
   15922     arg_condition->set_isarray(false);
   15923     arg_condition->set_type(GLMessage::DataType::ENUM);
   15924     arg_condition->add_intvalue((int)condition);
   15925 
   15926     // copy argument flags
   15927     GLMessage_DataType *arg_flags = glmsg.add_args();
   15928     arg_flags->set_isarray(false);
   15929     arg_flags->set_type(GLMessage::DataType::INT);
   15930     arg_flags->add_intvalue(flags);
   15931 
   15932     // call function
   15933     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15934     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15935     GLsync retValue = glContext->hooks->gl.glFenceSyncAPPLE(condition, flags);
   15936     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15937     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15938 
   15939     // set return value
   15940     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   15941     rt->set_isarray(false);
   15942     rt->set_type(GLMessage::DataType::INT64);
   15943     rt->add_int64value((uintptr_t)retValue);
   15944 
   15945     void *pointerArgs[] = {
   15946         (void *) retValue,
   15947     };
   15948 
   15949     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15950                               threadStartTime, threadEndTime,
   15951                               &glmsg, pointerArgs);
   15952     glContext->traceGLMessage(&glmsg);
   15953 
   15954     return retValue;
   15955 }
   15956 
   15957 GLboolean GLTrace_glIsSyncAPPLE(GLsync sync) {
   15958     GLMessage glmsg;
   15959     GLTraceContext *glContext = getGLTraceContext();
   15960 
   15961     glmsg.set_function(GLMessage::glIsSyncAPPLE);
   15962 
   15963     // copy argument sync
   15964     GLMessage_DataType *arg_sync = glmsg.add_args();
   15965     arg_sync->set_isarray(false);
   15966     arg_sync->set_type(GLMessage::DataType::INT64);
   15967     arg_sync->add_int64value((uintptr_t)sync);
   15968 
   15969     // call function
   15970     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15971     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   15972     GLboolean retValue = glContext->hooks->gl.glIsSyncAPPLE(sync);
   15973     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   15974     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   15975 
   15976     // set return value
   15977     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   15978     rt->set_isarray(false);
   15979     rt->set_type(GLMessage::DataType::BOOL);
   15980     rt->add_boolvalue(retValue);
   15981 
   15982     void *pointerArgs[] = {
   15983         (void *) sync,
   15984     };
   15985 
   15986     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   15987                               threadStartTime, threadEndTime,
   15988                               &glmsg, pointerArgs);
   15989     glContext->traceGLMessage(&glmsg);
   15990 
   15991     return retValue;
   15992 }
   15993 
   15994 void GLTrace_glDeleteSyncAPPLE(GLsync sync) {
   15995     GLMessage glmsg;
   15996     GLTraceContext *glContext = getGLTraceContext();
   15997 
   15998     glmsg.set_function(GLMessage::glDeleteSyncAPPLE);
   15999 
   16000     // copy argument sync
   16001     GLMessage_DataType *arg_sync = glmsg.add_args();
   16002     arg_sync->set_isarray(false);
   16003     arg_sync->set_type(GLMessage::DataType::INT64);
   16004     arg_sync->add_int64value((uintptr_t)sync);
   16005 
   16006     // call function
   16007     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16008     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16009     glContext->hooks->gl.glDeleteSyncAPPLE(sync);
   16010     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16011     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16012 
   16013     void *pointerArgs[] = {
   16014         (void *) sync,
   16015     };
   16016 
   16017     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16018                               threadStartTime, threadEndTime,
   16019                               &glmsg, pointerArgs);
   16020     glContext->traceGLMessage(&glmsg);
   16021 }
   16022 
   16023 GLenum GLTrace_glClientWaitSyncAPPLE(GLsync sync, GLbitfield flags, GLuint64 timeout) {
   16024     GLMessage glmsg;
   16025     GLTraceContext *glContext = getGLTraceContext();
   16026 
   16027     glmsg.set_function(GLMessage::glClientWaitSyncAPPLE);
   16028 
   16029     // copy argument sync
   16030     GLMessage_DataType *arg_sync = glmsg.add_args();
   16031     arg_sync->set_isarray(false);
   16032     arg_sync->set_type(GLMessage::DataType::INT64);
   16033     arg_sync->add_int64value((uintptr_t)sync);
   16034 
   16035     // copy argument flags
   16036     GLMessage_DataType *arg_flags = glmsg.add_args();
   16037     arg_flags->set_isarray(false);
   16038     arg_flags->set_type(GLMessage::DataType::INT);
   16039     arg_flags->add_intvalue(flags);
   16040 
   16041     // copy argument timeout
   16042     GLMessage_DataType *arg_timeout = glmsg.add_args();
   16043     arg_timeout->set_isarray(false);
   16044     arg_timeout->set_type(GLMessage::DataType::INT64);
   16045     arg_timeout->add_int64value(timeout);
   16046 
   16047     // call function
   16048     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16049     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16050     GLenum retValue = glContext->hooks->gl.glClientWaitSyncAPPLE(sync, flags, timeout);
   16051     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16052     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16053 
   16054     // set return value
   16055     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   16056     rt->set_isarray(false);
   16057     rt->set_type(GLMessage::DataType::ENUM);
   16058     rt->add_intvalue((int)retValue);
   16059 
   16060     void *pointerArgs[] = {
   16061         (void *) sync,
   16062     };
   16063 
   16064     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16065                               threadStartTime, threadEndTime,
   16066                               &glmsg, pointerArgs);
   16067     glContext->traceGLMessage(&glmsg);
   16068 
   16069     return retValue;
   16070 }
   16071 
   16072 void GLTrace_glWaitSyncAPPLE(GLsync sync, GLbitfield flags, GLuint64 timeout) {
   16073     GLMessage glmsg;
   16074     GLTraceContext *glContext = getGLTraceContext();
   16075 
   16076     glmsg.set_function(GLMessage::glWaitSyncAPPLE);
   16077 
   16078     // copy argument sync
   16079     GLMessage_DataType *arg_sync = glmsg.add_args();
   16080     arg_sync->set_isarray(false);
   16081     arg_sync->set_type(GLMessage::DataType::INT64);
   16082     arg_sync->add_int64value((uintptr_t)sync);
   16083 
   16084     // copy argument flags
   16085     GLMessage_DataType *arg_flags = glmsg.add_args();
   16086     arg_flags->set_isarray(false);
   16087     arg_flags->set_type(GLMessage::DataType::INT);
   16088     arg_flags->add_intvalue(flags);
   16089 
   16090     // copy argument timeout
   16091     GLMessage_DataType *arg_timeout = glmsg.add_args();
   16092     arg_timeout->set_isarray(false);
   16093     arg_timeout->set_type(GLMessage::DataType::INT64);
   16094     arg_timeout->add_int64value(timeout);
   16095 
   16096     // call function
   16097     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16098     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16099     glContext->hooks->gl.glWaitSyncAPPLE(sync, flags, timeout);
   16100     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16101     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16102 
   16103     void *pointerArgs[] = {
   16104         (void *) sync,
   16105     };
   16106 
   16107     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16108                               threadStartTime, threadEndTime,
   16109                               &glmsg, pointerArgs);
   16110     glContext->traceGLMessage(&glmsg);
   16111 }
   16112 
   16113 void GLTrace_glGetInteger64vAPPLE(GLenum pname, GLint64 * params) {
   16114     GLMessage glmsg;
   16115     GLTraceContext *glContext = getGLTraceContext();
   16116 
   16117     glmsg.set_function(GLMessage::glGetInteger64vAPPLE);
   16118 
   16119     // copy argument pname
   16120     GLMessage_DataType *arg_pname = glmsg.add_args();
   16121     arg_pname->set_isarray(false);
   16122     arg_pname->set_type(GLMessage::DataType::ENUM);
   16123     arg_pname->add_intvalue((int)pname);
   16124 
   16125     // copy argument params
   16126     GLMessage_DataType *arg_params = glmsg.add_args();
   16127     arg_params->set_isarray(false);
   16128     arg_params->set_type(GLMessage::DataType::INT64);
   16129     arg_params->add_int64value((uintptr_t)params);
   16130 
   16131     // call function
   16132     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16133     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16134     glContext->hooks->gl.glGetInteger64vAPPLE(pname, params);
   16135     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16136     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16137 
   16138     void *pointerArgs[] = {
   16139         (void *) params,
   16140     };
   16141 
   16142     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16143                               threadStartTime, threadEndTime,
   16144                               &glmsg, pointerArgs);
   16145     glContext->traceGLMessage(&glmsg);
   16146 }
   16147 
   16148 void GLTrace_glGetSyncivAPPLE(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values) {
   16149     GLMessage glmsg;
   16150     GLTraceContext *glContext = getGLTraceContext();
   16151 
   16152     glmsg.set_function(GLMessage::glGetSyncivAPPLE);
   16153 
   16154     // copy argument sync
   16155     GLMessage_DataType *arg_sync = glmsg.add_args();
   16156     arg_sync->set_isarray(false);
   16157     arg_sync->set_type(GLMessage::DataType::INT64);
   16158     arg_sync->add_int64value((uintptr_t)sync);
   16159 
   16160     // copy argument pname
   16161     GLMessage_DataType *arg_pname = glmsg.add_args();
   16162     arg_pname->set_isarray(false);
   16163     arg_pname->set_type(GLMessage::DataType::ENUM);
   16164     arg_pname->add_intvalue((int)pname);
   16165 
   16166     // copy argument bufSize
   16167     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   16168     arg_bufSize->set_isarray(false);
   16169     arg_bufSize->set_type(GLMessage::DataType::INT);
   16170     arg_bufSize->add_intvalue(bufSize);
   16171 
   16172     // copy argument length
   16173     GLMessage_DataType *arg_length = glmsg.add_args();
   16174     arg_length->set_isarray(false);
   16175     arg_length->set_type(GLMessage::DataType::INT64);
   16176     arg_length->add_int64value((uintptr_t)length);
   16177 
   16178     // copy argument values
   16179     GLMessage_DataType *arg_values = glmsg.add_args();
   16180     arg_values->set_isarray(false);
   16181     arg_values->set_type(GLMessage::DataType::INT64);
   16182     arg_values->add_int64value((uintptr_t)values);
   16183 
   16184     // call function
   16185     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16186     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16187     glContext->hooks->gl.glGetSyncivAPPLE(sync, pname, bufSize, length, values);
   16188     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16189     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16190 
   16191     void *pointerArgs[] = {
   16192         (void *) sync,
   16193         (void *) length,
   16194         (void *) values,
   16195     };
   16196 
   16197     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16198                               threadStartTime, threadEndTime,
   16199                               &glmsg, pointerArgs);
   16200     glContext->traceGLMessage(&glmsg);
   16201 }
   16202 
   16203 void GLTrace_glCopyImageSubDataEXT(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) {
   16204     GLMessage glmsg;
   16205     GLTraceContext *glContext = getGLTraceContext();
   16206 
   16207     glmsg.set_function(GLMessage::glCopyImageSubDataEXT);
   16208 
   16209     // copy argument srcName
   16210     GLMessage_DataType *arg_srcName = glmsg.add_args();
   16211     arg_srcName->set_isarray(false);
   16212     arg_srcName->set_type(GLMessage::DataType::INT);
   16213     arg_srcName->add_intvalue(srcName);
   16214 
   16215     // copy argument srcTarget
   16216     GLMessage_DataType *arg_srcTarget = glmsg.add_args();
   16217     arg_srcTarget->set_isarray(false);
   16218     arg_srcTarget->set_type(GLMessage::DataType::ENUM);
   16219     arg_srcTarget->add_intvalue((int)srcTarget);
   16220 
   16221     // copy argument srcLevel
   16222     GLMessage_DataType *arg_srcLevel = glmsg.add_args();
   16223     arg_srcLevel->set_isarray(false);
   16224     arg_srcLevel->set_type(GLMessage::DataType::INT);
   16225     arg_srcLevel->add_intvalue(srcLevel);
   16226 
   16227     // copy argument srcX
   16228     GLMessage_DataType *arg_srcX = glmsg.add_args();
   16229     arg_srcX->set_isarray(false);
   16230     arg_srcX->set_type(GLMessage::DataType::INT);
   16231     arg_srcX->add_intvalue(srcX);
   16232 
   16233     // copy argument srcY
   16234     GLMessage_DataType *arg_srcY = glmsg.add_args();
   16235     arg_srcY->set_isarray(false);
   16236     arg_srcY->set_type(GLMessage::DataType::INT);
   16237     arg_srcY->add_intvalue(srcY);
   16238 
   16239     // copy argument srcZ
   16240     GLMessage_DataType *arg_srcZ = glmsg.add_args();
   16241     arg_srcZ->set_isarray(false);
   16242     arg_srcZ->set_type(GLMessage::DataType::INT);
   16243     arg_srcZ->add_intvalue(srcZ);
   16244 
   16245     // copy argument dstName
   16246     GLMessage_DataType *arg_dstName = glmsg.add_args();
   16247     arg_dstName->set_isarray(false);
   16248     arg_dstName->set_type(GLMessage::DataType::INT);
   16249     arg_dstName->add_intvalue(dstName);
   16250 
   16251     // copy argument dstTarget
   16252     GLMessage_DataType *arg_dstTarget = glmsg.add_args();
   16253     arg_dstTarget->set_isarray(false);
   16254     arg_dstTarget->set_type(GLMessage::DataType::ENUM);
   16255     arg_dstTarget->add_intvalue((int)dstTarget);
   16256 
   16257     // copy argument dstLevel
   16258     GLMessage_DataType *arg_dstLevel = glmsg.add_args();
   16259     arg_dstLevel->set_isarray(false);
   16260     arg_dstLevel->set_type(GLMessage::DataType::INT);
   16261     arg_dstLevel->add_intvalue(dstLevel);
   16262 
   16263     // copy argument dstX
   16264     GLMessage_DataType *arg_dstX = glmsg.add_args();
   16265     arg_dstX->set_isarray(false);
   16266     arg_dstX->set_type(GLMessage::DataType::INT);
   16267     arg_dstX->add_intvalue(dstX);
   16268 
   16269     // copy argument dstY
   16270     GLMessage_DataType *arg_dstY = glmsg.add_args();
   16271     arg_dstY->set_isarray(false);
   16272     arg_dstY->set_type(GLMessage::DataType::INT);
   16273     arg_dstY->add_intvalue(dstY);
   16274 
   16275     // copy argument dstZ
   16276     GLMessage_DataType *arg_dstZ = glmsg.add_args();
   16277     arg_dstZ->set_isarray(false);
   16278     arg_dstZ->set_type(GLMessage::DataType::INT);
   16279     arg_dstZ->add_intvalue(dstZ);
   16280 
   16281     // copy argument srcWidth
   16282     GLMessage_DataType *arg_srcWidth = glmsg.add_args();
   16283     arg_srcWidth->set_isarray(false);
   16284     arg_srcWidth->set_type(GLMessage::DataType::INT);
   16285     arg_srcWidth->add_intvalue(srcWidth);
   16286 
   16287     // copy argument srcHeight
   16288     GLMessage_DataType *arg_srcHeight = glmsg.add_args();
   16289     arg_srcHeight->set_isarray(false);
   16290     arg_srcHeight->set_type(GLMessage::DataType::INT);
   16291     arg_srcHeight->add_intvalue(srcHeight);
   16292 
   16293     // copy argument srcDepth
   16294     GLMessage_DataType *arg_srcDepth = glmsg.add_args();
   16295     arg_srcDepth->set_isarray(false);
   16296     arg_srcDepth->set_type(GLMessage::DataType::INT);
   16297     arg_srcDepth->add_intvalue(srcDepth);
   16298 
   16299     // call function
   16300     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16301     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16302     glContext->hooks->gl.glCopyImageSubDataEXT(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
   16303     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16304     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16305 
   16306     void *pointerArgs[] = {
   16307     };
   16308 
   16309     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16310                               threadStartTime, threadEndTime,
   16311                               &glmsg, pointerArgs);
   16312     glContext->traceGLMessage(&glmsg);
   16313 }
   16314 
   16315 void GLTrace_glLabelObjectEXT(GLenum type, GLuint object, GLsizei length, const GLchar * label) {
   16316     GLMessage glmsg;
   16317     GLTraceContext *glContext = getGLTraceContext();
   16318 
   16319     glmsg.set_function(GLMessage::glLabelObjectEXT);
   16320 
   16321     // copy argument type
   16322     GLMessage_DataType *arg_type = glmsg.add_args();
   16323     arg_type->set_isarray(false);
   16324     arg_type->set_type(GLMessage::DataType::ENUM);
   16325     arg_type->add_intvalue((int)type);
   16326 
   16327     // copy argument object
   16328     GLMessage_DataType *arg_object = glmsg.add_args();
   16329     arg_object->set_isarray(false);
   16330     arg_object->set_type(GLMessage::DataType::INT);
   16331     arg_object->add_intvalue(object);
   16332 
   16333     // copy argument length
   16334     GLMessage_DataType *arg_length = glmsg.add_args();
   16335     arg_length->set_isarray(false);
   16336     arg_length->set_type(GLMessage::DataType::INT);
   16337     arg_length->add_intvalue(length);
   16338 
   16339     // copy argument label
   16340     GLMessage_DataType *arg_label = glmsg.add_args();
   16341     arg_label->set_isarray(false);
   16342     arg_label->set_type(GLMessage::DataType::INT64);
   16343     arg_label->add_int64value((uintptr_t)label);
   16344 
   16345     // call function
   16346     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16347     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16348     glContext->hooks->gl.glLabelObjectEXT(type, object, length, label);
   16349     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16350     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16351 
   16352     void *pointerArgs[] = {
   16353         (void *) label,
   16354     };
   16355 
   16356     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16357                               threadStartTime, threadEndTime,
   16358                               &glmsg, pointerArgs);
   16359     glContext->traceGLMessage(&glmsg);
   16360 }
   16361 
   16362 void GLTrace_glGetObjectLabelEXT(GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label) {
   16363     GLMessage glmsg;
   16364     GLTraceContext *glContext = getGLTraceContext();
   16365 
   16366     glmsg.set_function(GLMessage::glGetObjectLabelEXT);
   16367 
   16368     // copy argument type
   16369     GLMessage_DataType *arg_type = glmsg.add_args();
   16370     arg_type->set_isarray(false);
   16371     arg_type->set_type(GLMessage::DataType::ENUM);
   16372     arg_type->add_intvalue((int)type);
   16373 
   16374     // copy argument object
   16375     GLMessage_DataType *arg_object = glmsg.add_args();
   16376     arg_object->set_isarray(false);
   16377     arg_object->set_type(GLMessage::DataType::INT);
   16378     arg_object->add_intvalue(object);
   16379 
   16380     // copy argument bufSize
   16381     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   16382     arg_bufSize->set_isarray(false);
   16383     arg_bufSize->set_type(GLMessage::DataType::INT);
   16384     arg_bufSize->add_intvalue(bufSize);
   16385 
   16386     // copy argument length
   16387     GLMessage_DataType *arg_length = glmsg.add_args();
   16388     arg_length->set_isarray(false);
   16389     arg_length->set_type(GLMessage::DataType::INT64);
   16390     arg_length->add_int64value((uintptr_t)length);
   16391 
   16392     // copy argument label
   16393     GLMessage_DataType *arg_label = glmsg.add_args();
   16394     arg_label->set_isarray(false);
   16395     arg_label->set_type(GLMessage::DataType::INT64);
   16396     arg_label->add_int64value((uintptr_t)label);
   16397 
   16398     // call function
   16399     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16400     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16401     glContext->hooks->gl.glGetObjectLabelEXT(type, object, bufSize, length, label);
   16402     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16403     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16404 
   16405     void *pointerArgs[] = {
   16406         (void *) length,
   16407         (void *) label,
   16408     };
   16409 
   16410     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16411                               threadStartTime, threadEndTime,
   16412                               &glmsg, pointerArgs);
   16413     glContext->traceGLMessage(&glmsg);
   16414 }
   16415 
   16416 void GLTrace_glInsertEventMarkerEXT(GLsizei length, const GLchar * marker) {
   16417     GLMessage glmsg;
   16418     GLTraceContext *glContext = getGLTraceContext();
   16419 
   16420     glmsg.set_function(GLMessage::glInsertEventMarkerEXT);
   16421 
   16422     // copy argument length
   16423     GLMessage_DataType *arg_length = glmsg.add_args();
   16424     arg_length->set_isarray(false);
   16425     arg_length->set_type(GLMessage::DataType::INT);
   16426     arg_length->add_intvalue(length);
   16427 
   16428     // copy argument marker
   16429     GLMessage_DataType *arg_marker = glmsg.add_args();
   16430     arg_marker->set_isarray(false);
   16431     arg_marker->set_type(GLMessage::DataType::INT64);
   16432     arg_marker->add_int64value((uintptr_t)marker);
   16433 
   16434     // call function
   16435     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16436     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16437     glContext->hooks->gl.glInsertEventMarkerEXT(length, marker);
   16438     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16439     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16440 
   16441     void *pointerArgs[] = {
   16442         (void *) marker,
   16443     };
   16444 
   16445     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16446                               threadStartTime, threadEndTime,
   16447                               &glmsg, pointerArgs);
   16448     glContext->traceGLMessage(&glmsg);
   16449 }
   16450 
   16451 void GLTrace_glPushGroupMarkerEXT(GLsizei length, const GLchar * marker) {
   16452     GLMessage glmsg;
   16453     GLTraceContext *glContext = getGLTraceContext();
   16454 
   16455     glmsg.set_function(GLMessage::glPushGroupMarkerEXT);
   16456 
   16457     // copy argument length
   16458     GLMessage_DataType *arg_length = glmsg.add_args();
   16459     arg_length->set_isarray(false);
   16460     arg_length->set_type(GLMessage::DataType::INT);
   16461     arg_length->add_intvalue(length);
   16462 
   16463     // copy argument marker
   16464     GLMessage_DataType *arg_marker = glmsg.add_args();
   16465     arg_marker->set_isarray(false);
   16466     arg_marker->set_type(GLMessage::DataType::INT64);
   16467     arg_marker->add_int64value((uintptr_t)marker);
   16468 
   16469     // call function
   16470     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16471     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16472     glContext->hooks->gl.glPushGroupMarkerEXT(length, marker);
   16473     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16474     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16475 
   16476     void *pointerArgs[] = {
   16477         (void *) marker,
   16478     };
   16479 
   16480     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16481                               threadStartTime, threadEndTime,
   16482                               &glmsg, pointerArgs);
   16483     glContext->traceGLMessage(&glmsg);
   16484 }
   16485 
   16486 void GLTrace_glPopGroupMarkerEXT(void) {
   16487     GLMessage glmsg;
   16488     GLTraceContext *glContext = getGLTraceContext();
   16489 
   16490     glmsg.set_function(GLMessage::glPopGroupMarkerEXT);
   16491 
   16492     // call function
   16493     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16494     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16495     glContext->hooks->gl.glPopGroupMarkerEXT();
   16496     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16497     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16498 
   16499     void *pointerArgs[] = {
   16500     };
   16501 
   16502     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16503                               threadStartTime, threadEndTime,
   16504                               &glmsg, pointerArgs);
   16505     glContext->traceGLMessage(&glmsg);
   16506 }
   16507 
   16508 void GLTrace_glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum * attachments) {
   16509     GLMessage glmsg;
   16510     GLTraceContext *glContext = getGLTraceContext();
   16511 
   16512     glmsg.set_function(GLMessage::glDiscardFramebufferEXT);
   16513 
   16514     // copy argument target
   16515     GLMessage_DataType *arg_target = glmsg.add_args();
   16516     arg_target->set_isarray(false);
   16517     arg_target->set_type(GLMessage::DataType::ENUM);
   16518     arg_target->add_intvalue((int)target);
   16519 
   16520     // copy argument numAttachments
   16521     GLMessage_DataType *arg_numAttachments = glmsg.add_args();
   16522     arg_numAttachments->set_isarray(false);
   16523     arg_numAttachments->set_type(GLMessage::DataType::INT);
   16524     arg_numAttachments->add_intvalue(numAttachments);
   16525 
   16526     // copy argument attachments
   16527     GLMessage_DataType *arg_attachments = glmsg.add_args();
   16528     arg_attachments->set_isarray(false);
   16529     arg_attachments->set_type(GLMessage::DataType::INT64);
   16530     arg_attachments->add_int64value((uintptr_t)attachments);
   16531 
   16532     // call function
   16533     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16534     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16535     glContext->hooks->gl.glDiscardFramebufferEXT(target, numAttachments, attachments);
   16536     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16537     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16538 
   16539     void *pointerArgs[] = {
   16540         (void *) attachments,
   16541     };
   16542 
   16543     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16544                               threadStartTime, threadEndTime,
   16545                               &glmsg, pointerArgs);
   16546     glContext->traceGLMessage(&glmsg);
   16547 }
   16548 
   16549 void GLTrace_glGenQueriesEXT(GLsizei n, GLuint * ids) {
   16550     GLMessage glmsg;
   16551     GLTraceContext *glContext = getGLTraceContext();
   16552 
   16553     glmsg.set_function(GLMessage::glGenQueriesEXT);
   16554 
   16555     // copy argument n
   16556     GLMessage_DataType *arg_n = glmsg.add_args();
   16557     arg_n->set_isarray(false);
   16558     arg_n->set_type(GLMessage::DataType::INT);
   16559     arg_n->add_intvalue(n);
   16560 
   16561     // copy argument ids
   16562     GLMessage_DataType *arg_ids = glmsg.add_args();
   16563     arg_ids->set_isarray(false);
   16564     arg_ids->set_type(GLMessage::DataType::INT64);
   16565     arg_ids->add_int64value((uintptr_t)ids);
   16566 
   16567     // call function
   16568     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16569     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16570     glContext->hooks->gl.glGenQueriesEXT(n, ids);
   16571     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16572     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16573 
   16574     void *pointerArgs[] = {
   16575         (void *) ids,
   16576     };
   16577 
   16578     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16579                               threadStartTime, threadEndTime,
   16580                               &glmsg, pointerArgs);
   16581     glContext->traceGLMessage(&glmsg);
   16582 }
   16583 
   16584 void GLTrace_glDeleteQueriesEXT(GLsizei n, const GLuint * ids) {
   16585     GLMessage glmsg;
   16586     GLTraceContext *glContext = getGLTraceContext();
   16587 
   16588     glmsg.set_function(GLMessage::glDeleteQueriesEXT);
   16589 
   16590     // copy argument n
   16591     GLMessage_DataType *arg_n = glmsg.add_args();
   16592     arg_n->set_isarray(false);
   16593     arg_n->set_type(GLMessage::DataType::INT);
   16594     arg_n->add_intvalue(n);
   16595 
   16596     // copy argument ids
   16597     GLMessage_DataType *arg_ids = glmsg.add_args();
   16598     arg_ids->set_isarray(false);
   16599     arg_ids->set_type(GLMessage::DataType::INT64);
   16600     arg_ids->add_int64value((uintptr_t)ids);
   16601 
   16602     // call function
   16603     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16604     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16605     glContext->hooks->gl.glDeleteQueriesEXT(n, ids);
   16606     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16607     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16608 
   16609     void *pointerArgs[] = {
   16610         (void *) ids,
   16611     };
   16612 
   16613     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16614                               threadStartTime, threadEndTime,
   16615                               &glmsg, pointerArgs);
   16616     glContext->traceGLMessage(&glmsg);
   16617 }
   16618 
   16619 GLboolean GLTrace_glIsQueryEXT(GLuint id) {
   16620     GLMessage glmsg;
   16621     GLTraceContext *glContext = getGLTraceContext();
   16622 
   16623     glmsg.set_function(GLMessage::glIsQueryEXT);
   16624 
   16625     // copy argument id
   16626     GLMessage_DataType *arg_id = glmsg.add_args();
   16627     arg_id->set_isarray(false);
   16628     arg_id->set_type(GLMessage::DataType::INT);
   16629     arg_id->add_intvalue(id);
   16630 
   16631     // call function
   16632     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16633     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16634     GLboolean retValue = glContext->hooks->gl.glIsQueryEXT(id);
   16635     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16636     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16637 
   16638     // set return value
   16639     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   16640     rt->set_isarray(false);
   16641     rt->set_type(GLMessage::DataType::BOOL);
   16642     rt->add_boolvalue(retValue);
   16643 
   16644     void *pointerArgs[] = {
   16645     };
   16646 
   16647     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16648                               threadStartTime, threadEndTime,
   16649                               &glmsg, pointerArgs);
   16650     glContext->traceGLMessage(&glmsg);
   16651 
   16652     return retValue;
   16653 }
   16654 
   16655 void GLTrace_glBeginQueryEXT(GLenum target, GLuint id) {
   16656     GLMessage glmsg;
   16657     GLTraceContext *glContext = getGLTraceContext();
   16658 
   16659     glmsg.set_function(GLMessage::glBeginQueryEXT);
   16660 
   16661     // copy argument target
   16662     GLMessage_DataType *arg_target = glmsg.add_args();
   16663     arg_target->set_isarray(false);
   16664     arg_target->set_type(GLMessage::DataType::ENUM);
   16665     arg_target->add_intvalue((int)target);
   16666 
   16667     // copy argument id
   16668     GLMessage_DataType *arg_id = glmsg.add_args();
   16669     arg_id->set_isarray(false);
   16670     arg_id->set_type(GLMessage::DataType::INT);
   16671     arg_id->add_intvalue(id);
   16672 
   16673     // call function
   16674     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16675     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16676     glContext->hooks->gl.glBeginQueryEXT(target, id);
   16677     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16678     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16679 
   16680     void *pointerArgs[] = {
   16681     };
   16682 
   16683     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16684                               threadStartTime, threadEndTime,
   16685                               &glmsg, pointerArgs);
   16686     glContext->traceGLMessage(&glmsg);
   16687 }
   16688 
   16689 void GLTrace_glEndQueryEXT(GLenum target) {
   16690     GLMessage glmsg;
   16691     GLTraceContext *glContext = getGLTraceContext();
   16692 
   16693     glmsg.set_function(GLMessage::glEndQueryEXT);
   16694 
   16695     // copy argument target
   16696     GLMessage_DataType *arg_target = glmsg.add_args();
   16697     arg_target->set_isarray(false);
   16698     arg_target->set_type(GLMessage::DataType::ENUM);
   16699     arg_target->add_intvalue((int)target);
   16700 
   16701     // call function
   16702     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16703     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16704     glContext->hooks->gl.glEndQueryEXT(target);
   16705     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16706     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16707 
   16708     void *pointerArgs[] = {
   16709     };
   16710 
   16711     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16712                               threadStartTime, threadEndTime,
   16713                               &glmsg, pointerArgs);
   16714     glContext->traceGLMessage(&glmsg);
   16715 }
   16716 
   16717 void GLTrace_glQueryCounterEXT(GLuint id, GLenum target) {
   16718     GLMessage glmsg;
   16719     GLTraceContext *glContext = getGLTraceContext();
   16720 
   16721     glmsg.set_function(GLMessage::glQueryCounterEXT);
   16722 
   16723     // copy argument id
   16724     GLMessage_DataType *arg_id = glmsg.add_args();
   16725     arg_id->set_isarray(false);
   16726     arg_id->set_type(GLMessage::DataType::INT);
   16727     arg_id->add_intvalue(id);
   16728 
   16729     // copy argument target
   16730     GLMessage_DataType *arg_target = glmsg.add_args();
   16731     arg_target->set_isarray(false);
   16732     arg_target->set_type(GLMessage::DataType::ENUM);
   16733     arg_target->add_intvalue((int)target);
   16734 
   16735     // call function
   16736     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16737     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16738     glContext->hooks->gl.glQueryCounterEXT(id, target);
   16739     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16740     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16741 
   16742     void *pointerArgs[] = {
   16743     };
   16744 
   16745     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16746                               threadStartTime, threadEndTime,
   16747                               &glmsg, pointerArgs);
   16748     glContext->traceGLMessage(&glmsg);
   16749 }
   16750 
   16751 void GLTrace_glGetQueryivEXT(GLenum target, GLenum pname, GLint * params) {
   16752     GLMessage glmsg;
   16753     GLTraceContext *glContext = getGLTraceContext();
   16754 
   16755     glmsg.set_function(GLMessage::glGetQueryivEXT);
   16756 
   16757     // copy argument target
   16758     GLMessage_DataType *arg_target = glmsg.add_args();
   16759     arg_target->set_isarray(false);
   16760     arg_target->set_type(GLMessage::DataType::ENUM);
   16761     arg_target->add_intvalue((int)target);
   16762 
   16763     // copy argument pname
   16764     GLMessage_DataType *arg_pname = glmsg.add_args();
   16765     arg_pname->set_isarray(false);
   16766     arg_pname->set_type(GLMessage::DataType::ENUM);
   16767     arg_pname->add_intvalue((int)pname);
   16768 
   16769     // copy argument params
   16770     GLMessage_DataType *arg_params = glmsg.add_args();
   16771     arg_params->set_isarray(false);
   16772     arg_params->set_type(GLMessage::DataType::INT64);
   16773     arg_params->add_int64value((uintptr_t)params);
   16774 
   16775     // call function
   16776     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16777     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16778     glContext->hooks->gl.glGetQueryivEXT(target, pname, params);
   16779     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16780     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16781 
   16782     void *pointerArgs[] = {
   16783         (void *) params,
   16784     };
   16785 
   16786     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16787                               threadStartTime, threadEndTime,
   16788                               &glmsg, pointerArgs);
   16789     glContext->traceGLMessage(&glmsg);
   16790 }
   16791 
   16792 void GLTrace_glGetQueryObjectivEXT(GLuint id, GLenum pname, GLint * params) {
   16793     GLMessage glmsg;
   16794     GLTraceContext *glContext = getGLTraceContext();
   16795 
   16796     glmsg.set_function(GLMessage::glGetQueryObjectivEXT);
   16797 
   16798     // copy argument id
   16799     GLMessage_DataType *arg_id = glmsg.add_args();
   16800     arg_id->set_isarray(false);
   16801     arg_id->set_type(GLMessage::DataType::INT);
   16802     arg_id->add_intvalue(id);
   16803 
   16804     // copy argument pname
   16805     GLMessage_DataType *arg_pname = glmsg.add_args();
   16806     arg_pname->set_isarray(false);
   16807     arg_pname->set_type(GLMessage::DataType::ENUM);
   16808     arg_pname->add_intvalue((int)pname);
   16809 
   16810     // copy argument params
   16811     GLMessage_DataType *arg_params = glmsg.add_args();
   16812     arg_params->set_isarray(false);
   16813     arg_params->set_type(GLMessage::DataType::INT64);
   16814     arg_params->add_int64value((uintptr_t)params);
   16815 
   16816     // call function
   16817     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16818     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16819     glContext->hooks->gl.glGetQueryObjectivEXT(id, pname, params);
   16820     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16821     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16822 
   16823     void *pointerArgs[] = {
   16824         (void *) params,
   16825     };
   16826 
   16827     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16828                               threadStartTime, threadEndTime,
   16829                               &glmsg, pointerArgs);
   16830     glContext->traceGLMessage(&glmsg);
   16831 }
   16832 
   16833 void GLTrace_glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint * params) {
   16834     GLMessage glmsg;
   16835     GLTraceContext *glContext = getGLTraceContext();
   16836 
   16837     glmsg.set_function(GLMessage::glGetQueryObjectuivEXT);
   16838 
   16839     // copy argument id
   16840     GLMessage_DataType *arg_id = glmsg.add_args();
   16841     arg_id->set_isarray(false);
   16842     arg_id->set_type(GLMessage::DataType::INT);
   16843     arg_id->add_intvalue(id);
   16844 
   16845     // copy argument pname
   16846     GLMessage_DataType *arg_pname = glmsg.add_args();
   16847     arg_pname->set_isarray(false);
   16848     arg_pname->set_type(GLMessage::DataType::ENUM);
   16849     arg_pname->add_intvalue((int)pname);
   16850 
   16851     // copy argument params
   16852     GLMessage_DataType *arg_params = glmsg.add_args();
   16853     arg_params->set_isarray(false);
   16854     arg_params->set_type(GLMessage::DataType::INT64);
   16855     arg_params->add_int64value((uintptr_t)params);
   16856 
   16857     // call function
   16858     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16859     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16860     glContext->hooks->gl.glGetQueryObjectuivEXT(id, pname, params);
   16861     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16862     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16863 
   16864     void *pointerArgs[] = {
   16865         (void *) params,
   16866     };
   16867 
   16868     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16869                               threadStartTime, threadEndTime,
   16870                               &glmsg, pointerArgs);
   16871     glContext->traceGLMessage(&glmsg);
   16872 }
   16873 
   16874 void GLTrace_glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 * params) {
   16875     GLMessage glmsg;
   16876     GLTraceContext *glContext = getGLTraceContext();
   16877 
   16878     glmsg.set_function(GLMessage::glGetQueryObjecti64vEXT);
   16879 
   16880     // copy argument id
   16881     GLMessage_DataType *arg_id = glmsg.add_args();
   16882     arg_id->set_isarray(false);
   16883     arg_id->set_type(GLMessage::DataType::INT);
   16884     arg_id->add_intvalue(id);
   16885 
   16886     // copy argument pname
   16887     GLMessage_DataType *arg_pname = glmsg.add_args();
   16888     arg_pname->set_isarray(false);
   16889     arg_pname->set_type(GLMessage::DataType::ENUM);
   16890     arg_pname->add_intvalue((int)pname);
   16891 
   16892     // copy argument params
   16893     GLMessage_DataType *arg_params = glmsg.add_args();
   16894     arg_params->set_isarray(false);
   16895     arg_params->set_type(GLMessage::DataType::INT64);
   16896     arg_params->add_int64value((uintptr_t)params);
   16897 
   16898     // call function
   16899     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16900     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16901     glContext->hooks->gl.glGetQueryObjecti64vEXT(id, pname, params);
   16902     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16903     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16904 
   16905     void *pointerArgs[] = {
   16906         (void *) params,
   16907     };
   16908 
   16909     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16910                               threadStartTime, threadEndTime,
   16911                               &glmsg, pointerArgs);
   16912     glContext->traceGLMessage(&glmsg);
   16913 }
   16914 
   16915 void GLTrace_glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 * params) {
   16916     GLMessage glmsg;
   16917     GLTraceContext *glContext = getGLTraceContext();
   16918 
   16919     glmsg.set_function(GLMessage::glGetQueryObjectui64vEXT);
   16920 
   16921     // copy argument id
   16922     GLMessage_DataType *arg_id = glmsg.add_args();
   16923     arg_id->set_isarray(false);
   16924     arg_id->set_type(GLMessage::DataType::INT);
   16925     arg_id->add_intvalue(id);
   16926 
   16927     // copy argument pname
   16928     GLMessage_DataType *arg_pname = glmsg.add_args();
   16929     arg_pname->set_isarray(false);
   16930     arg_pname->set_type(GLMessage::DataType::ENUM);
   16931     arg_pname->add_intvalue((int)pname);
   16932 
   16933     // copy argument params
   16934     GLMessage_DataType *arg_params = glmsg.add_args();
   16935     arg_params->set_isarray(false);
   16936     arg_params->set_type(GLMessage::DataType::INT64);
   16937     arg_params->add_int64value((uintptr_t)params);
   16938 
   16939     // call function
   16940     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16941     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16942     glContext->hooks->gl.glGetQueryObjectui64vEXT(id, pname, params);
   16943     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16944     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16945 
   16946     void *pointerArgs[] = {
   16947         (void *) params,
   16948     };
   16949 
   16950     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16951                               threadStartTime, threadEndTime,
   16952                               &glmsg, pointerArgs);
   16953     glContext->traceGLMessage(&glmsg);
   16954 }
   16955 
   16956 void GLTrace_glDrawBuffersEXT(GLsizei n, const GLenum * bufs) {
   16957     GLMessage glmsg;
   16958     GLTraceContext *glContext = getGLTraceContext();
   16959 
   16960     glmsg.set_function(GLMessage::glDrawBuffersEXT);
   16961 
   16962     // copy argument n
   16963     GLMessage_DataType *arg_n = glmsg.add_args();
   16964     arg_n->set_isarray(false);
   16965     arg_n->set_type(GLMessage::DataType::INT);
   16966     arg_n->add_intvalue(n);
   16967 
   16968     // copy argument bufs
   16969     GLMessage_DataType *arg_bufs = glmsg.add_args();
   16970     arg_bufs->set_isarray(false);
   16971     arg_bufs->set_type(GLMessage::DataType::INT64);
   16972     arg_bufs->add_int64value((uintptr_t)bufs);
   16973 
   16974     // call function
   16975     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16976     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   16977     glContext->hooks->gl.glDrawBuffersEXT(n, bufs);
   16978     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   16979     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   16980 
   16981     void *pointerArgs[] = {
   16982         (void *) bufs,
   16983     };
   16984 
   16985     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   16986                               threadStartTime, threadEndTime,
   16987                               &glmsg, pointerArgs);
   16988     glContext->traceGLMessage(&glmsg);
   16989 }
   16990 
   16991 void GLTrace_glEnableiEXT(GLenum target, GLuint index) {
   16992     GLMessage glmsg;
   16993     GLTraceContext *glContext = getGLTraceContext();
   16994 
   16995     glmsg.set_function(GLMessage::glEnableiEXT);
   16996 
   16997     // copy argument target
   16998     GLMessage_DataType *arg_target = glmsg.add_args();
   16999     arg_target->set_isarray(false);
   17000     arg_target->set_type(GLMessage::DataType::ENUM);
   17001     arg_target->add_intvalue((int)target);
   17002 
   17003     // copy argument index
   17004     GLMessage_DataType *arg_index = glmsg.add_args();
   17005     arg_index->set_isarray(false);
   17006     arg_index->set_type(GLMessage::DataType::INT);
   17007     arg_index->add_intvalue(index);
   17008 
   17009     // call function
   17010     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17011     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17012     glContext->hooks->gl.glEnableiEXT(target, index);
   17013     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17014     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17015 
   17016     void *pointerArgs[] = {
   17017     };
   17018 
   17019     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17020                               threadStartTime, threadEndTime,
   17021                               &glmsg, pointerArgs);
   17022     glContext->traceGLMessage(&glmsg);
   17023 }
   17024 
   17025 void GLTrace_glDisableiEXT(GLenum target, GLuint index) {
   17026     GLMessage glmsg;
   17027     GLTraceContext *glContext = getGLTraceContext();
   17028 
   17029     glmsg.set_function(GLMessage::glDisableiEXT);
   17030 
   17031     // copy argument target
   17032     GLMessage_DataType *arg_target = glmsg.add_args();
   17033     arg_target->set_isarray(false);
   17034     arg_target->set_type(GLMessage::DataType::ENUM);
   17035     arg_target->add_intvalue((int)target);
   17036 
   17037     // copy argument index
   17038     GLMessage_DataType *arg_index = glmsg.add_args();
   17039     arg_index->set_isarray(false);
   17040     arg_index->set_type(GLMessage::DataType::INT);
   17041     arg_index->add_intvalue(index);
   17042 
   17043     // call function
   17044     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17045     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17046     glContext->hooks->gl.glDisableiEXT(target, index);
   17047     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17048     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17049 
   17050     void *pointerArgs[] = {
   17051     };
   17052 
   17053     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17054                               threadStartTime, threadEndTime,
   17055                               &glmsg, pointerArgs);
   17056     glContext->traceGLMessage(&glmsg);
   17057 }
   17058 
   17059 void GLTrace_glBlendEquationiEXT(GLuint buf, GLenum mode) {
   17060     GLMessage glmsg;
   17061     GLTraceContext *glContext = getGLTraceContext();
   17062 
   17063     glmsg.set_function(GLMessage::glBlendEquationiEXT);
   17064 
   17065     // copy argument buf
   17066     GLMessage_DataType *arg_buf = glmsg.add_args();
   17067     arg_buf->set_isarray(false);
   17068     arg_buf->set_type(GLMessage::DataType::INT);
   17069     arg_buf->add_intvalue(buf);
   17070 
   17071     // copy argument mode
   17072     GLMessage_DataType *arg_mode = glmsg.add_args();
   17073     arg_mode->set_isarray(false);
   17074     arg_mode->set_type(GLMessage::DataType::ENUM);
   17075     arg_mode->add_intvalue((int)mode);
   17076 
   17077     // call function
   17078     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17079     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17080     glContext->hooks->gl.glBlendEquationiEXT(buf, mode);
   17081     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17082     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17083 
   17084     void *pointerArgs[] = {
   17085     };
   17086 
   17087     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17088                               threadStartTime, threadEndTime,
   17089                               &glmsg, pointerArgs);
   17090     glContext->traceGLMessage(&glmsg);
   17091 }
   17092 
   17093 void GLTrace_glBlendEquationSeparateiEXT(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {
   17094     GLMessage glmsg;
   17095     GLTraceContext *glContext = getGLTraceContext();
   17096 
   17097     glmsg.set_function(GLMessage::glBlendEquationSeparateiEXT);
   17098 
   17099     // copy argument buf
   17100     GLMessage_DataType *arg_buf = glmsg.add_args();
   17101     arg_buf->set_isarray(false);
   17102     arg_buf->set_type(GLMessage::DataType::INT);
   17103     arg_buf->add_intvalue(buf);
   17104 
   17105     // copy argument modeRGB
   17106     GLMessage_DataType *arg_modeRGB = glmsg.add_args();
   17107     arg_modeRGB->set_isarray(false);
   17108     arg_modeRGB->set_type(GLMessage::DataType::ENUM);
   17109     arg_modeRGB->add_intvalue((int)modeRGB);
   17110 
   17111     // copy argument modeAlpha
   17112     GLMessage_DataType *arg_modeAlpha = glmsg.add_args();
   17113     arg_modeAlpha->set_isarray(false);
   17114     arg_modeAlpha->set_type(GLMessage::DataType::ENUM);
   17115     arg_modeAlpha->add_intvalue((int)modeAlpha);
   17116 
   17117     // call function
   17118     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17119     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17120     glContext->hooks->gl.glBlendEquationSeparateiEXT(buf, modeRGB, modeAlpha);
   17121     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17122     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17123 
   17124     void *pointerArgs[] = {
   17125     };
   17126 
   17127     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17128                               threadStartTime, threadEndTime,
   17129                               &glmsg, pointerArgs);
   17130     glContext->traceGLMessage(&glmsg);
   17131 }
   17132 
   17133 void GLTrace_glBlendFunciEXT(GLuint buf, GLenum src, GLenum dst) {
   17134     GLMessage glmsg;
   17135     GLTraceContext *glContext = getGLTraceContext();
   17136 
   17137     glmsg.set_function(GLMessage::glBlendFunciEXT);
   17138 
   17139     // copy argument buf
   17140     GLMessage_DataType *arg_buf = glmsg.add_args();
   17141     arg_buf->set_isarray(false);
   17142     arg_buf->set_type(GLMessage::DataType::INT);
   17143     arg_buf->add_intvalue(buf);
   17144 
   17145     // copy argument src
   17146     GLMessage_DataType *arg_src = glmsg.add_args();
   17147     arg_src->set_isarray(false);
   17148     arg_src->set_type(GLMessage::DataType::ENUM);
   17149     arg_src->add_intvalue((int)src);
   17150 
   17151     // copy argument dst
   17152     GLMessage_DataType *arg_dst = glmsg.add_args();
   17153     arg_dst->set_isarray(false);
   17154     arg_dst->set_type(GLMessage::DataType::ENUM);
   17155     arg_dst->add_intvalue((int)dst);
   17156 
   17157     // call function
   17158     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17159     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17160     glContext->hooks->gl.glBlendFunciEXT(buf, src, dst);
   17161     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17162     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17163 
   17164     void *pointerArgs[] = {
   17165     };
   17166 
   17167     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17168                               threadStartTime, threadEndTime,
   17169                               &glmsg, pointerArgs);
   17170     glContext->traceGLMessage(&glmsg);
   17171 }
   17172 
   17173 void GLTrace_glBlendFuncSeparateiEXT(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
   17174     GLMessage glmsg;
   17175     GLTraceContext *glContext = getGLTraceContext();
   17176 
   17177     glmsg.set_function(GLMessage::glBlendFuncSeparateiEXT);
   17178 
   17179     // copy argument buf
   17180     GLMessage_DataType *arg_buf = glmsg.add_args();
   17181     arg_buf->set_isarray(false);
   17182     arg_buf->set_type(GLMessage::DataType::INT);
   17183     arg_buf->add_intvalue(buf);
   17184 
   17185     // copy argument srcRGB
   17186     GLMessage_DataType *arg_srcRGB = glmsg.add_args();
   17187     arg_srcRGB->set_isarray(false);
   17188     arg_srcRGB->set_type(GLMessage::DataType::ENUM);
   17189     arg_srcRGB->add_intvalue((int)srcRGB);
   17190 
   17191     // copy argument dstRGB
   17192     GLMessage_DataType *arg_dstRGB = glmsg.add_args();
   17193     arg_dstRGB->set_isarray(false);
   17194     arg_dstRGB->set_type(GLMessage::DataType::ENUM);
   17195     arg_dstRGB->add_intvalue((int)dstRGB);
   17196 
   17197     // copy argument srcAlpha
   17198     GLMessage_DataType *arg_srcAlpha = glmsg.add_args();
   17199     arg_srcAlpha->set_isarray(false);
   17200     arg_srcAlpha->set_type(GLMessage::DataType::ENUM);
   17201     arg_srcAlpha->add_intvalue((int)srcAlpha);
   17202 
   17203     // copy argument dstAlpha
   17204     GLMessage_DataType *arg_dstAlpha = glmsg.add_args();
   17205     arg_dstAlpha->set_isarray(false);
   17206     arg_dstAlpha->set_type(GLMessage::DataType::ENUM);
   17207     arg_dstAlpha->add_intvalue((int)dstAlpha);
   17208 
   17209     // call function
   17210     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17211     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17212     glContext->hooks->gl.glBlendFuncSeparateiEXT(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
   17213     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17214     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17215 
   17216     void *pointerArgs[] = {
   17217     };
   17218 
   17219     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17220                               threadStartTime, threadEndTime,
   17221                               &glmsg, pointerArgs);
   17222     glContext->traceGLMessage(&glmsg);
   17223 }
   17224 
   17225 void GLTrace_glColorMaskiEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {
   17226     GLMessage glmsg;
   17227     GLTraceContext *glContext = getGLTraceContext();
   17228 
   17229     glmsg.set_function(GLMessage::glColorMaskiEXT);
   17230 
   17231     // copy argument index
   17232     GLMessage_DataType *arg_index = glmsg.add_args();
   17233     arg_index->set_isarray(false);
   17234     arg_index->set_type(GLMessage::DataType::INT);
   17235     arg_index->add_intvalue(index);
   17236 
   17237     // copy argument r
   17238     GLMessage_DataType *arg_r = glmsg.add_args();
   17239     arg_r->set_isarray(false);
   17240     arg_r->set_type(GLMessage::DataType::BOOL);
   17241     arg_r->add_boolvalue(r);
   17242 
   17243     // copy argument g
   17244     GLMessage_DataType *arg_g = glmsg.add_args();
   17245     arg_g->set_isarray(false);
   17246     arg_g->set_type(GLMessage::DataType::BOOL);
   17247     arg_g->add_boolvalue(g);
   17248 
   17249     // copy argument b
   17250     GLMessage_DataType *arg_b = glmsg.add_args();
   17251     arg_b->set_isarray(false);
   17252     arg_b->set_type(GLMessage::DataType::BOOL);
   17253     arg_b->add_boolvalue(b);
   17254 
   17255     // copy argument a
   17256     GLMessage_DataType *arg_a = glmsg.add_args();
   17257     arg_a->set_isarray(false);
   17258     arg_a->set_type(GLMessage::DataType::BOOL);
   17259     arg_a->add_boolvalue(a);
   17260 
   17261     // call function
   17262     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17263     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17264     glContext->hooks->gl.glColorMaskiEXT(index, r, g, b, a);
   17265     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17266     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17267 
   17268     void *pointerArgs[] = {
   17269     };
   17270 
   17271     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17272                               threadStartTime, threadEndTime,
   17273                               &glmsg, pointerArgs);
   17274     glContext->traceGLMessage(&glmsg);
   17275 }
   17276 
   17277 GLboolean GLTrace_glIsEnablediEXT(GLenum target, GLuint index) {
   17278     GLMessage glmsg;
   17279     GLTraceContext *glContext = getGLTraceContext();
   17280 
   17281     glmsg.set_function(GLMessage::glIsEnablediEXT);
   17282 
   17283     // copy argument target
   17284     GLMessage_DataType *arg_target = glmsg.add_args();
   17285     arg_target->set_isarray(false);
   17286     arg_target->set_type(GLMessage::DataType::ENUM);
   17287     arg_target->add_intvalue((int)target);
   17288 
   17289     // copy argument index
   17290     GLMessage_DataType *arg_index = glmsg.add_args();
   17291     arg_index->set_isarray(false);
   17292     arg_index->set_type(GLMessage::DataType::INT);
   17293     arg_index->add_intvalue(index);
   17294 
   17295     // call function
   17296     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17297     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17298     GLboolean retValue = glContext->hooks->gl.glIsEnablediEXT(target, index);
   17299     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17300     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17301 
   17302     // set return value
   17303     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   17304     rt->set_isarray(false);
   17305     rt->set_type(GLMessage::DataType::BOOL);
   17306     rt->add_boolvalue(retValue);
   17307 
   17308     void *pointerArgs[] = {
   17309     };
   17310 
   17311     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17312                               threadStartTime, threadEndTime,
   17313                               &glmsg, pointerArgs);
   17314     glContext->traceGLMessage(&glmsg);
   17315 
   17316     return retValue;
   17317 }
   17318 
   17319 void GLTrace_glDrawArraysInstancedEXT(GLenum mode, GLint start, GLsizei count, GLsizei primcount) {
   17320     GLMessage glmsg;
   17321     GLTraceContext *glContext = getGLTraceContext();
   17322 
   17323     glmsg.set_function(GLMessage::glDrawArraysInstancedEXT);
   17324 
   17325     // copy argument mode
   17326     GLMessage_DataType *arg_mode = glmsg.add_args();
   17327     arg_mode->set_isarray(false);
   17328     arg_mode->set_type(GLMessage::DataType::ENUM);
   17329     arg_mode->add_intvalue((int)mode);
   17330 
   17331     // copy argument start
   17332     GLMessage_DataType *arg_start = glmsg.add_args();
   17333     arg_start->set_isarray(false);
   17334     arg_start->set_type(GLMessage::DataType::INT);
   17335     arg_start->add_intvalue(start);
   17336 
   17337     // copy argument count
   17338     GLMessage_DataType *arg_count = glmsg.add_args();
   17339     arg_count->set_isarray(false);
   17340     arg_count->set_type(GLMessage::DataType::INT);
   17341     arg_count->add_intvalue(count);
   17342 
   17343     // copy argument primcount
   17344     GLMessage_DataType *arg_primcount = glmsg.add_args();
   17345     arg_primcount->set_isarray(false);
   17346     arg_primcount->set_type(GLMessage::DataType::INT);
   17347     arg_primcount->add_intvalue(primcount);
   17348 
   17349     // call function
   17350     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17351     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17352     glContext->hooks->gl.glDrawArraysInstancedEXT(mode, start, count, primcount);
   17353     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17354     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17355 
   17356     void *pointerArgs[] = {
   17357     };
   17358 
   17359     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17360                               threadStartTime, threadEndTime,
   17361                               &glmsg, pointerArgs);
   17362     glContext->traceGLMessage(&glmsg);
   17363 }
   17364 
   17365 void GLTrace_glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount) {
   17366     GLMessage glmsg;
   17367     GLTraceContext *glContext = getGLTraceContext();
   17368 
   17369     glmsg.set_function(GLMessage::glDrawElementsInstancedEXT);
   17370 
   17371     // copy argument mode
   17372     GLMessage_DataType *arg_mode = glmsg.add_args();
   17373     arg_mode->set_isarray(false);
   17374     arg_mode->set_type(GLMessage::DataType::ENUM);
   17375     arg_mode->add_intvalue((int)mode);
   17376 
   17377     // copy argument count
   17378     GLMessage_DataType *arg_count = glmsg.add_args();
   17379     arg_count->set_isarray(false);
   17380     arg_count->set_type(GLMessage::DataType::INT);
   17381     arg_count->add_intvalue(count);
   17382 
   17383     // copy argument type
   17384     GLMessage_DataType *arg_type = glmsg.add_args();
   17385     arg_type->set_isarray(false);
   17386     arg_type->set_type(GLMessage::DataType::ENUM);
   17387     arg_type->add_intvalue((int)type);
   17388 
   17389     // copy argument indices
   17390     GLMessage_DataType *arg_indices = glmsg.add_args();
   17391     arg_indices->set_isarray(false);
   17392     arg_indices->set_type(GLMessage::DataType::INT64);
   17393     arg_indices->add_int64value((uintptr_t)indices);
   17394 
   17395     // copy argument primcount
   17396     GLMessage_DataType *arg_primcount = glmsg.add_args();
   17397     arg_primcount->set_isarray(false);
   17398     arg_primcount->set_type(GLMessage::DataType::INT);
   17399     arg_primcount->add_intvalue(primcount);
   17400 
   17401     // call function
   17402     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17403     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17404     glContext->hooks->gl.glDrawElementsInstancedEXT(mode, count, type, indices, primcount);
   17405     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17406     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17407 
   17408     void *pointerArgs[] = {
   17409         (void *) indices,
   17410     };
   17411 
   17412     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17413                               threadStartTime, threadEndTime,
   17414                               &glmsg, pointerArgs);
   17415     glContext->traceGLMessage(&glmsg);
   17416 }
   17417 
   17418 void GLTrace_glFramebufferTextureEXT(GLenum target, GLenum attachment, GLuint texture, GLint level) {
   17419     GLMessage glmsg;
   17420     GLTraceContext *glContext = getGLTraceContext();
   17421 
   17422     glmsg.set_function(GLMessage::glFramebufferTextureEXT);
   17423 
   17424     // copy argument target
   17425     GLMessage_DataType *arg_target = glmsg.add_args();
   17426     arg_target->set_isarray(false);
   17427     arg_target->set_type(GLMessage::DataType::ENUM);
   17428     arg_target->add_intvalue((int)target);
   17429 
   17430     // copy argument attachment
   17431     GLMessage_DataType *arg_attachment = glmsg.add_args();
   17432     arg_attachment->set_isarray(false);
   17433     arg_attachment->set_type(GLMessage::DataType::ENUM);
   17434     arg_attachment->add_intvalue((int)attachment);
   17435 
   17436     // copy argument texture
   17437     GLMessage_DataType *arg_texture = glmsg.add_args();
   17438     arg_texture->set_isarray(false);
   17439     arg_texture->set_type(GLMessage::DataType::INT);
   17440     arg_texture->add_intvalue(texture);
   17441 
   17442     // copy argument level
   17443     GLMessage_DataType *arg_level = glmsg.add_args();
   17444     arg_level->set_isarray(false);
   17445     arg_level->set_type(GLMessage::DataType::INT);
   17446     arg_level->add_intvalue(level);
   17447 
   17448     // call function
   17449     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17450     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17451     glContext->hooks->gl.glFramebufferTextureEXT(target, attachment, texture, level);
   17452     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17453     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17454 
   17455     void *pointerArgs[] = {
   17456     };
   17457 
   17458     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17459                               threadStartTime, threadEndTime,
   17460                               &glmsg, pointerArgs);
   17461     glContext->traceGLMessage(&glmsg);
   17462 }
   17463 
   17464 void GLTrace_glVertexAttribDivisorEXT(GLuint index, GLuint divisor) {
   17465     GLMessage glmsg;
   17466     GLTraceContext *glContext = getGLTraceContext();
   17467 
   17468     glmsg.set_function(GLMessage::glVertexAttribDivisorEXT);
   17469 
   17470     // copy argument index
   17471     GLMessage_DataType *arg_index = glmsg.add_args();
   17472     arg_index->set_isarray(false);
   17473     arg_index->set_type(GLMessage::DataType::INT);
   17474     arg_index->add_intvalue(index);
   17475 
   17476     // copy argument divisor
   17477     GLMessage_DataType *arg_divisor = glmsg.add_args();
   17478     arg_divisor->set_isarray(false);
   17479     arg_divisor->set_type(GLMessage::DataType::INT);
   17480     arg_divisor->add_intvalue(divisor);
   17481 
   17482     // call function
   17483     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17484     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17485     glContext->hooks->gl.glVertexAttribDivisorEXT(index, divisor);
   17486     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17487     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17488 
   17489     void *pointerArgs[] = {
   17490     };
   17491 
   17492     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17493                               threadStartTime, threadEndTime,
   17494                               &glmsg, pointerArgs);
   17495     glContext->traceGLMessage(&glmsg);
   17496 }
   17497 
   17498 void * GLTrace_glMapBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {
   17499     GLMessage glmsg;
   17500     GLTraceContext *glContext = getGLTraceContext();
   17501 
   17502     glmsg.set_function(GLMessage::glMapBufferRangeEXT);
   17503 
   17504     // copy argument target
   17505     GLMessage_DataType *arg_target = glmsg.add_args();
   17506     arg_target->set_isarray(false);
   17507     arg_target->set_type(GLMessage::DataType::ENUM);
   17508     arg_target->add_intvalue((int)target);
   17509 
   17510     // copy argument offset
   17511     GLMessage_DataType *arg_offset = glmsg.add_args();
   17512     arg_offset->set_isarray(false);
   17513     arg_offset->set_type(GLMessage::DataType::INT);
   17514     arg_offset->add_intvalue(offset);
   17515 
   17516     // copy argument length
   17517     GLMessage_DataType *arg_length = glmsg.add_args();
   17518     arg_length->set_isarray(false);
   17519     arg_length->set_type(GLMessage::DataType::INT);
   17520     arg_length->add_intvalue(length);
   17521 
   17522     // copy argument access
   17523     GLMessage_DataType *arg_access = glmsg.add_args();
   17524     arg_access->set_isarray(false);
   17525     arg_access->set_type(GLMessage::DataType::INT);
   17526     arg_access->add_intvalue(access);
   17527 
   17528     // call function
   17529     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17530     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17531     void * retValue = glContext->hooks->gl.glMapBufferRangeEXT(target, offset, length, access);
   17532     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17533     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17534 
   17535     // set return value
   17536     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   17537     rt->set_isarray(false);
   17538     rt->set_type(GLMessage::DataType::INT64);
   17539     rt->add_int64value((uintptr_t)retValue);
   17540 
   17541     void *pointerArgs[] = {
   17542         (void *) retValue,
   17543     };
   17544 
   17545     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17546                               threadStartTime, threadEndTime,
   17547                               &glmsg, pointerArgs);
   17548     glContext->traceGLMessage(&glmsg);
   17549 
   17550     return retValue;
   17551 }
   17552 
   17553 void GLTrace_glFlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length) {
   17554     GLMessage glmsg;
   17555     GLTraceContext *glContext = getGLTraceContext();
   17556 
   17557     glmsg.set_function(GLMessage::glFlushMappedBufferRangeEXT);
   17558 
   17559     // copy argument target
   17560     GLMessage_DataType *arg_target = glmsg.add_args();
   17561     arg_target->set_isarray(false);
   17562     arg_target->set_type(GLMessage::DataType::ENUM);
   17563     arg_target->add_intvalue((int)target);
   17564 
   17565     // copy argument offset
   17566     GLMessage_DataType *arg_offset = glmsg.add_args();
   17567     arg_offset->set_isarray(false);
   17568     arg_offset->set_type(GLMessage::DataType::INT);
   17569     arg_offset->add_intvalue(offset);
   17570 
   17571     // copy argument length
   17572     GLMessage_DataType *arg_length = glmsg.add_args();
   17573     arg_length->set_isarray(false);
   17574     arg_length->set_type(GLMessage::DataType::INT);
   17575     arg_length->add_intvalue(length);
   17576 
   17577     // call function
   17578     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17579     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17580     glContext->hooks->gl.glFlushMappedBufferRangeEXT(target, offset, length);
   17581     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17582     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17583 
   17584     void *pointerArgs[] = {
   17585     };
   17586 
   17587     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17588                               threadStartTime, threadEndTime,
   17589                               &glmsg, pointerArgs);
   17590     glContext->traceGLMessage(&glmsg);
   17591 }
   17592 
   17593 void GLTrace_glMultiDrawArraysEXT(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount) {
   17594     GLMessage glmsg;
   17595     GLTraceContext *glContext = getGLTraceContext();
   17596 
   17597     glmsg.set_function(GLMessage::glMultiDrawArraysEXT);
   17598 
   17599     // copy argument mode
   17600     GLMessage_DataType *arg_mode = glmsg.add_args();
   17601     arg_mode->set_isarray(false);
   17602     arg_mode->set_type(GLMessage::DataType::ENUM);
   17603     arg_mode->add_intvalue((int)mode);
   17604 
   17605     // copy argument first
   17606     GLMessage_DataType *arg_first = glmsg.add_args();
   17607     arg_first->set_isarray(false);
   17608     arg_first->set_type(GLMessage::DataType::INT64);
   17609     arg_first->add_int64value((uintptr_t)first);
   17610 
   17611     // copy argument count
   17612     GLMessage_DataType *arg_count = glmsg.add_args();
   17613     arg_count->set_isarray(false);
   17614     arg_count->set_type(GLMessage::DataType::INT64);
   17615     arg_count->add_int64value((uintptr_t)count);
   17616 
   17617     // copy argument primcount
   17618     GLMessage_DataType *arg_primcount = glmsg.add_args();
   17619     arg_primcount->set_isarray(false);
   17620     arg_primcount->set_type(GLMessage::DataType::INT);
   17621     arg_primcount->add_intvalue(primcount);
   17622 
   17623     // call function
   17624     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17625     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17626     glContext->hooks->gl.glMultiDrawArraysEXT(mode, first, count, primcount);
   17627     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17628     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17629 
   17630     void *pointerArgs[] = {
   17631         (void *) first,
   17632         (void *) count,
   17633     };
   17634 
   17635     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17636                               threadStartTime, threadEndTime,
   17637                               &glmsg, pointerArgs);
   17638     glContext->traceGLMessage(&glmsg);
   17639 }
   17640 
   17641 void GLTrace_glMultiDrawElementsEXT(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount) {
   17642     GLMessage glmsg;
   17643     GLTraceContext *glContext = getGLTraceContext();
   17644 
   17645     glmsg.set_function(GLMessage::glMultiDrawElementsEXT);
   17646 
   17647     // copy argument mode
   17648     GLMessage_DataType *arg_mode = glmsg.add_args();
   17649     arg_mode->set_isarray(false);
   17650     arg_mode->set_type(GLMessage::DataType::ENUM);
   17651     arg_mode->add_intvalue((int)mode);
   17652 
   17653     // copy argument count
   17654     GLMessage_DataType *arg_count = glmsg.add_args();
   17655     arg_count->set_isarray(false);
   17656     arg_count->set_type(GLMessage::DataType::INT64);
   17657     arg_count->add_int64value((uintptr_t)count);
   17658 
   17659     // copy argument type
   17660     GLMessage_DataType *arg_type = glmsg.add_args();
   17661     arg_type->set_isarray(false);
   17662     arg_type->set_type(GLMessage::DataType::ENUM);
   17663     arg_type->add_intvalue((int)type);
   17664 
   17665     // copy argument indices
   17666     GLMessage_DataType *arg_indices = glmsg.add_args();
   17667     arg_indices->set_isarray(false);
   17668     arg_indices->set_type(GLMessage::DataType::INT64);
   17669     arg_indices->add_int64value((uintptr_t)indices);
   17670 
   17671     // copy argument primcount
   17672     GLMessage_DataType *arg_primcount = glmsg.add_args();
   17673     arg_primcount->set_isarray(false);
   17674     arg_primcount->set_type(GLMessage::DataType::INT);
   17675     arg_primcount->add_intvalue(primcount);
   17676 
   17677     // call function
   17678     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17679     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17680     glContext->hooks->gl.glMultiDrawElementsEXT(mode, count, type, indices, primcount);
   17681     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17682     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17683 
   17684     void *pointerArgs[] = {
   17685         (void *) count,
   17686         (void *) indices,
   17687     };
   17688 
   17689     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17690                               threadStartTime, threadEndTime,
   17691                               &glmsg, pointerArgs);
   17692     glContext->traceGLMessage(&glmsg);
   17693 }
   17694 
   17695 void GLTrace_glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
   17696     GLMessage glmsg;
   17697     GLTraceContext *glContext = getGLTraceContext();
   17698 
   17699     glmsg.set_function(GLMessage::glRenderbufferStorageMultisampleEXT);
   17700 
   17701     // copy argument target
   17702     GLMessage_DataType *arg_target = glmsg.add_args();
   17703     arg_target->set_isarray(false);
   17704     arg_target->set_type(GLMessage::DataType::ENUM);
   17705     arg_target->add_intvalue((int)target);
   17706 
   17707     // copy argument samples
   17708     GLMessage_DataType *arg_samples = glmsg.add_args();
   17709     arg_samples->set_isarray(false);
   17710     arg_samples->set_type(GLMessage::DataType::INT);
   17711     arg_samples->add_intvalue(samples);
   17712 
   17713     // copy argument internalformat
   17714     GLMessage_DataType *arg_internalformat = glmsg.add_args();
   17715     arg_internalformat->set_isarray(false);
   17716     arg_internalformat->set_type(GLMessage::DataType::ENUM);
   17717     arg_internalformat->add_intvalue((int)internalformat);
   17718 
   17719     // copy argument width
   17720     GLMessage_DataType *arg_width = glmsg.add_args();
   17721     arg_width->set_isarray(false);
   17722     arg_width->set_type(GLMessage::DataType::INT);
   17723     arg_width->add_intvalue(width);
   17724 
   17725     // copy argument height
   17726     GLMessage_DataType *arg_height = glmsg.add_args();
   17727     arg_height->set_isarray(false);
   17728     arg_height->set_type(GLMessage::DataType::INT);
   17729     arg_height->add_intvalue(height);
   17730 
   17731     // call function
   17732     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17733     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17734     glContext->hooks->gl.glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);
   17735     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17736     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17737 
   17738     void *pointerArgs[] = {
   17739     };
   17740 
   17741     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17742                               threadStartTime, threadEndTime,
   17743                               &glmsg, pointerArgs);
   17744     glContext->traceGLMessage(&glmsg);
   17745 }
   17746 
   17747 void GLTrace_glFramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) {
   17748     GLMessage glmsg;
   17749     GLTraceContext *glContext = getGLTraceContext();
   17750 
   17751     glmsg.set_function(GLMessage::glFramebufferTexture2DMultisampleEXT);
   17752 
   17753     // copy argument target
   17754     GLMessage_DataType *arg_target = glmsg.add_args();
   17755     arg_target->set_isarray(false);
   17756     arg_target->set_type(GLMessage::DataType::ENUM);
   17757     arg_target->add_intvalue((int)target);
   17758 
   17759     // copy argument attachment
   17760     GLMessage_DataType *arg_attachment = glmsg.add_args();
   17761     arg_attachment->set_isarray(false);
   17762     arg_attachment->set_type(GLMessage::DataType::ENUM);
   17763     arg_attachment->add_intvalue((int)attachment);
   17764 
   17765     // copy argument textarget
   17766     GLMessage_DataType *arg_textarget = glmsg.add_args();
   17767     arg_textarget->set_isarray(false);
   17768     arg_textarget->set_type(GLMessage::DataType::ENUM);
   17769     arg_textarget->add_intvalue((int)textarget);
   17770 
   17771     // copy argument texture
   17772     GLMessage_DataType *arg_texture = glmsg.add_args();
   17773     arg_texture->set_isarray(false);
   17774     arg_texture->set_type(GLMessage::DataType::INT);
   17775     arg_texture->add_intvalue(texture);
   17776 
   17777     // copy argument level
   17778     GLMessage_DataType *arg_level = glmsg.add_args();
   17779     arg_level->set_isarray(false);
   17780     arg_level->set_type(GLMessage::DataType::INT);
   17781     arg_level->add_intvalue(level);
   17782 
   17783     // copy argument samples
   17784     GLMessage_DataType *arg_samples = glmsg.add_args();
   17785     arg_samples->set_isarray(false);
   17786     arg_samples->set_type(GLMessage::DataType::INT);
   17787     arg_samples->add_intvalue(samples);
   17788 
   17789     // call function
   17790     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17791     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17792     glContext->hooks->gl.glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, level, samples);
   17793     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17794     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17795 
   17796     void *pointerArgs[] = {
   17797     };
   17798 
   17799     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17800                               threadStartTime, threadEndTime,
   17801                               &glmsg, pointerArgs);
   17802     glContext->traceGLMessage(&glmsg);
   17803 }
   17804 
   17805 void GLTrace_glReadBufferIndexedEXT(GLenum src, GLint index) {
   17806     GLMessage glmsg;
   17807     GLTraceContext *glContext = getGLTraceContext();
   17808 
   17809     glmsg.set_function(GLMessage::glReadBufferIndexedEXT);
   17810 
   17811     // copy argument src
   17812     GLMessage_DataType *arg_src = glmsg.add_args();
   17813     arg_src->set_isarray(false);
   17814     arg_src->set_type(GLMessage::DataType::ENUM);
   17815     arg_src->add_intvalue((int)src);
   17816 
   17817     // copy argument index
   17818     GLMessage_DataType *arg_index = glmsg.add_args();
   17819     arg_index->set_isarray(false);
   17820     arg_index->set_type(GLMessage::DataType::INT);
   17821     arg_index->add_intvalue(index);
   17822 
   17823     // call function
   17824     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17825     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17826     glContext->hooks->gl.glReadBufferIndexedEXT(src, index);
   17827     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17828     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17829 
   17830     void *pointerArgs[] = {
   17831     };
   17832 
   17833     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17834                               threadStartTime, threadEndTime,
   17835                               &glmsg, pointerArgs);
   17836     glContext->traceGLMessage(&glmsg);
   17837 }
   17838 
   17839 void GLTrace_glDrawBuffersIndexedEXT(GLint n, const GLenum * location, const GLint * indices) {
   17840     GLMessage glmsg;
   17841     GLTraceContext *glContext = getGLTraceContext();
   17842 
   17843     glmsg.set_function(GLMessage::glDrawBuffersIndexedEXT);
   17844 
   17845     // copy argument n
   17846     GLMessage_DataType *arg_n = glmsg.add_args();
   17847     arg_n->set_isarray(false);
   17848     arg_n->set_type(GLMessage::DataType::INT);
   17849     arg_n->add_intvalue(n);
   17850 
   17851     // copy argument location
   17852     GLMessage_DataType *arg_location = glmsg.add_args();
   17853     arg_location->set_isarray(false);
   17854     arg_location->set_type(GLMessage::DataType::INT64);
   17855     arg_location->add_int64value((uintptr_t)location);
   17856 
   17857     // copy argument indices
   17858     GLMessage_DataType *arg_indices = glmsg.add_args();
   17859     arg_indices->set_isarray(false);
   17860     arg_indices->set_type(GLMessage::DataType::INT64);
   17861     arg_indices->add_int64value((uintptr_t)indices);
   17862 
   17863     // call function
   17864     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17865     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17866     glContext->hooks->gl.glDrawBuffersIndexedEXT(n, location, indices);
   17867     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17868     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17869 
   17870     void *pointerArgs[] = {
   17871         (void *) location,
   17872         (void *) indices,
   17873     };
   17874 
   17875     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17876                               threadStartTime, threadEndTime,
   17877                               &glmsg, pointerArgs);
   17878     glContext->traceGLMessage(&glmsg);
   17879 }
   17880 
   17881 void GLTrace_glGetIntegeri_vEXT(GLenum target, GLuint index, GLint * data) {
   17882     GLMessage glmsg;
   17883     GLTraceContext *glContext = getGLTraceContext();
   17884 
   17885     glmsg.set_function(GLMessage::glGetIntegeri_vEXT);
   17886 
   17887     // copy argument target
   17888     GLMessage_DataType *arg_target = glmsg.add_args();
   17889     arg_target->set_isarray(false);
   17890     arg_target->set_type(GLMessage::DataType::ENUM);
   17891     arg_target->add_intvalue((int)target);
   17892 
   17893     // copy argument index
   17894     GLMessage_DataType *arg_index = glmsg.add_args();
   17895     arg_index->set_isarray(false);
   17896     arg_index->set_type(GLMessage::DataType::INT);
   17897     arg_index->add_intvalue(index);
   17898 
   17899     // copy argument data
   17900     GLMessage_DataType *arg_data = glmsg.add_args();
   17901     arg_data->set_isarray(false);
   17902     arg_data->set_type(GLMessage::DataType::INT64);
   17903     arg_data->add_int64value((uintptr_t)data);
   17904 
   17905     // call function
   17906     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17907     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17908     glContext->hooks->gl.glGetIntegeri_vEXT(target, index, data);
   17909     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17910     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17911 
   17912     void *pointerArgs[] = {
   17913         (void *) data,
   17914     };
   17915 
   17916     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17917                               threadStartTime, threadEndTime,
   17918                               &glmsg, pointerArgs);
   17919     glContext->traceGLMessage(&glmsg);
   17920 }
   17921 
   17922 void GLTrace_glPrimitiveBoundingBoxEXT(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW) {
   17923     GLMessage glmsg;
   17924     GLTraceContext *glContext = getGLTraceContext();
   17925 
   17926     glmsg.set_function(GLMessage::glPrimitiveBoundingBoxEXT);
   17927 
   17928     // copy argument minX
   17929     GLMessage_DataType *arg_minX = glmsg.add_args();
   17930     arg_minX->set_isarray(false);
   17931     arg_minX->set_type(GLMessage::DataType::FLOAT);
   17932     arg_minX->add_floatvalue(minX);
   17933 
   17934     // copy argument minY
   17935     GLMessage_DataType *arg_minY = glmsg.add_args();
   17936     arg_minY->set_isarray(false);
   17937     arg_minY->set_type(GLMessage::DataType::FLOAT);
   17938     arg_minY->add_floatvalue(minY);
   17939 
   17940     // copy argument minZ
   17941     GLMessage_DataType *arg_minZ = glmsg.add_args();
   17942     arg_minZ->set_isarray(false);
   17943     arg_minZ->set_type(GLMessage::DataType::FLOAT);
   17944     arg_minZ->add_floatvalue(minZ);
   17945 
   17946     // copy argument minW
   17947     GLMessage_DataType *arg_minW = glmsg.add_args();
   17948     arg_minW->set_isarray(false);
   17949     arg_minW->set_type(GLMessage::DataType::FLOAT);
   17950     arg_minW->add_floatvalue(minW);
   17951 
   17952     // copy argument maxX
   17953     GLMessage_DataType *arg_maxX = glmsg.add_args();
   17954     arg_maxX->set_isarray(false);
   17955     arg_maxX->set_type(GLMessage::DataType::FLOAT);
   17956     arg_maxX->add_floatvalue(maxX);
   17957 
   17958     // copy argument maxY
   17959     GLMessage_DataType *arg_maxY = glmsg.add_args();
   17960     arg_maxY->set_isarray(false);
   17961     arg_maxY->set_type(GLMessage::DataType::FLOAT);
   17962     arg_maxY->add_floatvalue(maxY);
   17963 
   17964     // copy argument maxZ
   17965     GLMessage_DataType *arg_maxZ = glmsg.add_args();
   17966     arg_maxZ->set_isarray(false);
   17967     arg_maxZ->set_type(GLMessage::DataType::FLOAT);
   17968     arg_maxZ->add_floatvalue(maxZ);
   17969 
   17970     // copy argument maxW
   17971     GLMessage_DataType *arg_maxW = glmsg.add_args();
   17972     arg_maxW->set_isarray(false);
   17973     arg_maxW->set_type(GLMessage::DataType::FLOAT);
   17974     arg_maxW->add_floatvalue(maxW);
   17975 
   17976     // call function
   17977     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17978     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   17979     glContext->hooks->gl.glPrimitiveBoundingBoxEXT(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
   17980     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   17981     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   17982 
   17983     void *pointerArgs[] = {
   17984     };
   17985 
   17986     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   17987                               threadStartTime, threadEndTime,
   17988                               &glmsg, pointerArgs);
   17989     glContext->traceGLMessage(&glmsg);
   17990 }
   17991 
   17992 GLenum GLTrace_glGetGraphicsResetStatusEXT(void) {
   17993     GLMessage glmsg;
   17994     GLTraceContext *glContext = getGLTraceContext();
   17995 
   17996     glmsg.set_function(GLMessage::glGetGraphicsResetStatusEXT);
   17997 
   17998     // call function
   17999     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18000     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18001     GLenum retValue = glContext->hooks->gl.glGetGraphicsResetStatusEXT();
   18002     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18003     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18004 
   18005     // set return value
   18006     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   18007     rt->set_isarray(false);
   18008     rt->set_type(GLMessage::DataType::ENUM);
   18009     rt->add_intvalue((int)retValue);
   18010 
   18011     void *pointerArgs[] = {
   18012     };
   18013 
   18014     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18015                               threadStartTime, threadEndTime,
   18016                               &glmsg, pointerArgs);
   18017     glContext->traceGLMessage(&glmsg);
   18018 
   18019     return retValue;
   18020 }
   18021 
   18022 void GLTrace_glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data) {
   18023     GLMessage glmsg;
   18024     GLTraceContext *glContext = getGLTraceContext();
   18025 
   18026     glmsg.set_function(GLMessage::glReadnPixelsEXT);
   18027 
   18028     // copy argument x
   18029     GLMessage_DataType *arg_x = glmsg.add_args();
   18030     arg_x->set_isarray(false);
   18031     arg_x->set_type(GLMessage::DataType::INT);
   18032     arg_x->add_intvalue(x);
   18033 
   18034     // copy argument y
   18035     GLMessage_DataType *arg_y = glmsg.add_args();
   18036     arg_y->set_isarray(false);
   18037     arg_y->set_type(GLMessage::DataType::INT);
   18038     arg_y->add_intvalue(y);
   18039 
   18040     // copy argument width
   18041     GLMessage_DataType *arg_width = glmsg.add_args();
   18042     arg_width->set_isarray(false);
   18043     arg_width->set_type(GLMessage::DataType::INT);
   18044     arg_width->add_intvalue(width);
   18045 
   18046     // copy argument height
   18047     GLMessage_DataType *arg_height = glmsg.add_args();
   18048     arg_height->set_isarray(false);
   18049     arg_height->set_type(GLMessage::DataType::INT);
   18050     arg_height->add_intvalue(height);
   18051 
   18052     // copy argument format
   18053     GLMessage_DataType *arg_format = glmsg.add_args();
   18054     arg_format->set_isarray(false);
   18055     arg_format->set_type(GLMessage::DataType::ENUM);
   18056     arg_format->add_intvalue((int)format);
   18057 
   18058     // copy argument type
   18059     GLMessage_DataType *arg_type = glmsg.add_args();
   18060     arg_type->set_isarray(false);
   18061     arg_type->set_type(GLMessage::DataType::ENUM);
   18062     arg_type->add_intvalue((int)type);
   18063 
   18064     // copy argument bufSize
   18065     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   18066     arg_bufSize->set_isarray(false);
   18067     arg_bufSize->set_type(GLMessage::DataType::INT);
   18068     arg_bufSize->add_intvalue(bufSize);
   18069 
   18070     // copy argument data
   18071     GLMessage_DataType *arg_data = glmsg.add_args();
   18072     arg_data->set_isarray(false);
   18073     arg_data->set_type(GLMessage::DataType::INT64);
   18074     arg_data->add_int64value((uintptr_t)data);
   18075 
   18076     // call function
   18077     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18078     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18079     glContext->hooks->gl.glReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
   18080     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18081     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18082 
   18083     void *pointerArgs[] = {
   18084         (void *) data,
   18085     };
   18086 
   18087     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18088                               threadStartTime, threadEndTime,
   18089                               &glmsg, pointerArgs);
   18090     glContext->traceGLMessage(&glmsg);
   18091 }
   18092 
   18093 void GLTrace_glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat * params) {
   18094     GLMessage glmsg;
   18095     GLTraceContext *glContext = getGLTraceContext();
   18096 
   18097     glmsg.set_function(GLMessage::glGetnUniformfvEXT);
   18098 
   18099     // copy argument program
   18100     GLMessage_DataType *arg_program = glmsg.add_args();
   18101     arg_program->set_isarray(false);
   18102     arg_program->set_type(GLMessage::DataType::INT);
   18103     arg_program->add_intvalue(program);
   18104 
   18105     // copy argument location
   18106     GLMessage_DataType *arg_location = glmsg.add_args();
   18107     arg_location->set_isarray(false);
   18108     arg_location->set_type(GLMessage::DataType::INT);
   18109     arg_location->add_intvalue(location);
   18110 
   18111     // copy argument bufSize
   18112     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   18113     arg_bufSize->set_isarray(false);
   18114     arg_bufSize->set_type(GLMessage::DataType::INT);
   18115     arg_bufSize->add_intvalue(bufSize);
   18116 
   18117     // copy argument params
   18118     GLMessage_DataType *arg_params = glmsg.add_args();
   18119     arg_params->set_isarray(false);
   18120     arg_params->set_type(GLMessage::DataType::INT64);
   18121     arg_params->add_int64value((uintptr_t)params);
   18122 
   18123     // call function
   18124     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18125     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18126     glContext->hooks->gl.glGetnUniformfvEXT(program, location, bufSize, params);
   18127     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18128     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18129 
   18130     void *pointerArgs[] = {
   18131         (void *) params,
   18132     };
   18133 
   18134     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18135                               threadStartTime, threadEndTime,
   18136                               &glmsg, pointerArgs);
   18137     glContext->traceGLMessage(&glmsg);
   18138 }
   18139 
   18140 void GLTrace_glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint * params) {
   18141     GLMessage glmsg;
   18142     GLTraceContext *glContext = getGLTraceContext();
   18143 
   18144     glmsg.set_function(GLMessage::glGetnUniformivEXT);
   18145 
   18146     // copy argument program
   18147     GLMessage_DataType *arg_program = glmsg.add_args();
   18148     arg_program->set_isarray(false);
   18149     arg_program->set_type(GLMessage::DataType::INT);
   18150     arg_program->add_intvalue(program);
   18151 
   18152     // copy argument location
   18153     GLMessage_DataType *arg_location = glmsg.add_args();
   18154     arg_location->set_isarray(false);
   18155     arg_location->set_type(GLMessage::DataType::INT);
   18156     arg_location->add_intvalue(location);
   18157 
   18158     // copy argument bufSize
   18159     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   18160     arg_bufSize->set_isarray(false);
   18161     arg_bufSize->set_type(GLMessage::DataType::INT);
   18162     arg_bufSize->add_intvalue(bufSize);
   18163 
   18164     // copy argument params
   18165     GLMessage_DataType *arg_params = glmsg.add_args();
   18166     arg_params->set_isarray(false);
   18167     arg_params->set_type(GLMessage::DataType::INT64);
   18168     arg_params->add_int64value((uintptr_t)params);
   18169 
   18170     // call function
   18171     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18172     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18173     glContext->hooks->gl.glGetnUniformivEXT(program, location, bufSize, params);
   18174     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18175     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18176 
   18177     void *pointerArgs[] = {
   18178         (void *) params,
   18179     };
   18180 
   18181     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18182                               threadStartTime, threadEndTime,
   18183                               &glmsg, pointerArgs);
   18184     glContext->traceGLMessage(&glmsg);
   18185 }
   18186 
   18187 void GLTrace_glActiveShaderProgramEXT(GLuint pipeline, GLuint program) {
   18188     GLMessage glmsg;
   18189     GLTraceContext *glContext = getGLTraceContext();
   18190 
   18191     glmsg.set_function(GLMessage::glActiveShaderProgramEXT);
   18192 
   18193     // copy argument pipeline
   18194     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   18195     arg_pipeline->set_isarray(false);
   18196     arg_pipeline->set_type(GLMessage::DataType::INT);
   18197     arg_pipeline->add_intvalue(pipeline);
   18198 
   18199     // copy argument program
   18200     GLMessage_DataType *arg_program = glmsg.add_args();
   18201     arg_program->set_isarray(false);
   18202     arg_program->set_type(GLMessage::DataType::INT);
   18203     arg_program->add_intvalue(program);
   18204 
   18205     // call function
   18206     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18207     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18208     glContext->hooks->gl.glActiveShaderProgramEXT(pipeline, program);
   18209     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18210     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18211 
   18212     void *pointerArgs[] = {
   18213     };
   18214 
   18215     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18216                               threadStartTime, threadEndTime,
   18217                               &glmsg, pointerArgs);
   18218     glContext->traceGLMessage(&glmsg);
   18219 }
   18220 
   18221 void GLTrace_glBindProgramPipelineEXT(GLuint pipeline) {
   18222     GLMessage glmsg;
   18223     GLTraceContext *glContext = getGLTraceContext();
   18224 
   18225     glmsg.set_function(GLMessage::glBindProgramPipelineEXT);
   18226 
   18227     // copy argument pipeline
   18228     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   18229     arg_pipeline->set_isarray(false);
   18230     arg_pipeline->set_type(GLMessage::DataType::INT);
   18231     arg_pipeline->add_intvalue(pipeline);
   18232 
   18233     // call function
   18234     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18235     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18236     glContext->hooks->gl.glBindProgramPipelineEXT(pipeline);
   18237     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18238     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18239 
   18240     void *pointerArgs[] = {
   18241     };
   18242 
   18243     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18244                               threadStartTime, threadEndTime,
   18245                               &glmsg, pointerArgs);
   18246     glContext->traceGLMessage(&glmsg);
   18247 }
   18248 
   18249 GLuint GLTrace_glCreateShaderProgramvEXT(GLenum type, GLsizei count, const GLchar ** strings) {
   18250     GLMessage glmsg;
   18251     GLTraceContext *glContext = getGLTraceContext();
   18252 
   18253     glmsg.set_function(GLMessage::glCreateShaderProgramvEXT);
   18254 
   18255     // copy argument type
   18256     GLMessage_DataType *arg_type = glmsg.add_args();
   18257     arg_type->set_isarray(false);
   18258     arg_type->set_type(GLMessage::DataType::ENUM);
   18259     arg_type->add_intvalue((int)type);
   18260 
   18261     // copy argument count
   18262     GLMessage_DataType *arg_count = glmsg.add_args();
   18263     arg_count->set_isarray(false);
   18264     arg_count->set_type(GLMessage::DataType::INT);
   18265     arg_count->add_intvalue(count);
   18266 
   18267     // copy argument strings
   18268     GLMessage_DataType *arg_strings = glmsg.add_args();
   18269     arg_strings->set_isarray(false);
   18270     arg_strings->set_type(GLMessage::DataType::INT64);
   18271     arg_strings->add_int64value((uintptr_t)strings);
   18272 
   18273     // call function
   18274     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18275     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18276     GLuint retValue = glContext->hooks->gl.glCreateShaderProgramvEXT(type, count, strings);
   18277     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18278     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18279 
   18280     // set return value
   18281     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   18282     rt->set_isarray(false);
   18283     rt->set_type(GLMessage::DataType::INT);
   18284     rt->add_intvalue(retValue);
   18285 
   18286     void *pointerArgs[] = {
   18287         (void *) strings,
   18288     };
   18289 
   18290     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18291                               threadStartTime, threadEndTime,
   18292                               &glmsg, pointerArgs);
   18293     glContext->traceGLMessage(&glmsg);
   18294 
   18295     return retValue;
   18296 }
   18297 
   18298 void GLTrace_glDeleteProgramPipelinesEXT(GLsizei n, const GLuint * pipelines) {
   18299     GLMessage glmsg;
   18300     GLTraceContext *glContext = getGLTraceContext();
   18301 
   18302     glmsg.set_function(GLMessage::glDeleteProgramPipelinesEXT);
   18303 
   18304     // copy argument n
   18305     GLMessage_DataType *arg_n = glmsg.add_args();
   18306     arg_n->set_isarray(false);
   18307     arg_n->set_type(GLMessage::DataType::INT);
   18308     arg_n->add_intvalue(n);
   18309 
   18310     // copy argument pipelines
   18311     GLMessage_DataType *arg_pipelines = glmsg.add_args();
   18312     arg_pipelines->set_isarray(false);
   18313     arg_pipelines->set_type(GLMessage::DataType::INT64);
   18314     arg_pipelines->add_int64value((uintptr_t)pipelines);
   18315 
   18316     // call function
   18317     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18318     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18319     glContext->hooks->gl.glDeleteProgramPipelinesEXT(n, pipelines);
   18320     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18321     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18322 
   18323     void *pointerArgs[] = {
   18324         (void *) pipelines,
   18325     };
   18326 
   18327     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18328                               threadStartTime, threadEndTime,
   18329                               &glmsg, pointerArgs);
   18330     glContext->traceGLMessage(&glmsg);
   18331 }
   18332 
   18333 void GLTrace_glGenProgramPipelinesEXT(GLsizei n, GLuint * pipelines) {
   18334     GLMessage glmsg;
   18335     GLTraceContext *glContext = getGLTraceContext();
   18336 
   18337     glmsg.set_function(GLMessage::glGenProgramPipelinesEXT);
   18338 
   18339     // copy argument n
   18340     GLMessage_DataType *arg_n = glmsg.add_args();
   18341     arg_n->set_isarray(false);
   18342     arg_n->set_type(GLMessage::DataType::INT);
   18343     arg_n->add_intvalue(n);
   18344 
   18345     // copy argument pipelines
   18346     GLMessage_DataType *arg_pipelines = glmsg.add_args();
   18347     arg_pipelines->set_isarray(false);
   18348     arg_pipelines->set_type(GLMessage::DataType::INT64);
   18349     arg_pipelines->add_int64value((uintptr_t)pipelines);
   18350 
   18351     // call function
   18352     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18353     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18354     glContext->hooks->gl.glGenProgramPipelinesEXT(n, pipelines);
   18355     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18356     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18357 
   18358     void *pointerArgs[] = {
   18359         (void *) pipelines,
   18360     };
   18361 
   18362     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18363                               threadStartTime, threadEndTime,
   18364                               &glmsg, pointerArgs);
   18365     glContext->traceGLMessage(&glmsg);
   18366 }
   18367 
   18368 void GLTrace_glGetProgramPipelineInfoLogEXT(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {
   18369     GLMessage glmsg;
   18370     GLTraceContext *glContext = getGLTraceContext();
   18371 
   18372     glmsg.set_function(GLMessage::glGetProgramPipelineInfoLogEXT);
   18373 
   18374     // copy argument pipeline
   18375     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   18376     arg_pipeline->set_isarray(false);
   18377     arg_pipeline->set_type(GLMessage::DataType::INT);
   18378     arg_pipeline->add_intvalue(pipeline);
   18379 
   18380     // copy argument bufSize
   18381     GLMessage_DataType *arg_bufSize = glmsg.add_args();
   18382     arg_bufSize->set_isarray(false);
   18383     arg_bufSize->set_type(GLMessage::DataType::INT);
   18384     arg_bufSize->add_intvalue(bufSize);
   18385 
   18386     // copy argument length
   18387     GLMessage_DataType *arg_length = glmsg.add_args();
   18388     arg_length->set_isarray(false);
   18389     arg_length->set_type(GLMessage::DataType::INT64);
   18390     arg_length->add_int64value((uintptr_t)length);
   18391 
   18392     // copy argument infoLog
   18393     GLMessage_DataType *arg_infoLog = glmsg.add_args();
   18394     arg_infoLog->set_isarray(false);
   18395     arg_infoLog->set_type(GLMessage::DataType::INT64);
   18396     arg_infoLog->add_int64value((uintptr_t)infoLog);
   18397 
   18398     // call function
   18399     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18400     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18401     glContext->hooks->gl.glGetProgramPipelineInfoLogEXT(pipeline, bufSize, length, infoLog);
   18402     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18403     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18404 
   18405     void *pointerArgs[] = {
   18406         (void *) length,
   18407         (void *) infoLog,
   18408     };
   18409 
   18410     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18411                               threadStartTime, threadEndTime,
   18412                               &glmsg, pointerArgs);
   18413     glContext->traceGLMessage(&glmsg);
   18414 }
   18415 
   18416 void GLTrace_glGetProgramPipelineivEXT(GLuint pipeline, GLenum pname, GLint * params) {
   18417     GLMessage glmsg;
   18418     GLTraceContext *glContext = getGLTraceContext();
   18419 
   18420     glmsg.set_function(GLMessage::glGetProgramPipelineivEXT);
   18421 
   18422     // copy argument pipeline
   18423     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   18424     arg_pipeline->set_isarray(false);
   18425     arg_pipeline->set_type(GLMessage::DataType::INT);
   18426     arg_pipeline->add_intvalue(pipeline);
   18427 
   18428     // copy argument pname
   18429     GLMessage_DataType *arg_pname = glmsg.add_args();
   18430     arg_pname->set_isarray(false);
   18431     arg_pname->set_type(GLMessage::DataType::ENUM);
   18432     arg_pname->add_intvalue((int)pname);
   18433 
   18434     // copy argument params
   18435     GLMessage_DataType *arg_params = glmsg.add_args();
   18436     arg_params->set_isarray(false);
   18437     arg_params->set_type(GLMessage::DataType::INT64);
   18438     arg_params->add_int64value((uintptr_t)params);
   18439 
   18440     // call function
   18441     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18442     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18443     glContext->hooks->gl.glGetProgramPipelineivEXT(pipeline, pname, params);
   18444     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18445     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18446 
   18447     void *pointerArgs[] = {
   18448         (void *) params,
   18449     };
   18450 
   18451     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18452                               threadStartTime, threadEndTime,
   18453                               &glmsg, pointerArgs);
   18454     glContext->traceGLMessage(&glmsg);
   18455 }
   18456 
   18457 GLboolean GLTrace_glIsProgramPipelineEXT(GLuint pipeline) {
   18458     GLMessage glmsg;
   18459     GLTraceContext *glContext = getGLTraceContext();
   18460 
   18461     glmsg.set_function(GLMessage::glIsProgramPipelineEXT);
   18462 
   18463     // copy argument pipeline
   18464     GLMessage_DataType *arg_pipeline = glmsg.add_args();
   18465     arg_pipeline->set_isarray(false);
   18466     arg_pipeline->set_type(GLMessage::DataType::INT);
   18467     arg_pipeline->add_intvalue(pipeline);
   18468 
   18469     // call function
   18470     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18471     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18472     GLboolean retValue = glContext->hooks->gl.glIsProgramPipelineEXT(pipeline);
   18473     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18474     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18475 
   18476     // set return value
   18477     GLMessage_DataType *rt = glmsg.mutable_returnvalue();
   18478     rt->set_isarray(false);
   18479     rt->set_type(GLMessage::DataType::BOOL);
   18480     rt->add_boolvalue(retValue);
   18481 
   18482     void *pointerArgs[] = {
   18483     };
   18484 
   18485     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18486                               threadStartTime, threadEndTime,
   18487                               &glmsg, pointerArgs);
   18488     glContext->traceGLMessage(&glmsg);
   18489 
   18490     return retValue;
   18491 }
   18492 
   18493 void GLTrace_glProgramParameteriEXT(GLuint program, GLenum pname, GLint value) {
   18494     GLMessage glmsg;
   18495     GLTraceContext *glContext = getGLTraceContext();
   18496 
   18497     glmsg.set_function(GLMessage::glProgramParameteriEXT);
   18498 
   18499     // copy argument program
   18500     GLMessage_DataType *arg_program = glmsg.add_args();
   18501     arg_program->set_isarray(false);
   18502     arg_program->set_type(GLMessage::DataType::INT);
   18503     arg_program->add_intvalue(program);
   18504 
   18505     // copy argument pname
   18506     GLMessage_DataType *arg_pname = glmsg.add_args();
   18507     arg_pname->set_isarray(false);
   18508     arg_pname->set_type(GLMessage::DataType::ENUM);
   18509     arg_pname->add_intvalue((int)pname);
   18510 
   18511     // copy argument value
   18512     GLMessage_DataType *arg_value = glmsg.add_args();
   18513     arg_value->set_isarray(false);
   18514     arg_value->set_type(GLMessage::DataType::INT);
   18515     arg_value->add_intvalue(value);
   18516 
   18517     // call function
   18518     nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18519     nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
   18520     glContext->hooks->gl.glProgramParameteriEXT(program, pname, value);
   18521     nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
   18522     nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
   18523 
   18524     void *pointerArgs[] = {
   18525     };
   18526 
   18527     fixupGLMessage(glContext, wallStartTime, wallEndTime,
   18528                               threadStartTime, threadEndTime,
   18529                               &glmsg, pointerArgs);
   18530     glContext->traceGLMessage(&glmsg);
   18531 }
   18532 
   18533 void GLTrace_glProgramUniform1fEXT(GLuint program,