summaryrefslogtreecommitdiff
path: root/libs/hwui/WebViewFunctorManager.cpp
diff options
context:
space:
mode:
authorHuihong Luo <huisinro@google.com>2021-06-25 21:54:16 -0700
committerHuihong Luo <huisinro@google.com>2021-07-01 11:50:53 -0700
commitec68b7c973924e98592cd80e9be0690103c66831 (patch)
treee469755eddb046aa74c98b467f24f6f486c1e88e /libs/hwui/WebViewFunctorManager.cpp
parentac57d157da34f34b818611603699e6ec60ab3ae4 (diff)
Disable Webview Overlay when invisible
Remove Webview overlays when Webview node is set to invisible Bug: 187292989 Test: play a video in a Webview, toggle visibility for the view, check existence of a surface control named as "Webview Overlay SurfaceControl#0" Change-Id: If47a78a8ae1f7b65b9e7ab983ec72f580d78191a
Diffstat (limited to 'libs/hwui/WebViewFunctorManager.cpp')
-rw-r--r--libs/hwui/WebViewFunctorManager.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/libs/hwui/WebViewFunctorManager.cpp b/libs/hwui/WebViewFunctorManager.cpp
index 93f2f42a00fd..df4101109a18 100644
--- a/libs/hwui/WebViewFunctorManager.cpp
+++ b/libs/hwui/WebViewFunctorManager.cpp
@@ -108,6 +108,13 @@ void WebViewFunctor::sync(const WebViewSyncData& syncData) const {
mCallbacks.onSync(mFunctor, mData, syncData);
}
+void WebViewFunctor::onRemovedFromTree() {
+ ATRACE_NAME("WebViewFunctor::onRemovedFromTree");
+ if (mSurfaceControl) {
+ removeOverlays();
+ }
+}
+
void WebViewFunctor::drawGl(const DrawGlInfo& drawInfo) {
ATRACE_NAME("WebViewFunctor::drawGl");
if (!mHasContext) {
@@ -185,6 +192,7 @@ void WebViewFunctor::removeOverlays() {
ScopedCurrentFunctor currentFunctor(this);
mCallbacks.removeOverlays(mFunctor, mData, currentFunctor.mergeTransaction);
if (mSurfaceControl) {
+ reparentSurfaceControl(nullptr);
auto funcs = renderthread::RenderThread::getInstance().getASurfaceControlFunctions();
funcs.releaseFunc(mSurfaceControl);
mSurfaceControl = nullptr;
@@ -217,9 +225,12 @@ ASurfaceControl* WebViewFunctor::getSurfaceControl() {
void WebViewFunctor::mergeTransaction(ASurfaceTransaction* transaction) {
ATRACE_NAME("WebViewFunctor::mergeTransaction");
if (transaction == nullptr) return;
+ bool done = false;
renderthread::CanvasContext* activeContext = renderthread::CanvasContext::getActiveContext();
- LOG_ALWAYS_FATAL_IF(activeContext == nullptr, "Null active canvas context!");
- bool done = activeContext->mergeTransaction(transaction, mSurfaceControl);
+ // activeContext might be null when called from mCallbacks.removeOverlays()
+ if (activeContext != nullptr) {
+ done = activeContext->mergeTransaction(transaction, mSurfaceControl);
+ }
if (!done) {
auto funcs = renderthread::RenderThread::getInstance().getASurfaceControlFunctions();
funcs.transactionApplyFunc(transaction);