Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73d2b3c7 authored by Siva Velusamy's avatar Siva Velusamy Committed by Android (Google) Code Review
Browse files

Merge "glestrace: Framework for GLES tracing library"

parents 54703d8b 0469dd6d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ LOCAL_SRC_FILES:= \
	EGL/Loader.cpp 	       \
#

LOCAL_SHARED_LIBRARIES += libcutils libutils libGLESv2_dbg
LOCAL_SHARED_LIBRARIES += libcutils libutils libGLES_trace
LOCAL_LDLIBS := -lpthread -ldl
LOCAL_MODULE:= libEGL
LOCAL_LDFLAGS += -Wl,--exclude-libs=ALL
+2 −2
Original line number Diff line number Diff line
@@ -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)
+6 −17
Original line number Diff line number Diff line
@@ -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);
    }
+23 −11
Original line number Diff line number Diff line
@@ -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"
@@ -112,7 +112,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;

// ----------------------------------------------------------------------------
@@ -516,6 +515,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;
        }
    }
@@ -657,9 +660,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();
@@ -886,6 +890,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++) {
@@ -896,7 +904,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);
                }
@@ -924,10 +932,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);
@@ -937,6 +941,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);
}
@@ -1162,7 +1171,10 @@ EGLBoolean eglReleaseThread(void)
        }
    }
    egl_tls_t::clearTLS();
    dbgReleaseThread();
#if EGL_TRACE
    if (gEGLDebugLevel > 0)
        GLTrace_eglReleaseThread();
#endif
    return EGL_TRUE;
}

+1 −1
Original line number Diff line number Diff line
@@ -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) {
Loading