diff options
author | Huihong Luo <huisinro@google.com> | 2021-02-24 18:48:12 -0800 |
---|---|---|
committer | Huihong Luo <huisinro@google.com> | 2021-04-17 13:24:48 -0700 |
commit | 054b8d3000c7958672b57d25b17b65b1e7fb4e10 (patch) | |
tree | 05cff174707597007790c3b1f45c8e6333ab2a66 /libs/hwui/renderthread/RenderThread.cpp | |
parent | c6df2ba06a2fe3e6ed5a79eeb7bc29b234ac1350 (diff) |
Webview overlay support
The basic idea is to create a child surface control from the root surface control passed from ViewRootImpl to the render thread.
Transactions are sent back to the java layer to get merged.
In case of offscreen layers, SurfaceControl must be disabled.
This new feature is disabled for Vulkan at the moment, a new CL will be used to enable the support.
Bug: 173671170
Test: manual, webview apks
Change-Id: I119405d13eca3c59fd3ec78e50dc7739f78411d4
Diffstat (limited to 'libs/hwui/renderthread/RenderThread.cpp')
-rw-r--r-- | libs/hwui/renderthread/RenderThread.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 682baa60a207..04aa1cb91492 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -54,6 +54,10 @@ static JVMAttachHook gOnStartHook = nullptr; ASurfaceControlFunctions::ASurfaceControlFunctions() { void* handle_ = dlopen("libandroid.so", RTLD_NOW | RTLD_NODELETE); + createFunc = (ASC_create)dlsym(handle_, "ASurfaceControl_create"); + LOG_ALWAYS_FATAL_IF(createFunc == nullptr, + "Failed to find required symbol ASurfaceControl_create!"); + acquireFunc = (ASC_acquire) dlsym(handle_, "ASurfaceControl_acquire"); LOG_ALWAYS_FATAL_IF(acquireFunc == nullptr, "Failed to find required symbol ASurfaceControl_acquire!"); @@ -81,6 +85,23 @@ ASurfaceControlFunctions::ASurfaceControlFunctions() { "ASurfaceControlStats_getFrameNumber"); LOG_ALWAYS_FATAL_IF(getFrameNumberFunc == nullptr, "Failed to find required symbol ASurfaceControlStats_getFrameNumber!"); + + transactionCreateFunc = (AST_create)dlsym(handle_, "ASurfaceTransaction_create"); + LOG_ALWAYS_FATAL_IF(transactionCreateFunc == nullptr, + "Failed to find required symbol ASurfaceTransaction_create!"); + + transactionDeleteFunc = (AST_delete)dlsym(handle_, "ASurfaceTransaction_delete"); + LOG_ALWAYS_FATAL_IF(transactionDeleteFunc == nullptr, + "Failed to find required symbol ASurfaceTransaction_delete!"); + + transactionApplyFunc = (AST_apply)dlsym(handle_, "ASurfaceTransaction_apply"); + LOG_ALWAYS_FATAL_IF(transactionApplyFunc == nullptr, + "Failed to find required symbol ASurfaceTransaction_apply!"); + + transactionSetVisibilityFunc = + (AST_setVisibility)dlsym(handle_, "ASurfaceTransaction_setVisibility"); + LOG_ALWAYS_FATAL_IF(transactionSetVisibilityFunc == nullptr, + "Failed to find required symbol ASurfaceTransaction_setVisibility!"); } void RenderThread::frameCallback(int64_t frameTimeNanos, void* data) { |