Add ThreadWrapperUsesMetronome to ProductionSupportedFlagList.java.

As is required in order to ramp up the ThreadWrapperUsesMetronome
experiment on Android WebView (and other platforms). Following
https://chromium.googlesource.com/chromium/src/+/main/android_webview/docs/developer-ui.md#Adding-your-flags-and-features-to-the-UI

Bug: chromium:1253787
Change-Id: I23fcca7bbacbc5196c9221593cda5780c8fa6e12
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3497391
Reviewed-by: Nate Fischer <ntfschr@chromium.org>
Commit-Queue: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/main@{#978196}
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index aff1d48..00f22234 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -789,6 +789,7 @@
     "//components/network_session_configurator/android:network_session_configurator_java",
     "//components/power_scheduler:power_scheduler_java",
     "//components/viz:viz_java",
+    "//components/webrtc:components_webrtc_java",
     "//content/public/android:content_java",
     "//content/public/common:common_java",
     "//gpu/config:config_java",
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index 2f1e6df..d3d2b00c 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -13,6 +13,7 @@
 import org.chromium.components.network_session_configurator.NetworkSessionSwitches;
 import org.chromium.components.power_scheduler.PowerSchedulerFeatures;
 import org.chromium.components.viz.common.VizFeatures;
+import org.chromium.components.webrtc.ComponentsWebRtcFeatures;
 import org.chromium.content_public.common.ContentFeatures;
 import org.chromium.content_public.common.ContentSwitches;
 import org.chromium.gpu.config.GpuFeatures;
@@ -279,5 +280,7 @@
                     AwFeatures.WEBVIEW_SYNTHESIZE_PAGE_LOAD_ONLY_ON_INITIAL_MAIN_DOCUMENT_ACCESS,
                     "Only synthesize page load for URL spoof prevention at most once,"
                             + " on initial main document access."),
+            Flag.baseFeature(ComponentsWebRtcFeatures.THREAD_WRAPPER_USES_METRONOME,
+                    "Makes ThreadWrapper coalesce delayed tasks on metronome ticks."),
     };
 }
diff --git a/components/webrtc/BUILD.gn b/components/webrtc/BUILD.gn
index 44981f1..b9e6f308 100644
--- a/components/webrtc/BUILD.gn
+++ b/components/webrtc/BUILD.gn
@@ -2,6 +2,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+if (is_android) {
+  import("//build/config/android/rules.gni")
+}
+
 if (!is_ios) {
   source_set("media_stream_device_enumerator") {
     sources = [
@@ -95,3 +99,16 @@
     "//third_party/webrtc_overrides:metronome_like_task_queue_test",
   ]
 }
+
+if (is_android) {
+  java_cpp_features("java_features_srcjar") {
+    # External code should depend on ":components_webrtc_java" instead.
+    visibility = [ ":*" ]
+    sources = [ "//components/webrtc/thread_wrapper.cc" ]
+    template =
+        "//components/webrtc/java_templates/ComponentsWebRtcFeatures.java.tmpl"
+  }
+  android_library("components_webrtc_java") {
+    srcjar_deps = [ ":java_features_srcjar" ]
+  }
+}
diff --git a/components/webrtc/java_templates/ComponentsWebRtcFeatures.java.tmpl b/components/webrtc/java_templates/ComponentsWebRtcFeatures.java.tmpl
new file mode 100644
index 0000000..0586785
--- /dev/null
+++ b/components/webrtc/java_templates/ComponentsWebRtcFeatures.java.tmpl
@@ -0,0 +1,16 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.webrtc;
+
+/**
+ * Contains features that are specific to components/webrtc/.
+ */
+public final class ComponentsWebRtcFeatures {{
+
+{NATIVE_FEATURES}
+
+    // Prevents instantiation.
+    private ComponentsWebRtcFeatures() {{}}
+}}
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 870d81c1..60677c2 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -51495,6 +51495,7 @@
   <int value="-2088555929" label="EnableAppGridGhost:enabled"/>
   <int value="-2088472280" label="KeyboardShortcutViewerApp:disabled"/>
   <int value="-2088263177" label="EnableMixedContentDownloadDialog:enabled"/>
+  <int value="-2087444854" label="ThreadWrapperUsesMetronome:disabled"/>
   <int value="-2084849051" label="TabGroupsCollapseFreezing:disabled"/>
   <int value="-2083998415" label="VrLaunchIntent:enabled"/>
   <int value="-2083195884" label="enable-firewall-hole-punching"/>
@@ -55717,6 +55718,7 @@
   <int value="834033186" label="enable-data-reduction-proxy-dev"/>
   <int value="834326277" label="enable-answers-in-suggest"/>
   <int value="835018878" label="disable-quic"/>
+  <int value="835399079" label="ThreadWrapperUsesMetronome:enabled"/>
   <int value="835726069" label="NtpWebUI:disabled"/>
   <int value="836406476" label="EnableTouchableAppContextMenu:enabled"/>
   <int value="837350465" label="SystemProxyForSystemServices:enabled"/>