diff options
author | Siva Velusamy <vsiva@google.com> | 2011-11-30 15:05:37 -0800 |
---|---|---|
committer | Siva Velusamy <vsiva@google.com> | 2011-12-02 15:30:17 -0800 |
commit | 0469dd6d55fa331bfd7de9431da98b6340d82271 (patch) | |
tree | 02185748d9cfeafb5fed64e715b11abff37eaeb9 /opengl/libs/EGL | |
parent | 484bc2727c7ce5098ad229ce4feb3c230dfd109d (diff) | |
download | frameworks_native-0469dd6d55fa331bfd7de9431da98b6340d82271.zip frameworks_native-0469dd6d55fa331bfd7de9431da98b6340d82271.tar.gz frameworks_native-0469dd6d55fa331bfd7de9431da98b6340d82271.tar.bz2 |
glestrace: Framework for GLES tracing library
This patch provides a framework for tracing GLES 1.0 and 2.0
functions. It is missing a lot of features, but here are the
things it accomplishes:
- Stop building the glesv2dbg library, and build the
glestrace library instead.
- Replace the hooks for glesv2dbg with the ones for glestrace.
- Add the basics for the trace library. Currently, this
traces all GL functions, but not all required data is
sent for all the functions. As a result, it will not
be possible to reconstruct the entire GL state on the
host side.
The files gltrace.pb.* and gltrace_api.* are both generated
using the tools/genapi.py script.
Change-Id: Id60a468f7278657f008bc6ea1df01f9bdfecfdd3
Diffstat (limited to 'opengl/libs/EGL')
-rw-r--r-- | opengl/libs/EGL/Loader.cpp | 4 | ||||
-rw-r--r-- | opengl/libs/EGL/egl.cpp | 23 | ||||
-rw-r--r-- | opengl/libs/EGL/eglApi.cpp | 34 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_tls.cpp | 2 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_tls.h | 1 | ||||
-rw-r--r-- | opengl/libs/EGL/trace.cpp | 16 |
6 files changed, 32 insertions, 48 deletions
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp index 325193c..8a8898b 100644 --- a/opengl/libs/EGL/Loader.cpp +++ b/opengl/libs/EGL/Loader.cpp @@ -28,7 +28,7 @@ #include <EGL/egl.h> #include "egldefs.h" -#include "glesv2dbg.h" +#include "glestrace.h" #include "hooks.h" #include "Loader.h" @@ -157,7 +157,7 @@ Loader::Loader() Loader::~Loader() { - StopDebugServer(); + GLTrace_stop(); } const char* Loader::getTag(int dpy, int impl) diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp index 6ad06af..14745b3 100644 --- a/opengl/libs/EGL/egl.cpp +++ b/opengl/libs/EGL/egl.cpp @@ -37,7 +37,7 @@ #include "egldefs.h" #include "egl_impl.h" #include "egl_tls.h" -#include "glesv2dbg.h" +#include "glestrace.h" #include "hooks.h" #include "Loader.h" @@ -67,7 +67,6 @@ static int sEGLTraceLevel; static int sEGLApplicationTraceLevel; extern gl_hooks_t gHooksTrace; -extern gl_hooks_t gHooksDebug; static inline void setGlTraceThreadSpecific(gl_hooks_t const *value) { pthread_setspecific(gGLTraceKey, value); @@ -89,27 +88,17 @@ void initEglTraceLevel() { char procPath[128] = {}; sprintf(procPath, "/proc/%ld/cmdline", pid); FILE * file = fopen(procPath, "r"); - if (file) - { + if (file) { char cmdline[256] = {}; - if (fgets(cmdline, sizeof(cmdline) - 1, file)) - { + if (fgets(cmdline, sizeof(cmdline) - 1, file)) { if (!strcmp(value, cmdline)) gEGLDebugLevel = 1; } fclose(file); } - if (gEGLDebugLevel > 0) - { - property_get("debug.egl.debug_port", value, "5039"); - const unsigned short port = (unsigned short)atoi(value); - property_get("debug.egl.debug_forceUseFile", value, "0"); - const bool forceUseFile = (bool)atoi(value); - property_get("debug.egl.debug_maxFileSize", value, "8"); - const unsigned int maxFileSize = atoi(value) << 20; - property_get("debug.egl.debug_filePath", value, "/data/local/tmp/dump.gles2dbg"); - StartDebugServer(port, forceUseFile, maxFileSize, value); + if (gEGLDebugLevel > 0) { + GLTrace_start(); } } @@ -119,7 +108,7 @@ void setGLHooksThreadSpecific(gl_hooks_t const *value) { setGlThreadSpecific(&gHooksTrace); } else if (gEGLDebugLevel > 0 && value != &gHooksNoContext) { setGlTraceThreadSpecific(value); - setGlThreadSpecific(&gHooksDebug); + setGlThreadSpecific(GLTrace_getGLHooks()); } else { setGlThreadSpecific(value); } diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index a63d5b0..ceb49d4 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -37,7 +37,7 @@ #include "egl_impl.h" #include "egl_tls.h" -#include "glesv2dbg.h" +#include "glestrace.h" #include "hooks.h" #include "egl_display.h" @@ -110,7 +110,6 @@ extern EGLBoolean egl_init_drivers(); extern const __eglMustCastToProperFunctionPointerType gExtensionForwarders[MAX_NUMBER_OF_GL_EXTENSIONS]; extern int gEGLDebugLevel; extern gl_hooks_t gHooksTrace; -extern gl_hooks_t gHooksDebug; } // namespace android; // ---------------------------------------------------------------------------- @@ -514,6 +513,10 @@ EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, } egl_context_t* c = new egl_context_t(dpy, context, config, dp->configs[intptr_t(config)].impl, cnx, version); +#if EGL_TRACE + if (gEGLDebugLevel > 0) + GLTrace_eglCreateContext(version, c); +#endif return c; } } @@ -655,9 +658,10 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, if (ctx != EGL_NO_CONTEXT) { setGLHooksThreadSpecific(c->cnx->hooks[c->version]); egl_tls_t::setContext(ctx); - if (gEGLDebugLevel > 0) { - CreateDbgContext(c->version, c->cnx->hooks[c->version]); - } +#if EGL_TRACE + if (gEGLDebugLevel > 0) + GLTrace_eglMakeCurrent(c->version, c->cnx->hooks[c->version]); +#endif _c.acquire(); _r.acquire(); _d.acquire(); @@ -884,6 +888,10 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) "no more slots for eglGetProcAddress(\"%s\")", procname); +#if EGL_TRACE + gl_hooks_t *debugHooks = GLTrace_getGLHooks(); +#endif + if (!addr && (slot < MAX_NUMBER_OF_GL_EXTENSIONS)) { bool found = false; for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) { @@ -894,7 +902,7 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) cnx->hooks[GLESv1_INDEX]->ext.extensions[slot] = cnx->hooks[GLESv2_INDEX]->ext.extensions[slot] = #if EGL_TRACE - gHooksDebug.ext.extensions[slot] = gHooksTrace.ext.extensions[slot] = + debugHooks->ext.extensions[slot] = gHooksTrace.ext.extensions[slot] = #endif cnx->egl.eglGetProcAddress(procname); } @@ -922,10 +930,6 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface draw) { - EGLBoolean Debug_eglSwapBuffers(EGLDisplay dpy, EGLSurface draw); - if (gEGLDebugLevel > 0) - Debug_eglSwapBuffers(dpy, draw); - clearError(); egl_display_t const * const dp = validate_display(dpy); @@ -935,6 +939,11 @@ EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface draw) if (!_s.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); +#if EGL_TRACE + if (gEGLDebugLevel > 0) + GLTrace_eglSwapBuffers(dpy, draw); +#endif + egl_surface_t const * const s = get_surface(draw); return s->cnx->egl.eglSwapBuffers(dp->disp[s->impl].dpy, s->surface); } @@ -1154,7 +1163,10 @@ EGLBoolean eglReleaseThread(void) } } egl_tls_t::clearTLS(); - dbgReleaseThread(); +#if EGL_TRACE + if (gEGLDebugLevel > 0) + GLTrace_eglReleaseThread(); +#endif return EGL_TRUE; } diff --git a/opengl/libs/EGL/egl_tls.cpp b/opengl/libs/EGL/egl_tls.cpp index b341ddb..6946ecd 100644 --- a/opengl/libs/EGL/egl_tls.cpp +++ b/opengl/libs/EGL/egl_tls.cpp @@ -33,7 +33,7 @@ pthread_key_t egl_tls_t::sKey = -1; pthread_mutex_t egl_tls_t::sLockKey = PTHREAD_MUTEX_INITIALIZER; egl_tls_t::egl_tls_t() - : error(EGL_SUCCESS), ctx(0), logCallWithNoContext(EGL_TRUE), dbg(0) { + : error(EGL_SUCCESS), ctx(0), logCallWithNoContext(EGL_TRUE) { } const char *egl_tls_t::egl_strerror(EGLint err) { diff --git a/opengl/libs/EGL/egl_tls.h b/opengl/libs/EGL/egl_tls.h index 78b0b2f..2442ca0 100644 --- a/opengl/libs/EGL/egl_tls.h +++ b/opengl/libs/EGL/egl_tls.h @@ -37,7 +37,6 @@ class egl_tls_t { EGLint error; EGLContext ctx; EGLBoolean logCallWithNoContext; - DbgContext* dbg; egl_tls_t(); static void validateTLSKey(); diff --git a/opengl/libs/EGL/trace.cpp b/opengl/libs/EGL/trace.cpp index 0e934e2..bd6c348 100644 --- a/opengl/libs/EGL/trace.cpp +++ b/opengl/libs/EGL/trace.cpp @@ -375,22 +375,6 @@ extern "C" { #undef TRACE_GL_VOID #undef TRACE_GL -// declare all Debug_gl* functions -#define GL_ENTRY(_r, _api, ...) _r Debug_##_api ( __VA_ARGS__ ); -#include "glesv2dbg_functions.h" -#undef GL_ENTRY - -#define GL_ENTRY(_r, _api, ...) Debug_ ## _api, -EGLAPI gl_hooks_t gHooksDebug = { - { - #include "entries.in" - }, - { - {0} - } -}; -#undef GL_ENTRY - // ---------------------------------------------------------------------------- }; // namespace android // ---------------------------------------------------------------------------- |