diff options
author | Mathias Agopian <mathias@google.com> | 2012-06-05 21:44:43 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2012-06-05 21:44:43 -0700 |
commit | d75f84d6410da934d1b1760fdc0d05d4ba1e8f35 (patch) | |
tree | 9e28471326267337cac5095c6596323ef262cb0f /opengl/libs/EGL | |
parent | 4824d40a35333182c2eb3593511b9bcbecd0a943 (diff) | |
download | frameworks_native-d75f84d6410da934d1b1760fdc0d05d4ba1e8f35.zip frameworks_native-d75f84d6410da934d1b1760fdc0d05d4ba1e8f35.tar.gz frameworks_native-d75f84d6410da934d1b1760fdc0d05d4ba1e8f35.tar.bz2 |
reduce PB size from 2MB to 512KB
this allows us to enable h/w acceleration on low-end
devices while keeping memory usage down.
Bug: 6557760
Change-Id: I8af2de3038dc2579360b8b73aa452cb7a0e506a9
Diffstat (limited to 'opengl/libs/EGL')
-rw-r--r-- | opengl/libs/EGL/Loader.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp index 0b1016c..9ee3686 100644 --- a/opengl/libs/EGL/Loader.cpp +++ b/opengl/libs/EGL/Loader.cpp @@ -81,6 +81,24 @@ checkGlesEmulationStatus(void) // ---------------------------------------------------------------------------- +static char const * getProcessCmdline() { + long pid = getpid(); + char procPath[128]; + snprintf(procPath, 128, "/proc/%ld/cmdline", pid); + FILE * file = fopen(procPath, "r"); + if (file) { + static char cmdline[256]; + char *str = fgets(cmdline, sizeof(cmdline) - 1, file); + fclose(file); + if (str) { + return cmdline; + } + } + return NULL; +} + +// ---------------------------------------------------------------------------- + Loader::driver_t::driver_t(void* gles) { dso[0] = gles; @@ -280,6 +298,35 @@ void *Loader::load_driver(const char* kind, const char *tag, ALOGE_IF(!getProcAddress, "can't find eglGetProcAddress() in %s", driver_absolute_path); +#ifdef SYSTEMUI_PBSIZE_HACK +#warning "SYSTEMUI_PBSIZE_HACK enabled" + /* + * TODO: replace SYSTEMUI_PBSIZE_HACK by something less hackish + * + * Here we adjust the PB size from its default value to 512KB which + * is the minimum acceptable for the systemui process. + * We do this on low-end devices only because it allows us to enable + * h/w acceleration in the systemui process while keeping the + * memory usage down. + * + * Obviously, this is the wrong place and wrong way to make this + * adjustment, but at the time of this writing this was the safest + * solution. + */ + const char *cmdline = getProcessCmdline(); + if (strstr(cmdline, "systemui")) { + void *imgegl = dlopen("/vendor/lib/libIMGegl.so", RTLD_LAZY); + if (imgegl) { + unsigned int *PVRDefaultPBS = + (unsigned int *)dlsym(imgegl, "PVRDefaultPBS"); + if (PVRDefaultPBS) { + ALOGD("setting default PBS to 512KB, was %d KB", *PVRDefaultPBS / 1024); + *PVRDefaultPBS = 512*1024; + } + } + } +#endif + egl_t* egl = &cnx->egl; __eglMustCastToProperFunctionPointerType* curr = (__eglMustCastToProperFunctionPointerType*)egl; |