Merge "Fix leakage of ASurfaceTransactionCallback" into sc-dev

This commit is contained in:
Huihong Luo
2021-05-14 03:33:53 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 0 deletions

View File

@@ -1356,6 +1356,11 @@ public final class ViewRootImpl implements ViewParent,
} }
} }
/**
* Register a callback to be executed when Webview overlay needs to merge a transaction.
* This callback will be executed on RenderThread worker thread, and released inside native code
* when CanvasContext is destroyed.
*/
private void addASurfaceTransactionCallback() { private void addASurfaceTransactionCallback() {
HardwareRenderer.ASurfaceTransactionCallback callback = (nativeTransactionObj, HardwareRenderer.ASurfaceTransactionCallback callback = (nativeTransactionObj,
nativeSurfaceControlObj, nativeSurfaceControlObj,
@@ -7710,6 +7715,7 @@ public final class ViewRootImpl implements ViewParent,
} }
} }
if (mAttachInfo.mThreadedRenderer != null) { if (mAttachInfo.mThreadedRenderer != null) {
addASurfaceTransactionCallback();
mAttachInfo.mThreadedRenderer.setSurfaceControl(mSurfaceControl); mAttachInfo.mThreadedRenderer.setSurfaceControl(mSurfaceControl);
} }
} else { } else {

View File

@@ -195,6 +195,10 @@ void CanvasContext::setSurfaceControl(ASurfaceControl* surfaceControl) {
auto funcs = mRenderThread.getASurfaceControlFunctions(); auto funcs = mRenderThread.getASurfaceControlFunctions();
if (surfaceControl == nullptr) {
setASurfaceTransactionCallback(nullptr);
}
if (mSurfaceControl != nullptr) { if (mSurfaceControl != nullptr) {
funcs.unregisterListenerFunc(this, &onSurfaceStatsAvailable); funcs.unregisterListenerFunc(this, &onSurfaceStatsAvailable);
funcs.releaseFunc(mSurfaceControl); funcs.releaseFunc(mSurfaceControl);