Disable Android specific threading settings in libvpx VP8 encoder

It used up to 3 threads for QVGA on Android before. This change disables Android-specific code path in NumberOfThreads() and uses the generic settings, which configure 1 thread for resolutions <=VGA, instead. The change is guarded by a killswitch.

For reference, frame encode time for VGA 512kbps using 1 thread on Pixel 2 (7 years old device; SD835) is ~5.5ms: https://chromeperf.appspot.com/report?sid=6e80c701ef6ff0d008a299fb122a16f0d2600ddfcd9981d3d75cd722c92b2869

Bug: webrtc:15828, b/316494683
Change-Id: I0e9571ede64c6cb77d529d21ccb0310ccb8bfdaf
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/337601
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41770}
diff --git a/experiments/field_trials.py b/experiments/field_trials.py
index 0273f89..57e03dd 100755
--- a/experiments/field_trials.py
+++ b/experiments/field_trials.py
@@ -98,6 +98,9 @@
     FieldTrial('WebRTC-LibvpxVp9Encoder-SvcFrameDropConfig',
                'webrtc:15827',
                date(2024, 9, 1)),
+    FieldTrial('WebRTC-LibvpxVp8Encoder-AndroidSpecificThreadingSettings',
+               'webrtc:15828',
+               date(2024, 9, 1)),
     FieldTrial('WebRTC-Pacer-FastRetransmissions',
                'chromium:1354491',
                date(2024, 4, 1)),
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
index 52ef623..a9e3661 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
@@ -317,7 +317,9 @@
       variable_framerate_experiment_(ParseVariableFramerateConfig(
           "WebRTC-VP8VariableFramerateScreenshare")),
       framerate_controller_(variable_framerate_experiment_.framerate_limit),
-      max_frame_drop_interval_(ParseFrameDropInterval()) {
+      max_frame_drop_interval_(ParseFrameDropInterval()),
+      android_specific_threading_settings_(webrtc::field_trial::IsEnabled(
+          "WebRTC-LibvpxVp8Encoder-AndroidSpecificThreadingSettings")) {
   // TODO(eladalon/ilnik): These reservations might be wasting memory.
   // InitEncode() is resizing to the actual size, which might be smaller.
   raw_images_.reserve(kMaxSimulcastStreams);
@@ -783,20 +785,21 @@
 
 int LibvpxVp8Encoder::NumberOfThreads(int width, int height, int cpus) {
 #if defined(WEBRTC_ANDROID)
-  if (width * height >= 320 * 180) {
-    if (cpus >= 4) {
-      // 3 threads for CPUs with 4 and more cores since most of times only 4
-      // cores will be active.
-      return 3;
-    } else if (cpus == 3 || cpus == 2) {
-      return 2;
-    } else {
-      return 1;
+  if (android_specific_threading_settings_) {
+    if (width * height >= 320 * 180) {
+      if (cpus >= 4) {
+        // 3 threads for CPUs with 4 and more cores since most of times only 4
+        // cores will be active.
+        return 3;
+      } else if (cpus == 3 || cpus == 2) {
+        return 2;
+      } else {
+        return 1;
+      }
     }
+    return 1;
   }
-  return 1;
-#else
-#if defined(WEBRTC_IOS)
+#elif defined(WEBRTC_IOS)
   std::string trial_string =
       field_trial::FindFullName(kVP8IosMaxNumberOfThreadFieldTrial);
   FieldTrialParameter<int> max_thread_number(
@@ -823,11 +826,10 @@
       return 3;
     }
     return 2;
-  } else {
-    // 1 thread for VGA or less.
-    return 1;
   }
-#endif
+
+  // 1 thread for VGA or less.
+  return 1;
 }
 
 int LibvpxVp8Encoder::InitAndSetControlSettings() {
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
index dad174c..5850aa4 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
@@ -157,6 +157,8 @@
   const LibvpxVp8EncoderInfoSettings encoder_info_override_;
 
   absl::optional<TimeDelta> max_frame_drop_interval_;
+
+  bool android_specific_threading_settings_;
 };
 
 }  // namespace webrtc