summaryrefslogtreecommitdiff
path: root/libs/hwui/WebViewFunctorManager.cpp
diff options
context:
space:
mode:
authorHuihong Luo <huisinro@google.com>2021-06-29 22:38:17 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-06-29 22:38:17 +0000
commit4d7a36be41aadde7b0921c20962897aa97cf110d (patch)
tree0a368706772778d5a3ec91b68cc44a56576e492e /libs/hwui/WebViewFunctorManager.cpp
parent56dc119776c16c7e6bf817f400f3fa43b691c9e1 (diff)
parent540fdf89b1432f99e3c01d6ec838d434609eefb7 (diff)
Merge "Reparent surface control for Webview overlay" into sc-dev
Diffstat (limited to 'libs/hwui/WebViewFunctorManager.cpp')
-rw-r--r--libs/hwui/WebViewFunctorManager.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/libs/hwui/WebViewFunctorManager.cpp b/libs/hwui/WebViewFunctorManager.cpp
index 92e20c477669..974c8635b3df 100644
--- a/libs/hwui/WebViewFunctorManager.cpp
+++ b/libs/hwui/WebViewFunctorManager.cpp
@@ -126,7 +126,14 @@ void WebViewFunctor::drawGl(const DrawGlInfo& drawInfo) {
renderthread::CanvasContext::getActiveContext();
if (activeContext != nullptr) {
ASurfaceControl* rootSurfaceControl = activeContext->getSurfaceControl();
- if (rootSurfaceControl) overlayParams.overlaysMode = OverlaysMode::Enabled;
+ if (rootSurfaceControl) {
+ overlayParams.overlaysMode = OverlaysMode::Enabled;
+ int32_t rgid = activeContext->getSurfaceControlGenerationId();
+ if (mParentSurfaceControlGenerationId != rgid) {
+ reparentSurfaceControl(rootSurfaceControl);
+ mParentSurfaceControlGenerationId = rgid;
+ }
+ }
}
}
@@ -195,6 +202,7 @@ ASurfaceControl* WebViewFunctor::getSurfaceControl() {
LOG_ALWAYS_FATAL_IF(rootSurfaceControl == nullptr, "Null root surface control!");
auto funcs = renderthread::RenderThread::getInstance().getASurfaceControlFunctions();
+ mParentSurfaceControlGenerationId = activeContext->getSurfaceControlGenerationId();
mSurfaceControl = funcs.createFunc(rootSurfaceControl, "Webview Overlay SurfaceControl");
ASurfaceTransaction* transaction = funcs.transactionCreateFunc();
activeContext->prepareSurfaceControlForWebview();
@@ -218,6 +226,17 @@ void WebViewFunctor::mergeTransaction(ASurfaceTransaction* transaction) {
}
}
+void WebViewFunctor::reparentSurfaceControl(ASurfaceControl* parent) {
+ ATRACE_NAME("WebViewFunctor::reparentSurfaceControl");
+ if (mSurfaceControl == nullptr) return;
+
+ auto funcs = renderthread::RenderThread::getInstance().getASurfaceControlFunctions();
+ ASurfaceTransaction* transaction = funcs.transactionCreateFunc();
+ funcs.transactionReparentFunc(transaction, mSurfaceControl, parent);
+ mergeTransaction(transaction);
+ funcs.transactionDeleteFunc(transaction);
+}
+
WebViewFunctorManager& WebViewFunctorManager::instance() {
static WebViewFunctorManager sInstance;
return sInstance;