[go: up one dir, main page]

Further qualify low end graphics optimizations

These can result in visual artifacts, so we should only
apply them where the memory impact is worth the
tradeoff.

(cherry picked from commit 7a847a8327a1e22dc83107dda61a50a3ca729682)

Bug: 974241
Change-Id: I771f0e919956eb3f677623989d7ac23bbb0ecc0e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1659940
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Commit-Queue: Ian Vollick <vollick@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#669338}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1662832
Reviewed-by: Ian Vollick <vollick@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#372}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 33817ba2..a4505619 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -181,6 +181,18 @@
 static const char* kOOPIF = "OOPIF";
 static const char* kRenderer = "Renderer";
 
+#if defined(OS_ANDROID)
+// With 32 bit pixels, this would mean less than 400kb per buffer. Much less
+// than required for, say, nHD.
+static const int kSmallScreenPixelThreshold = 1e5;
+bool IsSmallScreen(const gfx::Size& size) {
+  int area = 0;
+  if (!size.GetCheckedArea().AssignIfValid(&area))
+    return false;
+  return area < kSmallScreenPixelThreshold;
+}
+#endif
+
 class WebWidgetLockTarget : public content::MouseLockDispatcher::LockTarget {
  public:
   explicit WebWidgetLockTarget(blink::WebWidget* webwidget)
@@ -3007,7 +3019,8 @@
 #if defined(OS_ANDROID)
   bool using_synchronous_compositor =
       compositor_deps->UsingSynchronousCompositing();
-  bool using_low_memory_policy = base::SysInfo::IsLowEndDevice();
+  bool using_low_memory_policy =
+      base::SysInfo::IsLowEndDevice() && !IsSmallScreen(screen_size);
 
   settings.use_stream_video_draw_quad = true;
   settings.using_synchronous_renderer_compositor = using_synchronous_compositor;