summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Igor Kraskevich <kraskevich@google.com> 2024-03-15 14:40:41 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-03-15 14:40:41 +0000
commitae22150dc97ae78cc9c174328802dec7684c3f0c (patch)
tree8183443f436b866d9e6207d2fef97907282b1a5c
parent4351bbd6f900923a1c56f0b6a01ba54a2177c4a9 (diff)
parent63ebd8334db884c4ad2602a030dc8e80541e1f82 (diff)
Merge "Add ReportRenderingThreads function to WebView function table" into main
-rw-r--r--libs/hwui/WebViewFunctorManager.cpp19
-rw-r--r--libs/hwui/WebViewFunctorManager.h3
-rw-r--r--libs/hwui/private/hwui/WebViewFunctor.h5
-rw-r--r--native/webview/plat_support/draw_fn.h9
-rw-r--r--native/webview/plat_support/draw_functor.cpp21
5 files changed, 48 insertions, 9 deletions
diff --git a/libs/hwui/WebViewFunctorManager.cpp b/libs/hwui/WebViewFunctorManager.cpp
index 6fc251dc815c..5b4ab5f2d3b1 100644
--- a/libs/hwui/WebViewFunctorManager.cpp
+++ b/libs/hwui/WebViewFunctorManager.cpp
@@ -86,6 +86,10 @@ void WebViewFunctor_release(int functor) {
WebViewFunctorManager::instance().releaseFunctor(functor);
}
+void WebViewFunctor_reportRenderingThreads(int functor, const int32_t* thread_ids, size_t size) {
+ WebViewFunctorManager::instance().reportRenderingThreads(functor, thread_ids, size);
+}
+
static std::atomic_int sNextId{1};
WebViewFunctor::WebViewFunctor(void* data, const WebViewFunctorCallbacks& callbacks,
@@ -260,6 +264,10 @@ void WebViewFunctor::reparentSurfaceControl(ASurfaceControl* parent) {
funcs.transactionDeleteFunc(transaction);
}
+void WebViewFunctor::reportRenderingThreads(const int32_t* thread_ids, size_t size) {
+ // TODO(b/329219352): Pass the threads to HWUI and update the ADPF session.
+}
+
WebViewFunctorManager& WebViewFunctorManager::instance() {
static WebViewFunctorManager sInstance;
return sInstance;
@@ -346,6 +354,17 @@ void WebViewFunctorManager::destroyFunctor(int functor) {
}
}
+void WebViewFunctorManager::reportRenderingThreads(int functor, const int32_t* thread_ids,
+ size_t size) {
+ std::lock_guard _lock{mLock};
+ for (auto& iter : mFunctors) {
+ if (iter->id() == functor) {
+ iter->reportRenderingThreads(thread_ids, size);
+ break;
+ }
+ }
+}
+
sp<WebViewFunctor::Handle> WebViewFunctorManager::handleFor(int functor) {
std::lock_guard _lock{mLock};
for (auto& iter : mActiveFunctors) {
diff --git a/libs/hwui/WebViewFunctorManager.h b/libs/hwui/WebViewFunctorManager.h
index 0a02f2d4b720..1bf2c1f9c4ef 100644
--- a/libs/hwui/WebViewFunctorManager.h
+++ b/libs/hwui/WebViewFunctorManager.h
@@ -81,6 +81,8 @@ public:
ASurfaceControl* getSurfaceControl();
void mergeTransaction(ASurfaceTransaction* transaction);
+ void reportRenderingThreads(const int32_t* thread_ids, size_t size);
+
sp<Handle> createHandle() {
LOG_ALWAYS_FATAL_IF(mCreatedHandle);
mCreatedHandle = true;
@@ -110,6 +112,7 @@ public:
void releaseFunctor(int functor);
void onContextDestroyed();
void destroyFunctor(int functor);
+ void reportRenderingThreads(int functor, const int32_t* thread_ids, size_t size);
sp<WebViewFunctor::Handle> handleFor(int functor);
diff --git a/libs/hwui/private/hwui/WebViewFunctor.h b/libs/hwui/private/hwui/WebViewFunctor.h
index 493c943079ab..dbd8a16dfcfc 100644
--- a/libs/hwui/private/hwui/WebViewFunctor.h
+++ b/libs/hwui/private/hwui/WebViewFunctor.h
@@ -106,6 +106,11 @@ ANDROID_API int WebViewFunctor_create(void* data, const WebViewFunctorCallbacks&
// and it should be considered alive & active until that point.
ANDROID_API void WebViewFunctor_release(int functor);
+// Reports the list of threads critical for frame production for the given
+// functor. Must be called on render thread.
+ANDROID_API void WebViewFunctor_reportRenderingThreads(int functor, const int32_t* thread_ids,
+ size_t size);
+
} // namespace android::uirenderer
#endif // FRAMEWORKS_BASE_WEBVIEWFUNCTOR_H
diff --git a/native/webview/plat_support/draw_fn.h b/native/webview/plat_support/draw_fn.h
index 44fe56fcaf4b..b865d0ebeb1f 100644
--- a/native/webview/plat_support/draw_fn.h
+++ b/native/webview/plat_support/draw_fn.h
@@ -23,7 +23,8 @@ extern "C" {
// 1 is Android Q. This matches kAwDrawGLInfoVersion version 3.
// 2 Adds transfer_function_* and color_space_toXYZD50 to AwDrawFn_DrawGLParams.
// 3 Adds SurfaceControl related functions.
-static const int kAwDrawFnVersion = 3;
+// 4 Adds AwDrawFn_ReportRenderingThreads to AwDrawFnFunctionTable.
+static const int kAwDrawFnVersion = 4;
// Returns parent ASurfaceControl for WebView overlays. It will be have same
// geometry as the surface we draw into and positioned below it (underlay).
@@ -268,6 +269,10 @@ typedef int AwDrawFn_CreateFunctor_v3(
// released, and it should be considered alive & active until that point.
typedef void AwDrawFn_ReleaseFunctor(int functor);
+// Report the list of threads critical for frame production for the given
+// functor. Must be called on render thread.
+typedef void AwDrawFn_ReportRenderingThreads(int functor, const int32_t* thread_ids, size_t size);
+
struct AwDrawFnFunctionTable {
int version;
AwDrawFn_QueryRenderMode* query_render_mode;
@@ -276,6 +281,8 @@ struct AwDrawFnFunctionTable {
AwDrawFn_ReleaseFunctor* release_functor;
// Added in version 3.
AwDrawFn_CreateFunctor_v3* create_functor_v3;
+ // Added in version 4.
+ AwDrawFn_ReportRenderingThreads* report_rendering_threads;
};
#ifdef __cplusplus
diff --git a/native/webview/plat_support/draw_functor.cpp b/native/webview/plat_support/draw_functor.cpp
index 1584350bb6f1..5d3e24c382bf 100644
--- a/native/webview/plat_support/draw_functor.cpp
+++ b/native/webview/plat_support/draw_functor.cpp
@@ -290,15 +290,20 @@ AwDrawFnRenderMode QueryRenderMode(void) {
}
}
+void ReportRenderingThreads(int functor, const int32_t* thread_ids, size_t size) {
+ uirenderer::WebViewFunctor_reportRenderingThreads(functor, thread_ids, size);
+}
+
jlong GetDrawFnFunctionTable() {
- static AwDrawFnFunctionTable function_table = {
- .version = kAwDrawFnVersion,
- .query_render_mode = &QueryRenderMode,
- .create_functor = &CreateFunctor,
- .release_functor = &ReleaseFunctor,
- .create_functor_v3 = &CreateFunctor_v3,
- };
- return reinterpret_cast<intptr_t>(&function_table);
+ static AwDrawFnFunctionTable function_table = {
+ .version = kAwDrawFnVersion,
+ .query_render_mode = &QueryRenderMode,
+ .create_functor = &CreateFunctor,
+ .release_functor = &ReleaseFunctor,
+ .create_functor_v3 = &CreateFunctor_v3,
+ .report_rendering_threads = &ReportRenderingThreads,
+ };
+ return reinterpret_cast<intptr_t>(&function_table);
}
const char kClassName[] = "com/android/webview/chromium/DrawFunctor";