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

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwGLFunctor.java

Issue 1943963003: WIP Handle AwContents needing multiple live functors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Destroy HardwareRenderer when detached and not awaiting a callback. Created 4 years, 7 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: android_webview/java/src/org/chromium/android_webview/AwGLFunctor.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwGLFunctor.java b/android_webview/java/src/org/chromium/android_webview/AwGLFunctor.java
index e50928373f088b7d58d5a5dc7742e14e0876a7bd..b9421ebae27345c0690b35ce41d15e4282b54984 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwGLFunctor.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwGLFunctor.java
@@ -7,6 +7,7 @@ package org.chromium.android_webview;
import android.graphics.Canvas;
import android.view.ViewGroup;
+import org.chromium.base.ThreadUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
@@ -44,6 +45,7 @@ public class AwGLFunctor {
private final AwContents.NativeDrawGLFunctor mNativeDrawGLFunctor;
private final ViewGroup mContainerView;
private final Runnable mFunctorReleasedCallback;
+ private int mPinCount;
boliu 2016/05/17 15:00:10 maybe just call this refcount, and make the method
Tobias Sargeant 2016/05/17 15:07:36 I felt like this was overloading the phrase refcou
Tobias Sargeant 2016/05/17 16:55:26 Done.
public AwGLFunctor(AwContents.NativeDrawGLFunctorFactory nativeDrawGLFunctorFactory,
ViewGroup containerView) {
@@ -57,8 +59,7 @@ public class AwGLFunctor {
mFunctorReleasedCallback = new Runnable() {
@Override
public void run() {
- // Deliberate no-op. This Runnable is holding a strong reference back to the
- // AwGLFunctor, which serves its purpose for now.
+ unpinHardwareRenderer();
}
};
} else {
@@ -66,6 +67,21 @@ public class AwGLFunctor {
}
}
+ public synchronized void pinHardwareRenderer() {
+ ++mPinCount;
+ }
+
+ public synchronized void unpinHardwareRenderer() {
+ if (--mPinCount == 0) {
+ ThreadUtils.runOnUiThread(new Runnable() {
boliu 2016/05/17 15:00:10 why post this?
Tobias Sargeant 2016/05/17 15:07:36 The callback runs on the render thread, but we can
boliu 2016/05/17 15:09:43 wait...... really?? that wasn't explicitly stated.
Tobias Sargeant 2016/05/17 16:55:26 Checked, and the callback is run on the thread it
+ @Override
+ public void run() {
+ deleteHardwareRenderer();
+ }
+ });
+ }
+ }
+
public static long getAwDrawGLFunction() {
return nativeGetAwDrawGLFunction();
}
@@ -74,11 +90,10 @@ public class AwGLFunctor {
return mNativeAwGLFunctor;
}
- public Object getNativeLifetimeObject() {
- return mLifetimeObject;
- }
-
- public boolean requestDrawGLForCanvas(Canvas canvas) {
+ public boolean requestDrawGL(Canvas canvas) {
+ if (mFunctorReleasedCallback != null) {
+ pinHardwareRenderer();
boliu 2016/05/17 15:00:11 pin only if requestDrawGL returns true, or if you
Tobias Sargeant 2016/05/17 16:55:25 Done.
+ }
return mNativeDrawGLFunctor.requestDrawGL(canvas, mFunctorReleasedCallback);
}

Powered by Google App Engine
This is Rietveld 408576698