summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2012-06-01 07:32:39 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-06-01 07:32:39 -0700
commitd0140062db85ae17e807e514fe14d2d0581645fb (patch)
treec85e199b3a86be812aa720a15099aea545ced392 /core
parentc3895253bb833611df8c8f62347ede70153eb5b9 (diff)
parent561ff8a74e3d9ea15f58d9b6534da9ea5a63d84b (diff)
downloadframeworks_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.java7
-rw-r--r--core/java/android/view/HardwareRenderer.java32
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;
}
}