OSDN Git Service

Disable EGL hibernation due to jank
authorJesse Hall <jessehall@google.com>
Fri, 4 May 2012 21:52:40 +0000 (14:52 -0700)
committerJesse Hall <jessehall@google.com>
Fri, 4 May 2012 22:21:35 +0000 (15:21 -0700)
Hibernating EGL takes a long time (>100 ms) and blocks all other
rendering. During window animations, the outgoing activity begins
hibernation before the animation stops, causing visible stutter.
Hibernation is still available by setting 'BOARD_ALLOW_EGL_HIBERNATION
:= true' in the devices BoardConfig.mk

Change-Id: Iab4e00723a1adcd97481e81b2efdc821b3e9712f

opengl/libs/Android.mk
opengl/libs/EGL/egl_display.cpp
opengl/libs/EGL/egl_display.h

index 66bc64d..c5c2618 100644 (file)
@@ -36,6 +36,10 @@ LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
 LOCAL_CFLAGS += -fvisibility=hidden
 LOCAL_CFLAGS += -DEGL_TRACE=1
 
+ifeq ($(BOARD_ALLOW_EGL_HIBERNATION),true)
+  LOCAL_CFLAGS += -DBOARD_ALLOW_EGL_HIBERNATION
+endif
+
 ifeq ($(TARGET_BOARD_PLATFORM),msm7k)
 LOCAL_CFLAGS += -DADRENO130=1
 endif
index f2e3897..2cd1a93 100644 (file)
@@ -420,7 +420,7 @@ void egl_display_t::HibernationMachine::decWakeCount(WakeRefStrength strength) {
     if (mWakeCount == 0 && CC_UNLIKELY(mAttemptHibernation)) {
         egl_connection_t* const cnx = &gEGLImpl;
         mAttemptHibernation = false;
-        if (mDpyValid &&
+        if (mAllowHibernation && mDpyValid &&
                 cnx->egl.eglHibernateProcessIMG &&
                 cnx->egl.eglAwakenProcessIMG) {
             ALOGV("Hibernating\n");
index 412568b..7bb09a3 100644 (file)
@@ -155,7 +155,12 @@ private:
         };
 
         HibernationMachine(): mWakeCount(0), mHibernating(false),
-                mAttemptHibernation(false), mDpyValid(false)
+                mAttemptHibernation(false), mDpyValid(false),
+#if BOARD_ALLOW_EGL_HIBERNATION
+                mAllowHibernation(true)
+#else
+                mAllowHibernation(false)
+#endif
         {}
         ~HibernationMachine() {}
 
@@ -165,11 +170,12 @@ private:
         void setDisplayValid(bool valid);
 
     private:
-        Mutex   mLock;
-        int32_t mWakeCount;
-        bool    mHibernating;
-        bool    mAttemptHibernation;
-        bool    mDpyValid;
+        Mutex      mLock;
+        int32_t    mWakeCount;
+        bool       mHibernating;
+        bool       mAttemptHibernation;
+        bool       mDpyValid;
+        const bool mAllowHibernation;
     };
     HibernationMachine mHibernation;
 };