MacViews: Enable GPU rasterization (where available)

This should relieve pressure on the browser's UI thread.

Disallow anonymous GLImages when GpuMemoryBuffers are disabled
(several tests would attempt to use this path while it was
disabled, and crash).

Add a NOTREACHED to cc::TestImageFactory, so that such failures
are easier to diagnose in the future.

Bug: 845213
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Ibaf017e9ee3c22b3391fe2d2b47b82c8fbff8e93
Reviewed-on: https://chromium-review.googlesource.com/1076531
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: enne <enne@chromium.org>
Commit-Queue: ccameron <ccameron@chromium.org>
Cr-Commit-Position: refs/heads/master@{#562696}
diff --git a/cc/test/test_image_factory.cc b/cc/test/test_image_factory.cc
index 7cbfd4f..6ac3058 100644
--- a/cc/test/test_image_factory.cc
+++ b/cc/test/test_image_factory.cc
@@ -33,4 +33,14 @@
   return image;
 }
 
+scoped_refptr<gl::GLImage> TestImageFactory::CreateAnonymousImage(
+    const gfx::Size& size,
+    gfx::BufferFormat format,
+    gfx::BufferUsage usage,
+    unsigned internalformat,
+    bool* is_cleared) {
+  NOTREACHED();
+  return nullptr;
+}
+
 }  // namespace cc
diff --git a/cc/test/test_image_factory.h b/cc/test/test_image_factory.h
index d896d3a..e6e0117 100644
--- a/cc/test/test_image_factory.h
+++ b/cc/test/test_image_factory.h
@@ -23,6 +23,11 @@
       unsigned internalformat,
       int client_id,
       gpu::SurfaceHandle surface_handle) override;
+  scoped_refptr<gl::GLImage> CreateAnonymousImage(const gfx::Size& size,
+                                                  gfx::BufferFormat format,
+                                                  gfx::BufferUsage usage,
+                                                  unsigned internalformat,
+                                                  bool* is_cleared) override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TestImageFactory);
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 2e227e4..8f805d5 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -456,14 +456,15 @@
   // so the extension string is always exposed.
   AddExtensionString("GL_OES_vertex_array_object");
 
+  if (!disallowed_features_.gpu_memory_manager) {
 // Texture storage image is only usable with native gpu memory buffer support.
 #if defined(OS_MACOSX) || (defined(OS_LINUX) && defined(USE_OZONE))
-  feature_flags_.chromium_texture_storage_image = true;
-  AddExtensionString("GL_CHROMIUM_texture_storage_image");
+    feature_flags_.chromium_texture_storage_image = true;
+    AddExtensionString("GL_CHROMIUM_texture_storage_image");
 #endif
 
-  if (!disallowed_features_.gpu_memory_manager)
     AddExtensionString("GL_CHROMIUM_gpu_memory_manager");
+  }
 
   if (gl::HasExtension(extensions, "GL_ANGLE_translated_shader_source")) {
     feature_flags_.angle_translated_shader_source = true;
diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc
index a7e13cd9..3efc487 100644
--- a/ui/base/ui_base_features.cc
+++ b/ui/base/ui_base_features.cc
@@ -63,7 +63,12 @@
 
 // Enables GPU rasterization for all UI drawing (where not blacklisted).
 const base::Feature kUiGpuRasterization = {"UiGpuRasterization",
-                                           base::FEATURE_DISABLED_BY_DEFAULT};
+#if defined(OS_MACOSX)
+                                           base::FEATURE_ENABLED_BY_DEFAULT
+#else
+                                           base::FEATURE_DISABLED_BY_DEFAULT
+#endif
+};
 
 bool IsUiGpuRasterizationEnabled() {
   return base::FeatureList::IsEnabled(kUiGpuRasterization);