Reparent surface control for Webview overlay
When the root surface control changes, the parent of the Webview surface control must be changed. Bug: 191900007 Test: switch app, or turn on/off screen Change-Id: Ib7b34133776fd5944afc638bfee471afe6a17349
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user