diff options
author | Siva Velusamy <vsiva@google.com> | 2011-12-14 12:19:56 -0800 |
---|---|---|
committer | Siva Velusamy <vsiva@google.com> | 2012-01-04 11:38:37 -0800 |
commit | 1e81e710fc6e676a43c0582abd9b802bc8bda175 (patch) | |
tree | 7a613c80299e68ed0f31b83a52c342059158bee2 /opengl/libs/GLES_trace/src/gltrace_egl.cpp | |
parent | efc1265402512303a9cf88b7ddd796e92df7857b (diff) | |
download | frameworks_base-1e81e710fc6e676a43c0582abd9b802bc8bda175.zip frameworks_base-1e81e710fc6e676a43c0582abd9b802bc8bda175.tar.gz frameworks_base-1e81e710fc6e676a43c0582abd9b802bc8bda175.tar.bz2 |
gltrace: transport buffering and context management
This patch adds two improvements:
1. Protobuf messages are buffered and sent in chunks.
2. Multiple EGL contexts are handled properly: Corresponding
to each EGLContext, a GLTraceContext with a unique ID is created.
On eglMakeCurrent, the appropriate GLTraceContext is set and is
used while tracing subsequent GL Calls in that thread.
Change-Id: I34076376d3e5af205c87c7396ea47659844abd6e
Diffstat (limited to 'opengl/libs/GLES_trace/src/gltrace_egl.cpp')
-rw-r--r-- | opengl/libs/GLES_trace/src/gltrace_egl.cpp | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/opengl/libs/GLES_trace/src/gltrace_egl.cpp b/opengl/libs/GLES_trace/src/gltrace_egl.cpp index 8470a5b..1bef763 100644 --- a/opengl/libs/GLES_trace/src/gltrace_egl.cpp +++ b/opengl/libs/GLES_trace/src/gltrace_egl.cpp @@ -24,16 +24,54 @@ namespace android { namespace gltrace { +void GLTrace_eglCreateContext(int version, int contextId) { + GLMessage glmessage; + GLTraceContext *glContext = getGLTraceContext(); + + glmessage.set_context_id(contextId); + glmessage.set_function(GLMessage::eglCreateContext); + + // copy argument version + GLMessage_DataType *arg_version = glmessage.add_args(); + arg_version->set_isarray(false); + arg_version->set_type(GLMessage::DataType::INT); + arg_version->add_intvalue(version); + + // copy argument context + GLMessage_DataType *arg_context = glmessage.add_args(); + arg_context->set_isarray(false); + arg_context->set_type(GLMessage::DataType::INT); + arg_context->add_intvalue(contextId); + + glContext->traceGLMessage(&glmessage); +} + +void GLTrace_eglMakeCurrent(int contextId) { + GLMessage glmessage; + GLTraceContext *glContext = getGLTraceContext(); + + glmessage.set_context_id(contextId); + glmessage.set_function(GLMessage::eglMakeCurrent); + + // copy argument context + GLMessage_DataType *arg_context = glmessage.add_args(); + arg_context->set_isarray(false); + arg_context->set_type(GLMessage::DataType::INT); + arg_context->add_intvalue(contextId); + + glContext->traceGLMessage(&glmessage); +} + void GLTrace_eglSwapBuffers(void *dpy, void *draw) { GLMessage glmessage; GLTraceContext *glContext = getGLTraceContext(); - glmessage.set_context_id(1); + glmessage.set_context_id(glContext->getId()); glmessage.set_function(GLMessage::eglSwapBuffers); // read FB0 since that is what is displayed on the screen - fixup_addFBContents(&glmessage, FB0); - traceGLMessage(&glmessage); + fixup_addFBContents(glContext, &glmessage, FB0); + glContext->traceGLMessage(&glmessage); } }; |