diff options
| author | Chet Haase <chet@google.com> | 2012-06-01 07:32:39 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2012-06-01 07:32:39 -0700 |
| commit | d0140062db85ae17e807e514fe14d2d0581645fb (patch) | |
| tree | c85e199b3a86be812aa720a15099aea545ced392 /core | |
| parent | c3895253bb833611df8c8f62347ede70153eb5b9 (diff) | |
| parent | 561ff8a74e3d9ea15f58d9b6534da9ea5a63d84b (diff) | |
| download | frameworks_base-d0140062db85ae17e807e514fe14d2d0581645fb.zip frameworks_base-d0140062db85ae17e807e514fe14d2d0581645fb.tar.gz frameworks_base-d0140062db85ae17e807e514fe14d2d0581645fb.tar.bz2 | |
am 561ff8a7: Merge "Skip eglSwapBuffers() call when we do not draw to GL" into jb-dev
* commit '561ff8a74e3d9ea15f58d9b6534da9ea5a63d84b':
Skip eglSwapBuffers() call when we do not draw to GL
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; } } |
