Chromium Code Reviews| 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); |
| } |