diff options
Diffstat (limited to 'opengl/libs/GLES_trace/src/gltrace_eglapi.cpp')
-rw-r--r-- | opengl/libs/GLES_trace/src/gltrace_eglapi.cpp | 56 |
1 files changed, 42 insertions, 14 deletions
diff --git a/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp b/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp index 3fe5f8b..e04e6d4 100644 --- a/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp +++ b/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp @@ -28,17 +28,11 @@ namespace android { -void GLTrace_eglMakeCurrent(const unsigned version, gl_hooks_t *hooks) { - gltrace::initContext(version, hooks); -} - -void GLTrace_eglReleaseThread() { - gltrace::releaseContext(); -} +using gltrace::GLTraceState; +using gltrace::GLTraceContext; +using gltrace::TCPStream; -void GLTrace_eglCreateContext(int version, EGLContext c) { - // TODO -} +static GLTraceState *sGLTraceState; void GLTrace_start() { char value[PROPERTY_VALUE_MAX]; @@ -46,19 +40,53 @@ void GLTrace_start() { property_get("debug.egl.debug_port", value, "5039"); const unsigned short port = (unsigned short)atoi(value); - gltrace::startServer(port); + int clientSocket = gltrace::acceptClientConnection(port); + if (clientSocket < 0) { + LOGE("Error creating GLTrace server socket. Quitting application."); + exit(-1); + } + + // create communication channel to the host + TCPStream *stream = new TCPStream(clientSocket); + + // initialize tracing state + sGLTraceState = new GLTraceState(stream); } void GLTrace_stop() { - gltrace::stopServer(); + delete sGLTraceState; + sGLTraceState = NULL; } -gl_hooks_t *GLTrace_getGLHooks() { - return gltrace::getGLHooks(); +void GLTrace_eglCreateContext(int version, EGLContext c) { + // update trace state for new EGL context + GLTraceContext *traceContext = sGLTraceState->createTraceContext(version, c); + gltrace::setupTraceContextThreadSpecific(traceContext); + + // trace command through to the host + gltrace::GLTrace_eglCreateContext(version, traceContext->getId()); +} + +void GLTrace_eglMakeCurrent(const unsigned version, gl_hooks_t *hooks, EGLContext c) { + // setup per context state + GLTraceContext *traceContext = sGLTraceState->getTraceContext(c); + traceContext->hooks = hooks; + gltrace::setupTraceContextThreadSpecific(traceContext); + + // trace command through to the host + gltrace::GLTrace_eglMakeCurrent(traceContext->getId()); +} + +void GLTrace_eglReleaseThread() { + gltrace::releaseContext(); } void GLTrace_eglSwapBuffers(void *dpy, void *draw) { gltrace::GLTrace_eglSwapBuffers(dpy, draw); } +gl_hooks_t *GLTrace_getGLHooks() { + return gltrace::getGLHooks(); +} + } |