Add ANGLE renderer switch to Experiments page on Mac
This CL enables Mac users to switch between ANGLE's GL and Metal
backends. It also updates tools/metrics/histograms/enums.xml with
missing enum names.
Bug: chromium:1216126
Change-Id: I68a0357356539139070e4ef76f1740709a4bb0a2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3168329
Reviewed-by: Kenneth Russell <[email protected]>
Commit-Queue: Jonah Ryan-Davis <[email protected]>
Cr-Commit-Position: refs/heads/main@{#923466}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 10612b6..260f3a68 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -349,7 +349,7 @@
"900"}};
#if defined(OS_WIN)
-const FeatureEntry::Choice kUseAngleChoices[] = {
+const FeatureEntry::Choice kUseAngleChoicesWindows[] = {
{flag_descriptions::kUseAngleDefault, "", ""},
{flag_descriptions::kUseAngleGL, switches::kUseANGLE,
gl::kANGLEImplementationOpenGLName},
@@ -359,6 +359,13 @@
gl::kANGLEImplementationD3D9Name},
{flag_descriptions::kUseAngleD3D11on12, switches::kUseANGLE,
gl::kANGLEImplementationD3D11on12Name}};
+#elif defined(OS_MAC)
+const FeatureEntry::Choice kUseAngleChoicesMac[] = {
+ {flag_descriptions::kUseAngleDefault, "", ""},
+ {flag_descriptions::kUseAngleGL, switches::kUseANGLE,
+ gl::kANGLEImplementationOpenGLName},
+ {flag_descriptions::kUseAngleMetal, switches::kUseANGLE,
+ gl::kANGLEImplementationMetalName}};
#endif
#if BUILDFLAG(ENABLE_VR)
@@ -5423,8 +5430,12 @@
#if defined(OS_WIN)
{"use-angle", flag_descriptions::kUseAngleName,
- flag_descriptions::kUseAngleDescription, kOsWin,
- MULTI_VALUE_TYPE(kUseAngleChoices)},
+ flag_descriptions::kUseAngleDescriptionWindows, kOsWin,
+ MULTI_VALUE_TYPE(kUseAngleChoicesWindows)},
+#elif defined(OS_MAC)
+ {"use-angle", flag_descriptions::kUseAngleName,
+ flag_descriptions::kUseAngleDescriptionMac, kOsMac,
+ MULTI_VALUE_TYPE(kUseAngleChoicesMac)},
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index c0450ea9..8f04b83 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3877,16 +3877,13 @@
const char kRunVideoCaptureServiceInBrowserProcessDescription[] =
"Run the video capture service in the browser process.";
-const char kUseAngleName[] = "Choose ANGLE graphics backend";
-const char kUseAngleDescription[] =
+const char kUseAngleDescriptionWindows[] =
"Choose the graphics backend for ANGLE. D3D11 is used on most Windows "
"computers by default. Using the OpenGL driver as the graphics backend may "
"result in higher performance in some graphics-heavy applications, "
"particularly on NVIDIA GPUs. It can increase battery and memory usage of "
"video playback.";
-const char kUseAngleDefault[] = "Default";
-const char kUseAngleGL[] = "OpenGL";
const char kUseAngleD3D11[] = "D3D11";
const char kUseAngleD3D9[] = "D3D9";
const char kUseAngleD3D11on12[] = "D3D11on12";
@@ -3964,8 +3961,27 @@
const char kScreenTimeDescription[] =
"Integrate with the macOS Screen Time system.";
+const char kUseAngleDescriptionMac[] =
+ "Choose the graphics backend for ANGLE. The OpenGL backend is soon to be "
+ "deprecated on Mac, and may contain driver bugs that are not planned to be "
+ "fixed. The Metal backend is still experimental, and may contain bugs that "
+ "are still being worked on. The Metal backend should be more performant, "
+ "but may still be behind the OpenGL backend until fully released.";
+
+const char kUseAngleMetal[] = "Metal";
+
#endif
+// Windows and Mac -------------------------------------------------------------
+
+#if defined(OS_WIN) || defined(OS_MAC)
+
+const char kUseAngleName[] = "Choose ANGLE graphics backend";
+const char kUseAngleDefault[] = "Default";
+const char kUseAngleGL[] = "OpenGL";
+
+#endif // defined(OS_WIN) || defined(OS_MAC)
+
// Chrome OS -------------------------------------------------------------------
#if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index eee8fa2e..b715752 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2206,11 +2206,8 @@
extern const char kRunVideoCaptureServiceInBrowserProcessName[];
extern const char kRunVideoCaptureServiceInBrowserProcessDescription[];
-extern const char kUseAngleName[];
-extern const char kUseAngleDescription[];
+extern const char kUseAngleDescriptionWindows[];
-extern const char kUseAngleDefault[];
-extern const char kUseAngleGL[];
extern const char kUseAngleD3D11[];
extern const char kUseAngleD3D9[];
extern const char kUseAngleD3D11on12[];
@@ -2264,8 +2261,22 @@
extern const char kScreenTimeName[];
extern const char kScreenTimeDescription[];
+extern const char kUseAngleDescriptionMac[];
+extern const char kUseAngleMetal[];
+
#endif // defined(OS_MAC)
+// Windows and Mac ------------------------------------------------------------
+
+#if defined(OS_WIN) || defined(OS_MAC)
+
+extern const char kUseAngleName[];
+
+extern const char kUseAngleDefault[];
+extern const char kUseAngleGL[];
+
+#endif // defined(OS_WIN) || defined(OS_MAC)
+
// Chrome OS ------------------------------------------------------------------
#if BUILDFLAG(IS_CHROMEOS_ASH)