Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2734)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java

Issue 2271393003: Delay setting the compositor view background to null on N (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Do all calc if > M Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
index f7a4cab8364a7bd0e60e41ef0b1a9c00801e6c68..4a4124d9ef7dcb6fd099833bcc231342d9f71105 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
@@ -9,11 +9,14 @@ import android.content.Context;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.Rect;
+import android.os.Build;
+import android.view.Display;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
+import android.view.WindowManager;
import org.chromium.base.CommandLine;
import org.chromium.base.Log;
@@ -21,7 +24,6 @@ import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
-import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutProvider;
@@ -47,6 +49,7 @@ import org.chromium.ui.resources.ResourceManager;
public class CompositorView
extends SurfaceView implements ContentOffsetProvider, SurfaceHolder.Callback {
private static final String TAG = "CompositorView";
+ private static final long NANOSECONDS_PER_MILLISECOND = 1000000;
// Cache objects that should not be created every frame
private final Rect mCacheViewport = new Rect();
@@ -61,6 +64,9 @@ public class CompositorView
private int mLastLayerCount;
+ // A conservative estimate of when a frame is guaranteed to be presented after being submitted.
+ private long mFramePresentationDelay;
+
// Resource Management
private ResourceManager mResourceManager;
@@ -187,6 +193,18 @@ public class CompositorView
setBackgroundColor(Color.WHITE);
setVisibility(View.VISIBLE);
+ mFramePresentationDelay = 0;
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
+ Display display =
+ ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE))
+ .getDefaultDisplay();
+ long presentationDeadline = display.getPresentationDeadlineNanos()
+ / NANOSECONDS_PER_MILLISECOND;
+ long vsyncPeriod = mWindowAndroid.getVsyncPeriodInMillis();
+ mFramePresentationDelay = Math.min(3 * vsyncPeriod,
+ ((presentationDeadline + vsyncPeriod - 1) / vsyncPeriod) * vsyncPeriod);
+ }
+
// Grab the Resource Manager
mResourceManager = nativeGetResourceManager(mNativeCompositorView);
}
@@ -289,12 +307,12 @@ public class CompositorView
private void onSwapBuffersCompleted(int pendingSwapBuffersCount) {
// Clear the color used to cover the uninitialized surface.
if (getBackground() != null) {
- post(new Runnable() {
+ postDelayed(new Runnable() {
@Override
public void run() {
setBackgroundResource(0);
}
- });
+ }, mFramePresentationDelay);
}
mRenderHost.onSwapBuffersCompleted(pendingSwapBuffersCount);

Powered by Google App Engine
This is Rietveld 408576698