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

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

Issue 2716193002: android: Add draw completion for CompositorView (Closed)
Patch Set: fix x86 Created 3 years, 9 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
« no previous file with comments | « no previous file | chrome/browser/android/compositor/compositor_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d2bc37147b0301fbbc58907af5f4bbb1cef5ae5f..8fb536635630804908b240569e364c7eb7b11c28 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
@@ -23,6 +23,7 @@ import org.chromium.base.Log;
import org.chromium.base.TraceEvent;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.annotations.UsedByReflection;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutProvider;
@@ -39,11 +40,14 @@ import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.resources.AndroidResourceType;
import org.chromium.ui.resources.ResourceManager;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* The is the {@link View} displaying the ui compositor results; including webpages and tabswitcher.
*/
@JNINamespace("android")
-public class CompositorView extends SurfaceView implements SurfaceHolder.Callback {
+public class CompositorView extends SurfaceView implements SurfaceHolder.Callback2 {
private static final String TAG = "CompositorView";
private static final long NANOSECONDS_PER_MILLISECOND = 1000000;
@@ -72,6 +76,7 @@ public class CompositorView extends SurfaceView implements SurfaceHolder.Callbac
private int mSurfaceWidth;
private int mSurfaceHeight;
private boolean mPreloadedResources;
+ private List<Runnable> mDrawingFinishedCallbacks;
// The current SurfaceView pixel format. Defaults to OPAQUE.
private int mCurrentPixelFormat = PixelFormat.OPAQUE;
@@ -199,6 +204,9 @@ public class CompositorView extends SurfaceView implements SurfaceHolder.Callbac
// Grab the Resource Manager
mResourceManager = nativeGetResourceManager(mNativeCompositorView);
+
+ // Redraw in case there are callbacks pending |mDrawingFinishedCallbacks|.
+ nativeSetNeedsComposite(mNativeCompositorView);
}
@Override
@@ -217,6 +225,19 @@ public class CompositorView extends SurfaceView implements SurfaceHolder.Callbac
}
@Override
+ public void surfaceRedrawNeeded(SurfaceHolder holder) {
+ // Intentionally not implemented.
+ }
+
+ // TODO(boliu): Mark this override instead.
+ @UsedByReflection("Android")
+ public void surfaceRedrawNeededAsync(SurfaceHolder holder, Runnable drawingFinished) {
+ if (mDrawingFinishedCallbacks == null) mDrawingFinishedCallbacks = new ArrayList<>();
+ mDrawingFinishedCallbacks.add(drawingFinished);
+ if (mNativeCompositorView != 0) nativeSetNeedsComposite(mNativeCompositorView);
+ }
+
+ @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (mNativeCompositorView == 0) return;
nativeSurfaceChanged(mNativeCompositorView, format, width, height, holder.getSurface());
@@ -310,6 +331,16 @@ public class CompositorView extends SurfaceView implements SurfaceHolder.Callbac
mRenderHost.didSwapFrame(pendingFrameCount);
}
+ @CalledByNative
+ private void didSwapBuffers() {
+ List<Runnable> runnables = mDrawingFinishedCallbacks;
+ mDrawingFinishedCallbacks = null;
+ if (runnables == null) return;
+ for (Runnable r : runnables) {
+ r.run();
+ }
+ }
+
/**
* Converts the layout into compositor layers. This is to be called on every frame the layout
* is changing.
« no previous file with comments | « no previous file | chrome/browser/android/compositor/compositor_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698