diff options
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 4 | ||||
| -rw-r--r-- | core/java/com/android/internal/policy/BackdropFrameRenderer.java | 52 |
2 files changed, 28 insertions, 28 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index e9ca62333daa..9e4f26fe0aec 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2716,11 +2716,11 @@ public final class ViewRootImpl implements ViewParent, mAttachInfo.mHardwareRenderer.setStopped(false); } - mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this); - if (updated) { requestDrawWindow(); } + + mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this); } else { // If we get here with a disabled & requested hardware renderer, something went // wrong (an invalidate posted right before we destroyed the hardware surface diff --git a/core/java/com/android/internal/policy/BackdropFrameRenderer.java b/core/java/com/android/internal/policy/BackdropFrameRenderer.java index b1598e7d16dd..b781fd47b1bd 100644 --- a/core/java/com/android/internal/policy/BackdropFrameRenderer.java +++ b/core/java/com/android/internal/policy/BackdropFrameRenderer.java @@ -16,8 +16,6 @@ package com.android.internal.policy; -import static android.view.WindowCallbacks.RESIZE_MODE_FREEFORM; - import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -102,9 +100,6 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame mOldSystemInsets.set(systemInsets); mOldStableInsets.set(stableInsets); mResizeMode = resizeMode; - synchronized (this) { - redrawLocked(initialBounds, fullscreen, mSystemInsets, mStableInsets); - } // Kick off our draw thread. start(); @@ -160,7 +155,7 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame mSystemInsets.set(systemInsets); mStableInsets.set(stableInsets); // Notify of a bounds change. - pingRenderLocked(); + pingRenderLocked(false /* drawImmediate */); } } @@ -172,7 +167,7 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame if (mRenderer != null) { // Enforce a window redraw. mOldTargetRect.set(0, 0, 0, 0); - pingRenderLocked(); + pingRenderLocked(false /* drawImmediate */); } } } @@ -197,7 +192,7 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame mRenderer = null; // Exit the renderer loop. - pingRenderLocked(); + pingRenderLocked(false /* drawImmediate */); } } } @@ -208,9 +203,6 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame Looper.prepare(); synchronized (this) { mChoreographer = Choreographer.getInstance(); - - // Draw at least once. - mChoreographer.postFrameCallback(this); } Looper.loop(); } finally { @@ -236,18 +228,22 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame Looper.myLooper().quit(); return; } - mNewTargetRect.set(mTargetRect); - if (!mNewTargetRect.equals(mOldTargetRect) - || mOldFullscreen != mFullscreen - || !mStableInsets.equals(mOldStableInsets) - || !mSystemInsets.equals(mOldSystemInsets) - || mReportNextDraw) { - mOldFullscreen = mFullscreen; - mOldTargetRect.set(mNewTargetRect); - mOldSystemInsets.set(mSystemInsets); - mOldStableInsets.set(mStableInsets); - redrawLocked(mNewTargetRect, mFullscreen, mSystemInsets, mStableInsets); - } + doFrameUncheckedLocked(); + } + } + + private void doFrameUncheckedLocked() { + mNewTargetRect.set(mTargetRect); + if (!mNewTargetRect.equals(mOldTargetRect) + || mOldFullscreen != mFullscreen + || !mStableInsets.equals(mOldStableInsets) + || !mSystemInsets.equals(mOldSystemInsets) + || mReportNextDraw) { + mOldFullscreen = mFullscreen; + mOldTargetRect.set(mNewTargetRect); + mOldSystemInsets.set(mSystemInsets); + mOldStableInsets.set(mStableInsets); + redrawLocked(mNewTargetRect, mFullscreen, mSystemInsets, mStableInsets); } } @@ -288,7 +284,7 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame synchronized (this) { mReportNextDraw = reportNextDraw; mOldTargetRect.set(0, 0, 0, 0); - pingRenderLocked(); + pingRenderLocked(true /* drawImmediate */); } } @@ -403,10 +399,14 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame * Sends a message to the renderer to wake up and perform the next action which can be * either the next rendering or the self destruction if mRenderer is null. * Note: This call must be synchronized. + * + * @param drawImmediate if we should draw immediately instead of scheduling a frame */ - private void pingRenderLocked() { - if (mChoreographer != null) { + private void pingRenderLocked(boolean drawImmediate) { + if (mChoreographer != null && !drawImmediate) { mChoreographer.postFrameCallback(this); + } else { + doFrameUncheckedLocked(); } } |