diff --git a/libs/hwui/WebViewFunctorManager.cpp b/libs/hwui/WebViewFunctorManager.cpp
index 6fc251dc815ce62c3472356b646b44caa2c08b82..5b4ab5f2d3b1bcd4c826629c160de9ffcaebc0a9 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 0a02f2d4b72051d29469e33aaacc45543510fa6f..1bf2c1f9c4ef95a6d2a11189db73c605cf52263c 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 493c943079ab68ad82288024ae152f0a10dac5ba..dbd8a16dfcfca6b3ba098ea4c5fbf0f238a236ba 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 44fe56fcaf4bc4b703ea5e652a69473501b7df45..b865d0ebeb1f92b03b28bd09aaaa754f9d123e03 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 1584350bb6f1229af690e80d87d605e6096ec20d..5d3e24c382bf7de83b02a2bff46100c004e0c35b 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";