summaryrefslogtreecommitdiffstats
path: root/opengl/libs/GLES_trace/src/gltrace_egl.cpp
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2011-12-14 12:19:56 -0800
committerSiva Velusamy <vsiva@google.com>2012-01-04 11:38:37 -0800
commit1e81e710fc6e676a43c0582abd9b802bc8bda175 (patch)
tree7a613c80299e68ed0f31b83a52c342059158bee2 /opengl/libs/GLES_trace/src/gltrace_egl.cpp
parentefc1265402512303a9cf88b7ddd796e92df7857b (diff)
downloadframeworks_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.cpp44
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);
}
};