summaryrefslogtreecommitdiffstats
path: root/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'opengl/libs/GLES_trace/src/gltrace_eglapi.cpp')
-rw-r--r--opengl/libs/GLES_trace/src/gltrace_eglapi.cpp56
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();
+}
+
}