diff options
| author | Chet Haase <chet@google.com> | 2012-06-01 07:29:53 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-06-01 07:29:53 -0700 |
| commit | 561ff8a74e3d9ea15f58d9b6534da9ea5a63d84b (patch) | |
| tree | c19e033c97e229039d12c9614356d8b2aadb6f1f /core | |
| parent | d53710ce644e7f1df417a8fe42ec26233a751b2e (diff) | |
| parent | 486590963e2207d68eebd6944fec70d50d41116a (diff) | |
| download | frameworks_base-561ff8a74e3d9ea15f58d9b6534da9ea5a63d84b.zip frameworks_base-561ff8a74e3d9ea15f58d9b6534da9ea5a63d84b.tar.gz frameworks_base-561ff8a74e3d9ea15f58d9b6534da9ea5a63d84b.tar.bz2 | |
Merge "Skip eglSwapBuffers() call when we do not draw to GL" into jb-dev
Diffstat (limited to 'core')
| -rw-r--r-- | core/java/android/view/DisplayList.java | 7 | ||||
| -rw-r--r-- | core/java/android/view/HardwareRenderer.java | 32 |
2 files changed, 25 insertions, 14 deletions
diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java index da666b5..a42e156 100644 --- a/core/java/android/view/DisplayList.java +++ b/core/java/android/view/DisplayList.java @@ -62,6 +62,13 @@ public abstract class DisplayList { public static final int STATUS_INVOKE = 0x2; /** + * Indicates that the display list performed GL drawing operations. + * + * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int) + */ + public static final int STATUS_DREW = 0x4; + + /** * Starts recording the display list. All operations performed on the * returned canvas are recorded and stored in this display list. * diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index cba488e..7e86ea3 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -1104,6 +1104,7 @@ public abstract class HardwareRenderer { onPreDraw(dirty); + int status = DisplayList.STATUS_DONE; int saveCount = canvas.save(); callbacks.onHardwarePreDraw(canvas); @@ -1137,7 +1138,7 @@ public abstract class HardwareRenderer { drawDisplayListStartTime = System.nanoTime(); } - int status = canvas.drawDisplayList(displayList, mRedrawClip, + status = canvas.drawDisplayList(displayList, mRedrawClip, DisplayList.FLAG_CLIP_CHILDREN); if (mProfileEnabled) { @@ -1173,22 +1174,25 @@ public abstract class HardwareRenderer { onPostDraw(); attachInfo.mIgnoreDirtyState = false; + + if ((status & DisplayList.STATUS_DREW) == DisplayList.STATUS_DREW) { - long eglSwapBuffersStartTime = 0; - if (mProfileEnabled) { - eglSwapBuffersStartTime = System.nanoTime(); - } - - sEgl.eglSwapBuffers(sEglDisplay, mEglSurface); - - if (mProfileEnabled) { - long now = System.nanoTime(); - float total = (now - eglSwapBuffersStartTime) * 0.000001f; - mProfileData[mProfileCurrentFrame + 2] = total; + long eglSwapBuffersStartTime = 0; + if (mProfileEnabled) { + eglSwapBuffersStartTime = System.nanoTime(); + } + + sEgl.eglSwapBuffers(sEglDisplay, mEglSurface); + + if (mProfileEnabled) { + long now = System.nanoTime(); + float total = (now - eglSwapBuffersStartTime) * 0.000001f; + mProfileData[mProfileCurrentFrame + 2] = total; + } + + checkEglErrors(); } - checkEglErrors(); - return dirty == null; } } |
