gpu: Add finch param to blacklist SurfaceControl on specific builds.

[email protected]

Bug: 948946
Change-Id: I7ca2f7cbc7e9772a36e699908684b8356daee6dd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1548444
Commit-Queue: Khushal <[email protected]>
Auto-Submit: Khushal <[email protected]>
Reviewed-by: Eric Karl <[email protected]>
Cr-Commit-Position: refs/heads/master@{#647942}
diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
index e597994..5ca2706 100644
--- a/gpu/config/gpu_finch_features.cc
+++ b/gpu/config/gpu_finch_features.cc
@@ -4,10 +4,30 @@
 #include "gpu/config/gpu_finch_features.h"
 
 #if defined(OS_ANDROID)
+#include "base/android/build_info.h"
+#include "base/metrics/field_trial_params.h"
+#include "base/strings/string_split.h"
 #include "ui/gl/android/android_surface_control_compat.h"
 #endif
 
 namespace features {
+namespace {
+
+#if defined(OS_ANDROID)
+bool FieldIsInBlacklist(const char* current_value, std::string blacklist_str) {
+  std::vector<std::string> blacklist = base::SplitString(
+      blacklist_str, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+  for (const std::string& value : blacklist) {
+    if (value == current_value)
+      return true;
+  }
+
+  return false;
+}
+#endif
+
+}  // namespace
+
 #if defined(OS_ANDROID)
 // Use android AImageReader when playing videos with MediaPlayer.
 const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
@@ -80,8 +100,26 @@
 
 #if defined(OS_ANDROID)
 bool IsAndroidSurfaceControlEnabled() {
-  return base::FeatureList::IsEnabled(kAndroidSurfaceControl) &&
-         gl::SurfaceControl::IsSupported();
+  if (!gl::SurfaceControl::IsSupported())
+    return false;
+
+  if (!base::FeatureList::IsEnabled(kAndroidSurfaceControl))
+    return false;
+
+  if (FieldIsInBlacklist(base::android::BuildInfo::GetInstance()->model(),
+                         base::GetFieldTrialParamValueByFeature(
+                             kAndroidSurfaceControl, "blacklisted_models"))) {
+    return false;
+  }
+
+  if (FieldIsInBlacklist(
+          base::android::BuildInfo::GetInstance()->android_build_id(),
+          base::GetFieldTrialParamValueByFeature(kAndroidSurfaceControl,
+                                                 "blacklisted_build_ids"))) {
+    return false;
+  }
+
+  return true;
 }
 #endif