Add de-jelly flags / settings and begin using them

Adds two command line flags to control the experimental de-jelly effect.
Also adds helper functions for accessing flags and other de-jelly
properties.

Finally updates two places in CC where we need to expand our clip when
de-jelly is enabled.

Bug: 995965
Change-Id: I9fc91b4aa767c0a723f8b8e677242e708c70bf8f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1810317
Commit-Queue: Eric Karl <[email protected]>
Reviewed-by: Jonathan Ross <[email protected]>
Cr-Commit-Position: refs/heads/master@{#698081}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 20a7f24..a0740f4 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -33,6 +33,7 @@
 #include "cc/trees/layer_tree_frame_sink.h"
 #include "cc/trees/layer_tree_host.h"
 #include "cc/trees/ukm_manager.h"
+#include "components/viz/common/display/de_jelly.h"
 #include "components/viz/common/features.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
 #include "components/viz/common/frame_sinks/copy_output_request.h"
@@ -3208,6 +3209,15 @@
 
   settings.send_compositor_frame_ack = false;
 
+  // Renderer can de-jelly, browser UI can not. We do not know whether we are
+  // going to apply de-jelly until we draw a frame in the Viz process. Because
+  // of this, all changes in the renderer are based on whether de-jelly may be
+  // active (viz::DeJellyEnabled) vs whether it is currently active
+  // (viz::DeJellyActive).
+  settings.allow_de_jelly_effect = viz::DeJellyEnabled();
+  // Disable occlusion if de-jelly effect is enabled.
+  settings.enable_occlusion &= !settings.allow_de_jelly_effect;
+
   return settings;
 }