Revved to chromium c06ba3f6d7a67bc04ae2f6c041c22a86bdcf372a refs/remotes/origin/HEAD
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 5009d58..c43eb3a 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -208,6 +208,13 @@
     "layers/ui_resource_layer.h",
     "layers/ui_resource_layer_impl.cc",
     "layers/ui_resource_layer_impl.h",
+    "layers/video_frame_provider.h",
+    "layers/video_frame_provider_client_impl.cc",
+    "layers/video_frame_provider_client_impl.h",
+    "layers/video_layer.cc",
+    "layers/video_layer.h",
+    "layers/video_layer_impl.cc",
+    "layers/video_layer_impl.h",
     "output/begin_frame_args.cc",
     "output/begin_frame_args.h",
     "output/bsp_tree.cc",
@@ -420,6 +427,8 @@
     "resources/ui_resource_client.h",
     "resources/ui_resource_request.cc",
     "resources/ui_resource_request.h",
+    "resources/video_resource_updater.cc",
+    "resources/video_resource_updater.h",
     "resources/zero_copy_raster_worker_pool.cc",
     "resources/zero_copy_raster_worker_pool.h",
     "scheduler/begin_frame_source.cc",
@@ -480,6 +489,7 @@
     "//base/third_party/dynamic_annotations",
     "//gpu",
     "//gpu/command_buffer/client:gles2_interface",
+    "//media",
     "//ui/events:events_base",
     "//ui/gfx",
     "//ui/gfx/geometry",
@@ -548,6 +558,8 @@
     "test/fake_tile_manager_client.h",
     "test/fake_ui_resource_layer_tree_host_impl.cc",
     "test/fake_ui_resource_layer_tree_host_impl.h",
+    "test/fake_video_frame_provider.cc",
+    "test/fake_video_frame_provider.h",
     "test/geometry_test_utils.cc",
     "test/geometry_test_utils.h",
     "test/test_in_process_context_provider.cc",
@@ -692,6 +704,7 @@
     "layers/tiled_layer_unittest.cc",
     "layers/ui_resource_layer_impl_unittest.cc",
     "layers/ui_resource_layer_unittest.cc",
+    "layers/video_layer_impl_unittest.cc",
     "output/begin_frame_args_unittest.cc",
     "output/delegating_renderer_unittest.cc",
     "output/filter_operations_unittest.cc",
@@ -722,6 +735,7 @@
     "resources/texture_uploader_unittest.cc",
     "resources/tile_manager_unittest.cc",
     "resources/tile_priority_unittest.cc",
+    "resources/video_resource_updater_unittest.cc",
     "scheduler/begin_frame_source_unittest.cc",
     "scheduler/delay_based_time_source_unittest.cc",
     "scheduler/scheduler_state_machine_unittest.cc",
@@ -749,8 +763,10 @@
     "trees/layer_tree_host_unittest_picture.cc",
     "trees/layer_tree_host_unittest_proxy.cc",
     "trees/layer_tree_host_unittest_scroll.cc",
+    "trees/layer_tree_host_unittest_video.cc",
     "trees/layer_tree_impl_unittest.cc",
     "trees/occlusion_tracker_unittest.cc",
+    "trees/occlusion_unittest.cc",
     "trees/tree_synchronizer_unittest.cc",
 
     # Surfaces test files.
@@ -774,6 +790,7 @@
     "//gpu:test_support",
     "//gpu/command_buffer/client:gles2_interface",
     "//gpu/command_buffer/common:gles2_utils",
+    "//media",
     "//testing/gmock",
     "//testing/gtest",
     "//ui/events:events_base",
@@ -805,6 +822,7 @@
     "//gpu",
     "//gpu:test_support",
     "//gpu/command_buffer/common:gles2_utils",
+    "//media",
     "//skia",
     "//testing/gmock",
     "//testing/gtest",
diff --git a/cc/PRESUBMIT.py b/cc/PRESUBMIT.py
index f381684..d749aac 100644
--- a/cc/PRESUBMIT.py
+++ b/cc/PRESUBMIT.py
@@ -313,6 +313,42 @@
   else:
     return []
 
+def CheckOverrideFinal(input_api, output_api,
+                       whitelist=CC_SOURCE_FILES, blacklist=None):
+  """Make sure new lines of code don't use the OVERRIDE or FINAL macros."""
+
+  # TODO(mostynb): remove this check once the macros are removed
+  # from base/compiler_specific.h.
+
+  errors = []
+
+  source_file_filter = lambda x: input_api.FilterSourceFile(
+    x, white_list=CC_SOURCE_FILES, black_list=None)
+
+  override_files = []
+  final_files = []
+
+  for f in input_api.AffectedSourceFiles(source_file_filter):
+    contents = input_api.ReadFile(f, 'rb')
+
+    # "override" and "final" should be used instead of OVERRIDE/FINAL now.
+    if re.search(r"\bOVERRIDE\b", contents):
+      override_files.append(f.LocalPath())
+
+    if re.search(r"\bFINAL\b", contents):
+      final_files.append(f.LocalPath())
+
+  if override_files:
+    return [output_api.PresubmitError(
+      'These files use OVERRIDE instead of using override:',
+      items=override_files)]
+  if final_files:
+    return [output_api.PresubmitError(
+      'These files use FINAL instead of using final:',
+      items=final_files)]
+
+  return []
+
 def CheckChangeOnUpload(input_api, output_api):
   results = []
   results += CheckAsserts(input_api, output_api)
@@ -324,6 +360,7 @@
   results += CheckNamespace(input_api, output_api)
   results += CheckForUseOfWrongClock(input_api, output_api)
   results += FindUselessIfdefs(input_api, output_api)
+  results += CheckOverrideFinal(input_api, output_api)
   results += input_api.canned_checks.CheckPatchFormatted(input_api, output_api)
   return results
 
diff --git a/cc/animation/animation_curve.h b/cc/animation/animation_curve.h
index 72aadef..ca53e44 100644
--- a/cc/animation/animation_curve.h
+++ b/cc/animation/animation_curve.h
@@ -50,7 +50,7 @@
   virtual SkColor GetValue(double t) const = 0;
 
   // Partial Animation implementation.
-  virtual CurveType Type() const OVERRIDE;
+  virtual CurveType Type() const override;
 };
 
 class CC_EXPORT FloatAnimationCurve : public AnimationCurve {
@@ -60,7 +60,7 @@
   virtual float GetValue(double t) const = 0;
 
   // Partial Animation implementation.
-  virtual CurveType Type() const OVERRIDE;
+  virtual CurveType Type() const override;
 };
 
 class CC_EXPORT TransformAnimationCurve : public AnimationCurve {
@@ -86,7 +86,7 @@
   virtual bool MaximumScale(float* max_scale) const = 0;
 
   // Partial Animation implementation.
-  virtual CurveType Type() const OVERRIDE;
+  virtual CurveType Type() const override;
 };
 
 class CC_EXPORT FilterAnimationCurve : public AnimationCurve {
@@ -97,7 +97,7 @@
   virtual bool HasFilterThatMovesPixels() const = 0;
 
   // Partial Animation implementation.
-  virtual CurveType Type() const OVERRIDE;
+  virtual CurveType Type() const override;
 };
 
 }  // namespace cc
diff --git a/cc/animation/keyframed_animation_curve.h b/cc/animation/keyframed_animation_curve.h
index 2fb1888..d596256 100644
--- a/cc/animation/keyframed_animation_curve.h
+++ b/cc/animation/keyframed_animation_curve.h
@@ -126,11 +126,11 @@
   }
 
   // AnimationCurve implementation
-  virtual double Duration() const OVERRIDE;
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual double Duration() const override;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
   // BackgrounColorAnimationCurve implementation
-  virtual SkColor GetValue(double t) const OVERRIDE;
+  virtual SkColor GetValue(double t) const override;
 
  private:
   KeyframedColorAnimationCurve();
@@ -156,11 +156,11 @@
   }
 
   // AnimationCurve implementation
-  virtual double Duration() const OVERRIDE;
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual double Duration() const override;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
   // FloatAnimationCurve implementation
-  virtual float GetValue(double t) const OVERRIDE;
+  virtual float GetValue(double t) const override;
 
  private:
   KeyframedFloatAnimationCurve();
@@ -187,16 +187,16 @@
   }
 
   // AnimationCurve implementation
-  virtual double Duration() const OVERRIDE;
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual double Duration() const override;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
   // TransformAnimationCurve implementation
-  virtual gfx::Transform GetValue(double t) const OVERRIDE;
+  virtual gfx::Transform GetValue(double t) const override;
   virtual bool AnimatedBoundsForBox(const gfx::BoxF& box,
-                                    gfx::BoxF* bounds) const OVERRIDE;
-  virtual bool AffectsScale() const OVERRIDE;
-  virtual bool IsTranslation() const OVERRIDE;
-  virtual bool MaximumScale(float* max_scale) const OVERRIDE;
+                                    gfx::BoxF* bounds) const override;
+  virtual bool AffectsScale() const override;
+  virtual bool IsTranslation() const override;
+  virtual bool MaximumScale(float* max_scale) const override;
 
  private:
   KeyframedTransformAnimationCurve();
@@ -223,12 +223,12 @@
   }
 
   // AnimationCurve implementation
-  virtual double Duration() const OVERRIDE;
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual double Duration() const override;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
   // FilterAnimationCurve implementation
-  virtual FilterOperations GetValue(double t) const OVERRIDE;
-  virtual bool HasFilterThatMovesPixels() const OVERRIDE;
+  virtual FilterOperations GetValue(double t) const override;
+  virtual bool HasFilterThatMovesPixels() const override;
 
  private:
   KeyframedFilterAnimationCurve();
diff --git a/cc/animation/layer_animation_controller_unittest.cc b/cc/animation/layer_animation_controller_unittest.cc
index d32751b..de21762 100644
--- a/cc/animation/layer_animation_controller_unittest.cc
+++ b/cc/animation/layer_animation_controller_unittest.cc
@@ -867,13 +867,13 @@
 
   virtual void NotifyAnimationStarted(
       TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     started_ = true;
   }
 
   virtual void NotifyAnimationFinished(
       TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     finished_ = true;
   }
 
diff --git a/cc/animation/scroll_offset_animation_curve.h b/cc/animation/scroll_offset_animation_curve.h
index 452da27..197a431 100644
--- a/cc/animation/scroll_offset_animation_curve.h
+++ b/cc/animation/scroll_offset_animation_curve.h
@@ -29,9 +29,9 @@
   void UpdateTarget(double t, const gfx::ScrollOffset& new_target);
 
   // AnimationCurve implementation
-  virtual double Duration() const OVERRIDE;
-  virtual CurveType Type() const OVERRIDE;
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual double Duration() const override;
+  virtual CurveType Type() const override;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
  private:
   ScrollOffsetAnimationCurve(const gfx::ScrollOffset& target_value,
diff --git a/cc/animation/scrollbar_animation_controller.cc b/cc/animation/scrollbar_animation_controller.cc
index 910a7d8..ffb2287 100644
--- a/cc/animation/scrollbar_animation_controller.cc
+++ b/cc/animation/scrollbar_animation_controller.cc
@@ -13,9 +13,11 @@
 ScrollbarAnimationController::ScrollbarAnimationController(
     ScrollbarAnimationControllerClient* client,
     base::TimeDelta delay_before_starting,
+    base::TimeDelta resize_delay_before_starting,
     base::TimeDelta duration)
     : client_(client),
       delay_before_starting_(delay_before_starting),
+      resize_delay_before_starting_(resize_delay_before_starting),
       duration_(duration),
       is_animating_(false),
       currently_scrolling_(false),
@@ -53,33 +55,34 @@
   currently_scrolling_ = true;
 }
 
-void ScrollbarAnimationController::DidScrollUpdate() {
+void ScrollbarAnimationController::DidScrollUpdate(bool on_resize) {
   StopAnimation();
   delayed_scrollbar_fade_.Cancel();
 
   // As an optimization, we avoid spamming fade delay tasks during active fast
   // scrolls.  But if we're not within one, we need to post every scroll update.
   if (!currently_scrolling_)
-    PostDelayedFade();
+    PostDelayedFade(on_resize);
   else
     scroll_gesture_has_scrolled_ = true;
 }
 
 void ScrollbarAnimationController::DidScrollEnd() {
   if (scroll_gesture_has_scrolled_) {
-    PostDelayedFade();
+    PostDelayedFade(false);
     scroll_gesture_has_scrolled_ = false;
   }
 
   currently_scrolling_ = false;
 }
 
-void ScrollbarAnimationController::PostDelayedFade() {
+void ScrollbarAnimationController::PostDelayedFade(bool on_resize) {
+  base::TimeDelta delay =
+      on_resize ? resize_delay_before_starting_ : delay_before_starting_;
   delayed_scrollbar_fade_.Reset(
       base::Bind(&ScrollbarAnimationController::StartAnimation,
                  weak_factory_.GetWeakPtr()));
-  client_->PostDelayedScrollbarFade(delayed_scrollbar_fade_.callback(),
-                                    delay_before_starting_);
+  client_->PostDelayedScrollbarFade(delayed_scrollbar_fade_.callback(), delay);
 }
 
 void ScrollbarAnimationController::StartAnimation() {
diff --git a/cc/animation/scrollbar_animation_controller.h b/cc/animation/scrollbar_animation_controller.h
index ad7f631..8c98c9e 100644
--- a/cc/animation/scrollbar_animation_controller.h
+++ b/cc/animation/scrollbar_animation_controller.h
@@ -32,7 +32,7 @@
   void Animate(base::TimeTicks now);
 
   virtual void DidScrollBegin();
-  virtual void DidScrollUpdate();
+  virtual void DidScrollUpdate(bool on_resize);
   virtual void DidScrollEnd();
   virtual void DidMouseMoveOffScrollbar() {}
   virtual void DidMouseMoveNear(float distance) {}
@@ -40,6 +40,7 @@
  protected:
   ScrollbarAnimationController(ScrollbarAnimationControllerClient* client,
                                base::TimeDelta delay_before_starting,
+                               base::TimeDelta resize_delay_before_starting,
                                base::TimeDelta duration);
 
   virtual void RunAnimationFrame(float progress) = 0;
@@ -52,11 +53,12 @@
   // 0 to 1.
   float AnimationProgressAtTime(base::TimeTicks now);
 
-  void PostDelayedFade();
+  void PostDelayedFade(bool on_resize);
 
   ScrollbarAnimationControllerClient* client_;
   base::TimeTicks last_awaken_time_;
   base::TimeDelta delay_before_starting_;
+  base::TimeDelta resize_delay_before_starting_;
   base::TimeDelta duration_;
   bool is_animating_;
 
diff --git a/cc/animation/scrollbar_animation_controller_linear_fade.cc b/cc/animation/scrollbar_animation_controller_linear_fade.cc
index a7b220c..90437b3 100644
--- a/cc/animation/scrollbar_animation_controller_linear_fade.cc
+++ b/cc/animation/scrollbar_animation_controller_linear_fade.cc
@@ -15,17 +15,26 @@
     LayerImpl* scroll_layer,
     ScrollbarAnimationControllerClient* client,
     base::TimeDelta delay_before_starting,
+    base::TimeDelta resize_delay_before_starting,
     base::TimeDelta duration) {
-  return make_scoped_ptr(new ScrollbarAnimationControllerLinearFade(
-      scroll_layer, client, delay_before_starting, duration));
+  return make_scoped_ptr(
+      new ScrollbarAnimationControllerLinearFade(scroll_layer,
+                                                 client,
+                                                 delay_before_starting,
+                                                 resize_delay_before_starting,
+                                                 duration));
 }
 
 ScrollbarAnimationControllerLinearFade::ScrollbarAnimationControllerLinearFade(
     LayerImpl* scroll_layer,
     ScrollbarAnimationControllerClient* client,
     base::TimeDelta delay_before_starting,
+    base::TimeDelta resize_delay_before_starting,
     base::TimeDelta duration)
-    : ScrollbarAnimationController(client, delay_before_starting, duration),
+    : ScrollbarAnimationController(client,
+                                   delay_before_starting,
+                                   resize_delay_before_starting,
+                                   duration),
       scroll_layer_(scroll_layer) {
 }
 
@@ -38,8 +47,8 @@
     StopAnimation();
 }
 
-void ScrollbarAnimationControllerLinearFade::DidScrollUpdate() {
-  ScrollbarAnimationController::DidScrollUpdate();
+void ScrollbarAnimationControllerLinearFade::DidScrollUpdate(bool on_resize) {
+  ScrollbarAnimationController::DidScrollUpdate(on_resize);
   ApplyOpacityToScrollbars(1.f);
 }
 
diff --git a/cc/animation/scrollbar_animation_controller_linear_fade.h b/cc/animation/scrollbar_animation_controller_linear_fade.h
index 1070049..86524f2 100644
--- a/cc/animation/scrollbar_animation_controller_linear_fade.h
+++ b/cc/animation/scrollbar_animation_controller_linear_fade.h
@@ -19,20 +19,22 @@
       LayerImpl* scroll_layer,
       ScrollbarAnimationControllerClient* client,
       base::TimeDelta delay_before_starting,
+      base::TimeDelta resize_delay_before_starting,
       base::TimeDelta duration);
 
   virtual ~ScrollbarAnimationControllerLinearFade();
 
-  virtual void DidScrollUpdate() OVERRIDE;
+  virtual void DidScrollUpdate(bool on_resize) override;
 
  protected:
   ScrollbarAnimationControllerLinearFade(
       LayerImpl* scroll_layer,
       ScrollbarAnimationControllerClient* client,
       base::TimeDelta delay_before_starting,
+      base::TimeDelta resize_delay_before_starting,
       base::TimeDelta duration);
 
-  virtual void RunAnimationFrame(float progress) OVERRIDE;
+  virtual void RunAnimationFrame(float progress) override;
 
  private:
   float OpacityAtTime(base::TimeTicks now) const;
diff --git a/cc/animation/scrollbar_animation_controller_linear_fade_unittest.cc b/cc/animation/scrollbar_animation_controller_linear_fade_unittest.cc
index e5801d6..99b45b3 100644
--- a/cc/animation/scrollbar_animation_controller_linear_fade_unittest.cc
+++ b/cc/animation/scrollbar_animation_controller_linear_fade_unittest.cc
@@ -21,10 +21,11 @@
       : host_impl_(&proxy_, &shared_bitmap_manager_), needs_frame_count_(0) {}
 
   virtual void PostDelayedScrollbarFade(const base::Closure& start_fade,
-                                        base::TimeDelta delay) OVERRIDE {
+                                        base::TimeDelta delay) override {
     start_fade_ = start_fade;
+    delay_ = delay;
   }
-  virtual void SetNeedsScrollbarAnimationFrame() OVERRIDE {
+  virtual void SetNeedsScrollbarAnimationFrame() override {
     needs_frame_count_++;
   }
 
@@ -59,6 +60,7 @@
         scroll_layer_ptr,
         this,
         base::TimeDelta::FromSeconds(2),
+        base::TimeDelta::FromSeconds(5),
         base::TimeDelta::FromSeconds(3));
   }
 
@@ -70,9 +72,26 @@
   scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar_layer_;
 
   base::Closure start_fade_;
+  base::TimeDelta delay_;
   int needs_frame_count_;
 };
 
+TEST_F(ScrollbarAnimationControllerLinearFadeTest, DelayAnimationOnResize) {
+  scrollbar_layer_->SetOpacity(0.0f);
+  scrollbar_controller_->DidScrollBegin();
+  scrollbar_controller_->DidScrollUpdate(true);
+  scrollbar_controller_->DidScrollEnd();
+  // Normal Animation delay of 2 seconds.
+  EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
+  EXPECT_EQ(delay_, base::TimeDelta::FromSeconds(2));
+
+  scrollbar_layer_->SetOpacity(0.0f);
+  scrollbar_controller_->DidScrollUpdate(true);
+  // Delay animation on resize to 5 seconds.
+  EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
+  EXPECT_EQ(delay_, base::TimeDelta::FromSeconds(5));
+}
+
 TEST_F(ScrollbarAnimationControllerLinearFadeTest, HiddenInBegin) {
   scrollbar_layer_->SetOpacity(0.0f);
   scrollbar_controller_->Animate(base::TimeTicks());
@@ -105,7 +124,7 @@
   time += base::TimeDelta::FromSeconds(1);
   scrollbar_controller_->DidScrollBegin();
 
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
 
   EXPECT_TRUE(start_fade_.Equals(base::Closure()));
@@ -131,7 +150,7 @@
   time += base::TimeDelta::FromSeconds(1);
 
   scrollbar_controller_->DidScrollBegin();
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   scrollbar_controller_->DidScrollEnd();
   start_fade_.Run();
 
@@ -157,7 +176,7 @@
 TEST_F(ScrollbarAnimationControllerLinearFadeTest, AwakenByProgrammaticScroll) {
   base::TimeTicks time;
   time += base::TimeDelta::FromSeconds(1);
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   start_fade_.Run();
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
@@ -165,7 +184,7 @@
   time += base::TimeDelta::FromSeconds(1);
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity());
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   start_fade_.Run();
 
   time += base::TimeDelta::FromSeconds(1);
@@ -181,7 +200,7 @@
   EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity());
 
   time += base::TimeDelta::FromSeconds(1);
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   start_fade_.Run();
   time += base::TimeDelta::FromSeconds(1);
   scrollbar_controller_->Animate(time);
@@ -206,7 +225,7 @@
        AnimationPreservedByNonScrollingGesture) {
   base::TimeTicks time;
   time += base::TimeDelta::FromSeconds(1);
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   start_fade_.Run();
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
@@ -238,7 +257,7 @@
        AnimationOverriddenByScrollingGesture) {
   base::TimeTicks time;
   time += base::TimeDelta::FromSeconds(1);
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   start_fade_.Run();
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
@@ -255,7 +274,7 @@
   EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity());
 
   time += base::TimeDelta::FromSeconds(1);
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   EXPECT_FLOAT_EQ(1, scrollbar_layer_->opacity());
 
   time += base::TimeDelta::FromSeconds(1);
diff --git a/cc/animation/scrollbar_animation_controller_thinning.cc b/cc/animation/scrollbar_animation_controller_thinning.cc
index 892e307..0c05709 100644
--- a/cc/animation/scrollbar_animation_controller_thinning.cc
+++ b/cc/animation/scrollbar_animation_controller_thinning.cc
@@ -21,17 +21,26 @@
     LayerImpl* scroll_layer,
     ScrollbarAnimationControllerClient* client,
     base::TimeDelta delay_before_starting,
+    base::TimeDelta resize_delay_before_starting,
     base::TimeDelta duration) {
-  return make_scoped_ptr(new ScrollbarAnimationControllerThinning(
-      scroll_layer, client, delay_before_starting, duration));
+  return make_scoped_ptr(
+      new ScrollbarAnimationControllerThinning(scroll_layer,
+                                               client,
+                                               delay_before_starting,
+                                               resize_delay_before_starting,
+                                               duration));
 }
 
 ScrollbarAnimationControllerThinning::ScrollbarAnimationControllerThinning(
     LayerImpl* scroll_layer,
     ScrollbarAnimationControllerClient* client,
     base::TimeDelta delay_before_starting,
+    base::TimeDelta resize_delay_before_starting,
     base::TimeDelta duration)
-    : ScrollbarAnimationController(client, delay_before_starting, duration),
+    : ScrollbarAnimationController(client,
+                                   delay_before_starting,
+                                   resize_delay_before_starting,
+                                   duration),
       scroll_layer_(scroll_layer),
       mouse_is_over_scrollbar_(false),
       mouse_is_near_scrollbar_(false),
@@ -65,8 +74,8 @@
   StartAnimation();
 }
 
-void ScrollbarAnimationControllerThinning::DidScrollUpdate() {
-  ScrollbarAnimationController::DidScrollUpdate();
+void ScrollbarAnimationControllerThinning::DidScrollUpdate(bool on_resize) {
+  ScrollbarAnimationController::DidScrollUpdate(on_resize);
   ApplyOpacityAndThumbThicknessScale(
     1, mouse_is_near_scrollbar_ ? 1.f : kIdleThicknessScale);
 
diff --git a/cc/animation/scrollbar_animation_controller_thinning.h b/cc/animation/scrollbar_animation_controller_thinning.h
index c0c7a83..6e9f21a 100644
--- a/cc/animation/scrollbar_animation_controller_thinning.h
+++ b/cc/animation/scrollbar_animation_controller_thinning.h
@@ -21,6 +21,7 @@
       LayerImpl* scroll_layer,
       ScrollbarAnimationControllerClient* client,
       base::TimeDelta delay_before_starting,
+      base::TimeDelta resize_delay_before_starting,
       base::TimeDelta duration);
 
   virtual ~ScrollbarAnimationControllerThinning();
@@ -31,18 +32,19 @@
   bool mouse_is_over_scrollbar() const { return mouse_is_over_scrollbar_; }
   bool mouse_is_near_scrollbar() const { return mouse_is_near_scrollbar_; }
 
-  virtual void DidScrollUpdate() OVERRIDE;
-  virtual void DidMouseMoveOffScrollbar() OVERRIDE;
-  virtual void DidMouseMoveNear(float distance) OVERRIDE;
+  virtual void DidScrollUpdate(bool on_resize) override;
+  virtual void DidMouseMoveOffScrollbar() override;
+  virtual void DidMouseMoveNear(float distance) override;
 
  protected:
   ScrollbarAnimationControllerThinning(
       LayerImpl* scroll_layer,
       ScrollbarAnimationControllerClient* client,
       base::TimeDelta delay_before_starting,
+      base::TimeDelta resize_delay_before_starting,
       base::TimeDelta duration);
 
-  virtual void RunAnimationFrame(float progress) OVERRIDE;
+  virtual void RunAnimationFrame(float progress) override;
 
  private:
   // Describes whether the current animation should INCREASE (darken / thicken)
diff --git a/cc/animation/scrollbar_animation_controller_thinning_unittest.cc b/cc/animation/scrollbar_animation_controller_thinning_unittest.cc
index 6dad5b0..cb7d33e 100644
--- a/cc/animation/scrollbar_animation_controller_thinning_unittest.cc
+++ b/cc/animation/scrollbar_animation_controller_thinning_unittest.cc
@@ -21,10 +21,10 @@
       : host_impl_(&proxy_, &shared_bitmap_manager_) {}
 
   virtual void PostDelayedScrollbarFade(const base::Closure& start_fade,
-                                        base::TimeDelta delay) OVERRIDE {
+                                        base::TimeDelta delay) override {
     start_fade_ = start_fade;
   }
-  virtual void SetNeedsScrollbarAnimationFrame() OVERRIDE {}
+  virtual void SetNeedsScrollbarAnimationFrame() override {}
 
  protected:
   virtual void SetUp() {
@@ -58,6 +58,7 @@
         scroll_layer_ptr,
         this,
         base::TimeDelta::FromSeconds(2),
+        base::TimeDelta::FromSeconds(5),
         base::TimeDelta::FromSeconds(3));
   }
 
@@ -83,7 +84,7 @@
 TEST_F(ScrollbarAnimationControllerThinningTest, AwakenByProgrammaticScroll) {
   base::TimeTicks time;
   time += base::TimeDelta::FromSeconds(1);
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
   // Scrollbar doesn't change size if triggered by scroll.
   EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor());
@@ -96,7 +97,7 @@
   EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor());
 
   // Subsequent scroll restarts animation.
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
 
   start_fade_.Run();
 
@@ -134,7 +135,7 @@
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor());
 
-  scrollbar_controller_->DidScrollUpdate();
+  scrollbar_controller_->DidScrollUpdate(false);
   start_fade_.Run();
   scrollbar_controller_->Animate(time);
   EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity());
diff --git a/cc/animation/timing_function.h b/cc/animation/timing_function.h
index a6d1aac..9974865 100644
--- a/cc/animation/timing_function.h
+++ b/cc/animation/timing_function.h
@@ -35,10 +35,10 @@
   virtual ~CubicBezierTimingFunction();
 
   // TimingFunction implementation.
-  virtual float GetValue(double time) const OVERRIDE;
-  virtual float Velocity(double time) const OVERRIDE;
-  virtual void Range(float* min, float* max) const OVERRIDE;
-  virtual scoped_ptr<TimingFunction> Clone() const OVERRIDE;
+  virtual float GetValue(double time) const override;
+  virtual float Velocity(double time) const override;
+  virtual void Range(float* min, float* max) const override;
+  virtual scoped_ptr<TimingFunction> Clone() const override;
 
  protected:
   CubicBezierTimingFunction(double x1, double y1, double x2, double y2);
diff --git a/cc/base/delayed_unique_notifier_unittest.cc b/cc/base/delayed_unique_notifier_unittest.cc
index 6c7ae6e..090da33 100644
--- a/cc/base/delayed_unique_notifier_unittest.cc
+++ b/cc/base/delayed_unique_notifier_unittest.cc
@@ -23,7 +23,7 @@
   virtual ~TestNotifier() {}
 
   // Overridden from DelayedUniqueNotifier:
-  virtual base::TimeTicks Now() const OVERRIDE { return now_; }
+  virtual base::TimeTicks Now() const override { return now_; }
 
   void SetNow(base::TimeTicks now) { now_ = now; }
 
@@ -35,7 +35,7 @@
  public:
   DelayedUniqueNotifierTest() : notification_count_(0) {}
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     notification_count_ = 0;
     task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner);
   }
diff --git a/cc/base/latency_info_swap_promise.h b/cc/base/latency_info_swap_promise.h
index a210a3f..b912f24 100644
--- a/cc/base/latency_info_swap_promise.h
+++ b/cc/base/latency_info_swap_promise.h
@@ -16,10 +16,10 @@
   explicit LatencyInfoSwapPromise(const ui::LatencyInfo& latency_info);
   virtual ~LatencyInfoSwapPromise();
 
-  virtual void DidSwap(CompositorFrameMetadata* metadata) OVERRIDE;
-  virtual void DidNotSwap(DidNotSwapReason reason) OVERRIDE;
+  virtual void DidSwap(CompositorFrameMetadata* metadata) override;
+  virtual void DidNotSwap(DidNotSwapReason reason) override;
 
-  virtual int64 TraceId() const OVERRIDE;
+  virtual int64 TraceId() const override;
 
  private:
   ui::LatencyInfo latency_;
diff --git a/cc/base/latency_info_swap_promise_monitor.h b/cc/base/latency_info_swap_promise_monitor.h
index 1a114fb..cf1dc1d 100644
--- a/cc/base/latency_info_swap_promise_monitor.h
+++ b/cc/base/latency_info_swap_promise_monitor.h
@@ -24,9 +24,9 @@
                                 LayerTreeHostImpl* layer_tree_host_impl);
   virtual ~LatencyInfoSwapPromiseMonitor();
 
-  virtual void OnSetNeedsCommitOnMain() OVERRIDE;
-  virtual void OnSetNeedsRedrawOnImpl() OVERRIDE;
-  virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE;
+  virtual void OnSetNeedsCommitOnMain() override;
+  virtual void OnSetNeedsRedrawOnImpl() override;
+  virtual void OnForwardScrollUpdateToMainThreadOnImpl() override;
 
  private:
   ui::LatencyInfo* latency_;
diff --git a/cc/base/unique_notifier_unittest.cc b/cc/base/unique_notifier_unittest.cc
index ec1b83c..0ba9892 100644
--- a/cc/base/unique_notifier_unittest.cc
+++ b/cc/base/unique_notifier_unittest.cc
@@ -17,7 +17,7 @@
  public:
   UniqueNotifierTest() : notification_count_(0) {}
 
-  virtual void SetUp() OVERRIDE { ResetNotificationCount(); }
+  virtual void SetUp() override { ResetNotificationCount(); }
 
   void Notify() { ++notification_count_; }
 
diff --git a/cc/blink/scrollbar_impl.h b/cc/blink/scrollbar_impl.h
index fe7bf59..5f0572c 100644
--- a/cc/blink/scrollbar_impl.h
+++ b/cc/blink/scrollbar_impl.h
@@ -25,17 +25,17 @@
   virtual ~ScrollbarImpl();
 
   // cc::Scrollbar implementation.
-  virtual cc::ScrollbarOrientation Orientation() const OVERRIDE;
-  virtual bool IsLeftSideVerticalScrollbar() const OVERRIDE;
-  virtual bool HasThumb() const OVERRIDE;
-  virtual bool IsOverlay() const OVERRIDE;
-  virtual gfx::Point Location() const OVERRIDE;
-  virtual int ThumbThickness() const OVERRIDE;
-  virtual int ThumbLength() const OVERRIDE;
-  virtual gfx::Rect TrackRect() const OVERRIDE;
+  virtual cc::ScrollbarOrientation Orientation() const override;
+  virtual bool IsLeftSideVerticalScrollbar() const override;
+  virtual bool HasThumb() const override;
+  virtual bool IsOverlay() const override;
+  virtual gfx::Point Location() const override;
+  virtual int ThumbThickness() const override;
+  virtual int ThumbLength() const override;
+  virtual gfx::Rect TrackRect() const override;
   virtual void PaintPart(SkCanvas* canvas,
                          cc::ScrollbarPart part,
-                         const gfx::Rect& content_rect) OVERRIDE;
+                         const gfx::Rect& content_rect) override;
 
  private:
   scoped_ptr<blink::WebScrollbar> scrollbar_;
diff --git a/cc/blink/web_animation_impl.cc b/cc/blink/web_animation_impl.cc
index f1069c7..4989c07 100644
--- a/cc/blink/web_animation_impl.cc
+++ b/cc/blink/web_animation_impl.cc
@@ -154,7 +154,6 @@
   animation_->set_playback_rate(playback_rate);
 }
 
-#if WEB_ANIMATION_SUPPORTS_FILL_MODE
 blink::WebCompositorAnimation::FillMode WebCompositorAnimationImpl::fillMode()
     const {
   switch (animation_->fill_mode()) {
@@ -188,7 +187,7 @@
       break;
   }
 }
-#endif
+
 scoped_ptr<cc::Animation> WebCompositorAnimationImpl::PassAnimation() {
   animation_->set_needs_synchronized_start_time(true);
   return animation_.Pass();
diff --git a/cc/blink/web_animation_impl.h b/cc/blink/web_animation_impl.h
index 74741cc..e3925d6 100644
--- a/cc/blink/web_animation_impl.h
+++ b/cc/blink/web_animation_impl.h
@@ -43,10 +43,8 @@
   virtual void setDirection(Direction);
   virtual double playbackRate() const;
   virtual void setPlaybackRate(double playback_rate);
-#if WEB_ANIMATION_SUPPORTS_FILL_MODE
   virtual FillMode fillMode() const;
   virtual void setFillMode(blink::WebCompositorAnimation::FillMode fill_mode);
-#endif
   scoped_ptr<cc::Animation> PassAnimation();
 
  private:
diff --git a/cc/blink/web_content_layer_impl.h b/cc/blink/web_content_layer_impl.h
index bc23aa0..9dab02d 100644
--- a/cc/blink/web_content_layer_impl.h
+++ b/cc/blink/web_content_layer_impl.h
@@ -39,9 +39,9 @@
   virtual void PaintContents(SkCanvas* canvas,
                              const gfx::Rect& clip,
                              ContentLayerClient::GraphicsContextStatus
-                                 graphics_context_status) OVERRIDE;
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE;
-  virtual bool FillsBoundsCompletely() const OVERRIDE;
+                                 graphics_context_status) override;
+  virtual void DidChangeLayerCanUseLCDText() override;
+  virtual bool FillsBoundsCompletely() const override;
 
   scoped_ptr<WebLayerImpl> layer_;
   blink::WebContentLayerClient* client_;
diff --git a/cc/blink/web_external_bitmap_impl.h b/cc/blink/web_external_bitmap_impl.h
index 905c098..7dbfab3 100644
--- a/cc/blink/web_external_bitmap_impl.h
+++ b/cc/blink/web_external_bitmap_impl.h
@@ -28,9 +28,9 @@
   virtual ~WebExternalBitmapImpl();
 
   // blink::WebExternalBitmap implementation.
-  virtual blink::WebSize size() OVERRIDE;
-  virtual void setSize(blink::WebSize size) OVERRIDE;
-  virtual uint8* pixels() OVERRIDE;
+  virtual blink::WebSize size() override;
+  virtual void setSize(blink::WebSize size) override;
+  virtual uint8* pixels() override;
 
   base::SharedMemory* shared_memory() { return shared_memory_.get(); }
 
diff --git a/cc/blink/web_external_texture_layer_impl.h b/cc/blink/web_external_texture_layer_impl.h
index 044be1a..a657e62 100644
--- a/cc/blink/web_external_texture_layer_impl.h
+++ b/cc/blink/web_external_texture_layer_impl.h
@@ -48,7 +48,7 @@
   virtual bool PrepareTextureMailbox(
       cc::TextureMailbox* mailbox,
       scoped_ptr<cc::SingleReleaseCallback>* release_callback,
-      bool use_shared_memory) OVERRIDE;
+      bool use_shared_memory) override;
 
  private:
   static void DidReleaseMailbox(
diff --git a/cc/blink/web_layer_impl.cc b/cc/blink/web_layer_impl.cc
index 36304a1..dadfd6d 100644
--- a/cc/blink/web_layer_impl.cc
+++ b/cc/blink/web_layer_impl.cc
@@ -443,7 +443,7 @@
   // This object takes ownership of the debug_info object.
   explicit TracedDebugInfo(blink::WebGraphicsLayerDebugInfo* debug_info)
       : debug_info_(debug_info) {}
-  virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE {
+  virtual void AppendAsTraceFormat(std::string* out) const override {
     DCHECK(thread_checker_.CalledOnValidThread());
     blink::WebString web_string;
     debug_info_->appendAsTraceFormat(&web_string);
diff --git a/cc/blink/web_layer_impl.h b/cc/blink/web_layer_impl.h
index 0e3de76..75f8a55 100644
--- a/cc/blink/web_layer_impl.h
+++ b/cc/blink/web_layer_impl.h
@@ -137,7 +137,7 @@
 
   // LayerClient implementation.
   virtual scoped_refptr<base::debug::ConvertableToTraceFormat> TakeDebugInfo()
-      OVERRIDE;
+      override;
 
   virtual void setScrollParent(blink::WebLayer* parent);
   virtual void setClipParent(blink::WebLayer* parent);
diff --git a/cc/blink/web_to_cc_animation_delegate_adapter.h b/cc/blink/web_to_cc_animation_delegate_adapter.h
index 2f7897b..c7e7c56 100644
--- a/cc/blink/web_to_cc_animation_delegate_adapter.h
+++ b/cc/blink/web_to_cc_animation_delegate_adapter.h
@@ -23,10 +23,10 @@
  private:
   virtual void NotifyAnimationStarted(
       base::TimeTicks monotonic_time,
-      cc::Animation::TargetProperty target_property) OVERRIDE;
+      cc::Animation::TargetProperty target_property) override;
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      cc::Animation::TargetProperty target_property) OVERRIDE;
+      cc::Animation::TargetProperty target_property) override;
 
   blink::WebCompositorAnimationDelegate* delegate_;
 
diff --git a/cc/cc_tests.gyp b/cc/cc_tests.gyp
index 18fcf7a..21299c0 100644
--- a/cc/cc_tests.gyp
+++ b/cc/cc_tests.gyp
@@ -122,6 +122,7 @@
       'trees/layer_tree_host_unittest_video.cc',
       'trees/layer_tree_impl_unittest.cc',
       'trees/occlusion_tracker_unittest.cc',
+      'trees/occlusion_unittest.cc',
       'trees/tree_synchronizer_unittest.cc',
     ],
     'cc_surfaces_unit_tests_source_files': [
diff --git a/cc/debug/benchmark_instrumentation.cc b/cc/debug/benchmark_instrumentation.cc
index adc969b..74caae8 100644
--- a/cc/debug/benchmark_instrumentation.cc
+++ b/cc/debug/benchmark_instrumentation.cc
@@ -28,5 +28,17 @@
                        "data", stats.AsTraceableData());
 }
 
+void IssueDisplayRenderingStatsEvent() {
+  scoped_refptr<base::debug::TracedValue> record_data =
+      new base::debug::TracedValue();
+  record_data->SetInteger("frame_count", 1);
+  TRACE_EVENT_INSTANT1(
+      "benchmark",
+      "BenchmarkInstrumentation::DisplayRenderingStats",
+      TRACE_EVENT_SCOPE_THREAD,
+      "data",
+      scoped_refptr<base::debug::ConvertableToTraceFormat>(record_data));
+}
+
 }  // namespace benchmark_instrumentation
 }  // namespace cc
diff --git a/cc/debug/benchmark_instrumentation.h b/cc/debug/benchmark_instrumentation.h
index 3a6b03d..bd524b9 100644
--- a/cc/debug/benchmark_instrumentation.h
+++ b/cc/debug/benchmark_instrumentation.h
@@ -5,6 +5,7 @@
 #ifndef CC_DEBUG_BENCHMARK_INSTRUMENTATION_H_
 #define CC_DEBUG_BENCHMARK_INSTRUMENTATION_H_
 
+#include "cc/base/cc_export.h"
 #include "cc/debug/rendering_stats.h"
 
 namespace cc {
@@ -45,6 +46,7 @@
     const RenderingStats::MainThreadRenderingStats& stats);
 void IssueImplThreadRenderingStatsEvent(
     const RenderingStats::ImplThreadRenderingStats& stats);
+void CC_EXPORT IssueDisplayRenderingStatsEvent();
 
 }  // namespace benchmark_instrumentation
 }  // namespace cc
diff --git a/cc/debug/invalidation_benchmark.h b/cc/debug/invalidation_benchmark.h
index 00481ae..a727104 100644
--- a/cc/debug/invalidation_benchmark.h
+++ b/cc/debug/invalidation_benchmark.h
@@ -24,9 +24,9 @@
   virtual ~InvalidationBenchmark();
 
   // Implements MicroBenchmark interface.
-  virtual void DidUpdateLayers(LayerTreeHost* host) OVERRIDE;
-  virtual void RunOnLayer(PictureLayer* layer) OVERRIDE;
-  virtual bool ProcessMessage(scoped_ptr<base::Value> value) OVERRIDE;
+  virtual void DidUpdateLayers(LayerTreeHost* host) override;
+  virtual void RunOnLayer(PictureLayer* layer) override;
+  virtual bool ProcessMessage(scoped_ptr<base::Value> value) override;
 
  private:
   enum Mode { FIXED_SIZE, LAYER, VIEWPORT, RANDOM };
diff --git a/cc/debug/micro_benchmark_controller_unittest.cc b/cc/debug/micro_benchmark_controller_unittest.cc
index 1f2bfd8..527e850 100644
--- a/cc/debug/micro_benchmark_controller_unittest.cc
+++ b/cc/debug/micro_benchmark_controller_unittest.cc
@@ -21,7 +21,7 @@
   MicroBenchmarkControllerTest()
       : layer_tree_host_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     impl_proxy_ = make_scoped_ptr(new FakeImplProxy);
     shared_bitmap_manager_.reset(new TestSharedBitmapManager());
     layer_tree_host_impl_ = make_scoped_ptr(new FakeLayerTreeHostImpl(
@@ -32,7 +32,7 @@
     layer_tree_host_->InitializeForTesting(scoped_ptr<Proxy>(new FakeProxy));
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     layer_tree_host_impl_ = nullptr;
     layer_tree_host_ = nullptr;
     impl_proxy_ = nullptr;
diff --git a/cc/debug/picture_record_benchmark.h b/cc/debug/picture_record_benchmark.h
index 89f2bc0..42404b1 100644
--- a/cc/debug/picture_record_benchmark.h
+++ b/cc/debug/picture_record_benchmark.h
@@ -23,8 +23,8 @@
   virtual ~PictureRecordBenchmark();
 
   // Implements MicroBenchmark interface.
-  virtual void DidUpdateLayers(LayerTreeHost* host) OVERRIDE;
-  virtual void RunOnLayer(PictureLayer* layer) OVERRIDE;
+  virtual void DidUpdateLayers(LayerTreeHost* host) override;
+  virtual void RunOnLayer(PictureLayer* layer) override;
 
  private:
   void Run(Layer* layer);
diff --git a/cc/debug/rasterize_and_record_benchmark.h b/cc/debug/rasterize_and_record_benchmark.h
index e2942d4..921a7e9 100644
--- a/cc/debug/rasterize_and_record_benchmark.h
+++ b/cc/debug/rasterize_and_record_benchmark.h
@@ -30,11 +30,11 @@
   virtual ~RasterizeAndRecordBenchmark();
 
   // Implements MicroBenchmark interface.
-  virtual void DidUpdateLayers(LayerTreeHost* host) OVERRIDE;
-  virtual void RunOnLayer(PictureLayer* layer) OVERRIDE;
+  virtual void DidUpdateLayers(LayerTreeHost* host) override;
+  virtual void RunOnLayer(PictureLayer* layer) override;
 
   virtual scoped_ptr<MicroBenchmarkImpl> CreateBenchmarkImpl(
-      scoped_refptr<base::MessageLoopProxy> origin_loop) OVERRIDE;
+      scoped_refptr<base::MessageLoopProxy> origin_loop) override;
 
  private:
   void Run(Layer* layer);
diff --git a/cc/debug/rasterize_and_record_benchmark_impl.cc b/cc/debug/rasterize_and_record_benchmark_impl.cc
index dbf74a4..48bdf8a 100644
--- a/cc/debug/rasterize_and_record_benchmark_impl.cc
+++ b/cc/debug/rasterize_and_record_benchmark_impl.cc
@@ -37,7 +37,7 @@
         best_time_(base::TimeDelta::Max()) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {
+  virtual void RunOnWorkerThread() override {
     // Parameters for LapTimer.
     const int kTimeLimitMillis = 1;
     const int kWarmupRuns = 0;
@@ -96,46 +96,46 @@
 
   virtual scoped_refptr<Tile> CreateTile(
       PictureLayerTiling* tiling,
-      const gfx::Rect& content_rect) OVERRIDE {
+      const gfx::Rect& content_rect) override {
     return base_client_->CreateTile(tiling, content_rect);
   }
 
-  virtual PicturePileImpl* GetPile() OVERRIDE {
+  virtual PicturePileImpl* GetPile() override {
     return base_client_->GetPile();
   }
 
   virtual gfx::Size CalculateTileSize(
-      const gfx::Size& content_bounds) const OVERRIDE {
+      const gfx::Size& content_bounds) const override {
     return base_client_->CalculateTileSize(content_bounds);
   }
 
   // This is the only function that returns something different from the base
   // client.
-  virtual const Region* GetInvalidation() OVERRIDE { return &invalidation_; }
+  virtual const Region* GetInvalidation() override { return &invalidation_; }
 
   virtual const PictureLayerTiling* GetTwinTiling(
-      const PictureLayerTiling* tiling) const OVERRIDE {
+      const PictureLayerTiling* tiling) const override {
     return base_client_->GetTwinTiling(tiling);
   }
 
   virtual PictureLayerTiling* GetRecycledTwinTiling(
-      const PictureLayerTiling* tiling) OVERRIDE {
+      const PictureLayerTiling* tiling) override {
     return base_client_->GetRecycledTwinTiling(tiling);
   }
 
-  virtual size_t GetMaxTilesForInterestArea() const OVERRIDE {
+  virtual size_t GetMaxTilesForInterestArea() const override {
     return base_client_->GetMaxTilesForInterestArea();
   }
 
-  virtual float GetSkewportTargetTimeInSeconds() const OVERRIDE {
+  virtual float GetSkewportTargetTimeInSeconds() const override {
     return base_client_->GetSkewportTargetTimeInSeconds();
   }
 
-  virtual int GetSkewportExtrapolationLimitInContentPixels() const OVERRIDE {
+  virtual int GetSkewportExtrapolationLimitInContentPixels() const override {
     return base_client_->GetSkewportExtrapolationLimitInContentPixels();
   }
 
-  virtual WhichTree GetTree() const OVERRIDE { return base_client_->GetTree(); }
+  virtual WhichTree GetTree() const override { return base_client_->GetTree(); }
 
  private:
   PictureLayerTilingClient* base_client_;
diff --git a/cc/debug/rasterize_and_record_benchmark_impl.h b/cc/debug/rasterize_and_record_benchmark_impl.h
index cceef05..4508d5e 100644
--- a/cc/debug/rasterize_and_record_benchmark_impl.h
+++ b/cc/debug/rasterize_and_record_benchmark_impl.h
@@ -27,8 +27,8 @@
   virtual ~RasterizeAndRecordBenchmarkImpl();
 
   // Implements MicroBenchmark interface.
-  virtual void DidCompleteCommit(LayerTreeHostImpl* host) OVERRIDE;
-  virtual void RunOnLayer(PictureLayerImpl* layer) OVERRIDE;
+  virtual void DidCompleteCommit(LayerTreeHostImpl* host) override;
+  virtual void RunOnLayer(PictureLayerImpl* layer) override;
 
  private:
   void Run(LayerImpl* layer);
diff --git a/cc/debug/rendering_stats.cc b/cc/debug/rendering_stats.cc
index b5989fc..d0668da 100644
--- a/cc/debug/rendering_stats.cc
+++ b/cc/debug/rendering_stats.cc
@@ -29,7 +29,7 @@
 }
 
 RenderingStats::MainThreadRenderingStats::MainThreadRenderingStats()
-    : frame_count(0), painted_pixel_count(0), recorded_pixel_count(0) {
+    : painted_pixel_count(0), recorded_pixel_count(0) {
 }
 
 RenderingStats::MainThreadRenderingStats::~MainThreadRenderingStats() {
@@ -39,7 +39,6 @@
 RenderingStats::MainThreadRenderingStats::AsTraceableData() const {
   scoped_refptr<base::debug::TracedValue> record_data =
       new base::debug::TracedValue();
-  record_data->SetInteger("frame_count", frame_count);
   record_data->SetDouble("paint_time", paint_time.InSecondsF());
   record_data->SetInteger("painted_pixel_count", painted_pixel_count);
   record_data->SetDouble("record_time", record_time.InSecondsF());
@@ -49,7 +48,6 @@
 
 void RenderingStats::MainThreadRenderingStats::Add(
     const MainThreadRenderingStats& other) {
-  frame_count += other.frame_count;
   paint_time += other.paint_time;
   painted_pixel_count += other.painted_pixel_count;
   record_time += other.record_time;
diff --git a/cc/debug/rendering_stats.h b/cc/debug/rendering_stats.h
index 73ca9c4..52560e2 100644
--- a/cc/debug/rendering_stats.h
+++ b/cc/debug/rendering_stats.h
@@ -36,7 +36,6 @@
     // Note: when adding new members, please remember to update Add in
     // rendering_stats.cc.
 
-    int64 frame_count;
     base::TimeDelta paint_time;
     int64 painted_pixel_count;
     base::TimeDelta record_time;
diff --git a/cc/debug/rendering_stats_instrumentation.cc b/cc/debug/rendering_stats_instrumentation.cc
index 01499d2..fb7ec52 100644
--- a/cc/debug/rendering_stats_instrumentation.cc
+++ b/cc/debug/rendering_stats_instrumentation.cc
@@ -71,16 +71,12 @@
   return base::TimeDelta();
 }
 
-void RenderingStatsInstrumentation::IncrementFrameCount(int64 count,
-                                                        bool main_thread) {
+void RenderingStatsInstrumentation::IncrementFrameCount(int64 count) {
   if (!record_rendering_stats_)
     return;
 
   base::AutoLock scoped_lock(lock_);
-  if (main_thread)
-    main_thread_rendering_stats_.frame_count += count;
-  else
-    impl_thread_rendering_stats_.frame_count += count;
+  impl_thread_rendering_stats_.frame_count += count;
 }
 
 void RenderingStatsInstrumentation::AddPaint(base::TimeDelta duration,
diff --git a/cc/debug/rendering_stats_instrumentation.h b/cc/debug/rendering_stats_instrumentation.h
index 208c1a3..fd7f5c9 100644
--- a/cc/debug/rendering_stats_instrumentation.h
+++ b/cc/debug/rendering_stats_instrumentation.h
@@ -47,7 +47,7 @@
   base::TimeTicks StartRecording() const;
   base::TimeDelta EndRecording(base::TimeTicks start_time) const;
 
-  void IncrementFrameCount(int64 count, bool main_thread);
+  void IncrementFrameCount(int64 count);
   void AddPaint(base::TimeDelta duration, int64 pixels);
   void AddRecord(base::TimeDelta duration, int64 pixels);
   void AddRaster(base::TimeDelta duration, int64 pixels);
diff --git a/cc/debug/traced_picture.h b/cc/debug/traced_picture.h
index 638f00b..1d31694 100644
--- a/cc/debug/traced_picture.h
+++ b/cc/debug/traced_picture.h
@@ -23,7 +23,7 @@
   static scoped_refptr<base::debug::ConvertableToTraceFormat>
       AsTraceablePictureAlias(const Picture* original);
 
-  virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE;
+  virtual void AppendAsTraceFormat(std::string* out) const override;
 
  private:
   virtual ~TracedPicture();
diff --git a/cc/debug/unittest_only_benchmark.h b/cc/debug/unittest_only_benchmark.h
index 8b2c815..277d85f 100644
--- a/cc/debug/unittest_only_benchmark.h
+++ b/cc/debug/unittest_only_benchmark.h
@@ -16,12 +16,12 @@
                         const DoneCallback& callback);
   virtual ~UnittestOnlyBenchmark();
 
-  virtual void DidUpdateLayers(LayerTreeHost* host) OVERRIDE;
-  virtual bool ProcessMessage(scoped_ptr<base::Value> value) OVERRIDE;
+  virtual void DidUpdateLayers(LayerTreeHost* host) override;
+  virtual bool ProcessMessage(scoped_ptr<base::Value> value) override;
 
  protected:
   virtual scoped_ptr<MicroBenchmarkImpl> CreateBenchmarkImpl(
-      scoped_refptr<base::MessageLoopProxy> origin_loop) OVERRIDE;
+      scoped_refptr<base::MessageLoopProxy> origin_loop) override;
 
  private:
   void RecordImplResults(scoped_ptr<base::Value> results);
diff --git a/cc/debug/unittest_only_benchmark_impl.h b/cc/debug/unittest_only_benchmark_impl.h
index b9e9bc9..48953de 100644
--- a/cc/debug/unittest_only_benchmark_impl.h
+++ b/cc/debug/unittest_only_benchmark_impl.h
@@ -23,7 +23,7 @@
                             const DoneCallback& callback);
   virtual ~UnittestOnlyBenchmarkImpl();
 
-  virtual void DidCompleteCommit(LayerTreeHostImpl* host) OVERRIDE;
+  virtual void DidCompleteCommit(LayerTreeHostImpl* host) override;
 };
 
 }  // namespace cc
diff --git a/cc/input/top_controls_manager_unittest.cc b/cc/input/top_controls_manager_unittest.cc
index 91577c8..177904c 100644
--- a/cc/input/top_controls_manager_unittest.cc
+++ b/cc/input/top_controls_manager_unittest.cc
@@ -37,20 +37,20 @@
 
   virtual ~MockTopControlsManagerClient() {}
 
-  virtual void DidChangeTopControlsPosition() OVERRIDE {
+  virtual void DidChangeTopControlsPosition() override {
     redraw_needed_ = true;
     update_draw_properties_needed_ = true;
   }
 
-  virtual bool HaveRootScrollLayer() const OVERRIDE {
+  virtual bool HaveRootScrollLayer() const override {
     return true;
   }
 
-  virtual void SetControlsTopOffset(float offset) OVERRIDE {
+  virtual void SetControlsTopOffset(float offset) override {
     top_controls_top_offset_ = offset;
   }
 
-  virtual float ControlsTopOffset() const OVERRIDE {
+  virtual float ControlsTopOffset() const override {
     return top_controls_top_offset_;
   }
 
diff --git a/cc/layers/content_layer.h b/cc/layers/content_layer.h
index 4bc414c..4b8c346 100644
--- a/cc/layers/content_layer.h
+++ b/cc/layers/content_layer.h
@@ -21,7 +21,7 @@
  public:
   static scoped_ptr<ContentLayerPainter> Create(ContentLayerClient* client);
 
-  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) OVERRIDE;
+  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) override;
 
  private:
   explicit ContentLayerPainter(ContentLayerClient* client);
@@ -38,33 +38,33 @@
 
   void ClearClient();
 
-  virtual void SetLayerTreeHost(LayerTreeHost* layer_tree_host) OVERRIDE;
+  virtual void SetLayerTreeHost(LayerTreeHost* layer_tree_host) override;
   virtual void SetTexturePriorities(const PriorityCalculator& priority_calc)
-      OVERRIDE;
+      override;
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
-  virtual bool NeedMoreUpdates() OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
+  virtual bool NeedMoreUpdates() override;
 
-  virtual void SetContentsOpaque(bool contents_opaque) OVERRIDE;
+  virtual void SetContentsOpaque(bool contents_opaque) override;
 
-  virtual bool SupportsLCDText() const OVERRIDE;
+  virtual bool SupportsLCDText() const override;
 
-  virtual skia::RefPtr<SkPicture> GetPicture() const OVERRIDE;
+  virtual skia::RefPtr<SkPicture> GetPicture() const override;
 
-  virtual void OnOutputSurfaceCreated() OVERRIDE;
+  virtual void OnOutputSurfaceCreated() override;
 
  protected:
   explicit ContentLayer(ContentLayerClient* client);
   virtual ~ContentLayer();
 
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
   // TiledLayer implementation.
-  virtual LayerUpdater* Updater() const OVERRIDE;
+  virtual LayerUpdater* Updater() const override;
 
  private:
   // TiledLayer implementation.
-  virtual void CreateUpdaterIfNeeded() OVERRIDE;
+  virtual void CreateUpdaterIfNeeded() override;
 
   void UpdateCanUseLCDText();
 
diff --git a/cc/layers/contents_scaling_layer.h b/cc/layers/contents_scaling_layer.h
index 84780d2..3b1f828 100644
--- a/cc/layers/contents_scaling_layer.h
+++ b/cc/layers/contents_scaling_layer.h
@@ -17,10 +17,10 @@
   virtual void CalculateContentsScale(float ideal_contents_scale,
                                       float* contents_scale_x,
                                       float* contents_scale_y,
-                                      gfx::Size* content_bounds) OVERRIDE;
+                                      gfx::Size* content_bounds) override;
 
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
 
  protected:
   ContentsScalingLayer();
diff --git a/cc/layers/contents_scaling_layer_unittest.cc b/cc/layers/contents_scaling_layer_unittest.cc
index 70f66f5..8cbd517 100644
--- a/cc/layers/contents_scaling_layer_unittest.cc
+++ b/cc/layers/contents_scaling_layer_unittest.cc
@@ -18,7 +18,7 @@
   MockContentsScalingLayer()
       : ContentsScalingLayer() {}
 
-  virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) OVERRIDE {
+  virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) override {
     last_needs_display_rect_ = dirty_rect;
     ContentsScalingLayer::SetNeedsDisplayRect(dirty_rect);
   }
diff --git a/cc/layers/delegated_frame_provider_unittest.cc b/cc/layers/delegated_frame_provider_unittest.cc
index 8462595..4a3f77e 100644
--- a/cc/layers/delegated_frame_provider_unittest.cc
+++ b/cc/layers/delegated_frame_provider_unittest.cc
@@ -62,14 +62,14 @@
                  false);
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     resource_collection_ = new DelegatedFrameResourceCollection;
     resource_collection_->SetClient(this);
   }
 
-  virtual void TearDown() OVERRIDE { resource_collection_->SetClient(NULL); }
+  virtual void TearDown() override { resource_collection_->SetClient(NULL); }
 
-  virtual void UnusedResourcesAreAvailable() OVERRIDE {
+  virtual void UnusedResourcesAreAvailable() override {
     resources_available_ = true;
     resource_collection_->TakeUnusedResourcesForChildCompositor(&resources_);
   }
diff --git a/cc/layers/delegated_frame_resource_collection_unittest.cc b/cc/layers/delegated_frame_resource_collection_unittest.cc
index 9bfd59c..99c181e 100644
--- a/cc/layers/delegated_frame_resource_collection_unittest.cc
+++ b/cc/layers/delegated_frame_resource_collection_unittest.cc
@@ -21,9 +21,9 @@
  protected:
   DelegatedFrameResourceCollectionTest() : resources_available_(false) {}
 
-  virtual void SetUp() OVERRIDE { CreateResourceCollection(); }
+  virtual void SetUp() override { CreateResourceCollection(); }
 
-  virtual void TearDown() OVERRIDE { DestroyResourceCollection(); }
+  virtual void TearDown() override { DestroyResourceCollection(); }
 
   void CreateResourceCollection() {
     DCHECK(!resource_collection_.get());
@@ -46,7 +46,7 @@
     return resources;
   }
 
-  virtual void UnusedResourcesAreAvailable() OVERRIDE {
+  virtual void UnusedResourcesAreAvailable() override {
     resources_available_ = true;
     resource_collection_->TakeUnusedResourcesForChildCompositor(
         &returned_resources_);
diff --git a/cc/layers/delegated_renderer_layer.h b/cc/layers/delegated_renderer_layer.h
index 49b41d9..8f31b17 100644
--- a/cc/layers/delegated_renderer_layer.h
+++ b/cc/layers/delegated_renderer_layer.h
@@ -22,16 +22,16 @@
       const scoped_refptr<DelegatedFrameProvider>& frame_provider);
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE;
+      override;
+  virtual void SetLayerTreeHost(LayerTreeHost* host) override;
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* impl) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
+  virtual void PushPropertiesTo(LayerImpl* impl) override;
 
   // Called by the DelegatedFrameProvider when a new frame is available to be
   // picked up.
   void ProviderHasNewFrame();
-  virtual bool HasDelegatedContent() const OVERRIDE;
+  virtual bool HasDelegatedContent() const override;
 
  protected:
   DelegatedRendererLayer(
diff --git a/cc/layers/delegated_renderer_layer_impl.cc b/cc/layers/delegated_renderer_layer_impl.cc
index c8af1fa..86d493a 100644
--- a/cc/layers/delegated_renderer_layer_impl.cc
+++ b/cc/layers/delegated_renderer_layer_impl.cc
@@ -16,7 +16,7 @@
 #include "cc/quads/render_pass_draw_quad.h"
 #include "cc/quads/solid_color_draw_quad.h"
 #include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 
 namespace cc {
 
@@ -126,11 +126,8 @@
                  &resources_in_frame);
   for (size_t i = 0; i < render_pass_list.size(); ++i) {
     RenderPass* pass = render_pass_list[i];
-    for (QuadList::Iterator iter = pass->quad_list.begin();
-         iter != pass->quad_list.end();
-         ++iter) {
-      iter->IterateResources(remap_resources_to_parent_callback);
-    }
+    for (auto& quad : pass->quad_list)
+      quad.IterateResources(remap_resources_to_parent_callback);
   }
 
   if (invalid_frame) {
@@ -257,7 +254,7 @@
 
 void DelegatedRendererLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   AppendRainbowDebugBorder(render_pass, append_quads_data);
 
@@ -284,7 +281,7 @@
     DCHECK(target_render_pass_id.layer_id == render_target()->id());
 
     AppendRenderPassQuads(render_pass,
-                          occlusion_tracker,
+                          occlusion_in_content_space,
                           append_quads_data,
                           root_delegated_render_pass,
                           frame_size);
@@ -296,7 +293,7 @@
     const RenderPass* delegated_render_pass =
         render_passes_in_draw_order_[render_pass_index];
     AppendRenderPassQuads(render_pass,
-                          occlusion_tracker,
+                          occlusion_in_content_space,
                           append_quads_data,
                           delegated_render_pass,
                           frame_size);
@@ -386,23 +383,19 @@
 
 void DelegatedRendererLayerImpl::AppendRenderPassQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data,
     const RenderPass* delegated_render_pass,
     const gfx::Size& frame_size) const {
   const SharedQuadState* delegated_shared_quad_state = NULL;
   SharedQuadState* output_shared_quad_state = NULL;
 
-  for (QuadList::ConstIterator iter = delegated_render_pass->quad_list.begin();
-       iter != delegated_render_pass->quad_list.end();
-       ++iter) {
-    const DrawQuad* delegated_quad = &*iter;
-
+  for (const auto& delegated_quad : delegated_render_pass->quad_list) {
     bool is_root_delegated_render_pass =
         delegated_render_pass == render_passes_in_draw_order_.back();
 
-    if (delegated_quad->shared_quad_state != delegated_shared_quad_state) {
-      delegated_shared_quad_state = delegated_quad->shared_quad_state;
+    if (delegated_quad.shared_quad_state != delegated_shared_quad_state) {
+      delegated_shared_quad_state = delegated_quad.shared_quad_state;
       output_shared_quad_state = render_pass->CreateAndAppendSharedQuadState();
       output_shared_quad_state->CopyFrom(delegated_shared_quad_state);
 
@@ -446,21 +439,24 @@
       quad_content_to_delegated_target_space.ConcatTransform(draw_transform());
     }
 
+    Occlusion occlusion_in_quad_space =
+        occlusion_in_content_space.GetOcclusionWithGivenDrawTransform(
+            quad_content_to_delegated_target_space);
+
     gfx::Rect quad_visible_rect =
-        occlusion_tracker.GetCurrentOcclusionForLayer(
-                              quad_content_to_delegated_target_space)
-            .GetUnoccludedContentRect(delegated_quad->visible_rect);
+        occlusion_in_quad_space.GetUnoccludedContentRect(
+            delegated_quad.visible_rect);
 
     if (quad_visible_rect.IsEmpty())
       continue;
 
-    if (delegated_quad->material != DrawQuad::RENDER_PASS) {
+    if (delegated_quad.material != DrawQuad::RENDER_PASS) {
       DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad(
-          delegated_quad, output_shared_quad_state);
+          &delegated_quad, output_shared_quad_state);
       output_quad->visible_rect = quad_visible_rect;
     } else {
       RenderPassId delegated_contributing_render_pass_id =
-          RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id;
+          RenderPassDrawQuad::MaterialCast(&delegated_quad)->render_pass_id;
       RenderPassId output_contributing_render_pass_id(-1, -1);
 
       bool present =
@@ -475,7 +471,7 @@
 
         RenderPassDrawQuad* output_quad =
             render_pass->CopyFromAndAppendRenderPassDrawQuad(
-                RenderPassDrawQuad::MaterialCast(delegated_quad),
+                RenderPassDrawQuad::MaterialCast(&delegated_quad),
                 output_shared_quad_state,
                 output_contributing_render_pass_id);
         output_quad->visible_rect = quad_visible_rect;
diff --git a/cc/layers/delegated_renderer_layer_impl.h b/cc/layers/delegated_renderer_layer_impl.h
index 1f3c881..53f2f8a 100644
--- a/cc/layers/delegated_renderer_layer_impl.h
+++ b/cc/layers/delegated_renderer_layer_impl.h
@@ -25,19 +25,19 @@
 
   // LayerImpl overrides.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual bool HasDelegatedContent() const OVERRIDE;
-  virtual bool HasContributingDelegatedRenderPasses() const OVERRIDE;
-  virtual RenderPassId FirstContributingRenderPassId() const OVERRIDE;
+      override;
+  virtual bool HasDelegatedContent() const override;
+  virtual bool HasContributingDelegatedRenderPasses() const override;
+  virtual RenderPassId FirstContributingRenderPassId() const override;
   virtual RenderPassId NextContributingRenderPassId(
-      RenderPassId previous) const OVERRIDE;
-  virtual void ReleaseResources() OVERRIDE;
+      RenderPassId previous) const override;
+  virtual void ReleaseResources() override;
   virtual bool WillDraw(DrawMode draw_mode,
-                        ResourceProvider* resource_provider) OVERRIDE;
+                        ResourceProvider* resource_provider) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   void AppendContributingRenderPasses(RenderPassSink* render_pass_sink);
 
@@ -78,15 +78,14 @@
   bool ConvertDelegatedRenderPassId(RenderPassId delegated_render_pass_id,
                                     RenderPassId* output_render_pass_id) const;
 
-  void AppendRenderPassQuads(
-      RenderPass* render_pass,
-      const OcclusionTracker<LayerImpl>& occlusion_tracker,
-      AppendQuadsData* append_quads_data,
-      const RenderPass* delegated_render_pass,
-      const gfx::Size& frame_size) const;
+  void AppendRenderPassQuads(RenderPass* render_pass,
+                             const Occlusion& occlusion_in_content_space,
+                             AppendQuadsData* append_quads_data,
+                             const RenderPass* delegated_render_pass,
+                             const gfx::Size& frame_size) const;
 
   // LayerImpl overrides.
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
   bool have_render_passes_to_push_;
   float inverse_device_scale_factor_;
diff --git a/cc/layers/heads_up_display_layer.h b/cc/layers/heads_up_display_layer.h
index 12d6aef..22dcec8 100644
--- a/cc/layers/heads_up_display_layer.h
+++ b/cc/layers/heads_up_display_layer.h
@@ -22,11 +22,11 @@
 
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
  protected:
   HeadsUpDisplayLayer();
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
  private:
   virtual ~HeadsUpDisplayLayer();
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc
index ab9e8a4..85bb2f1 100644
--- a/cc/layers/heads_up_display_layer_impl.cc
+++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -131,7 +131,7 @@
 
 void HeadsUpDisplayLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   if (!resources_.back()->id())
     return;
diff --git a/cc/layers/heads_up_display_layer_impl.h b/cc/layers/heads_up_display_layer_impl.h
index 3cba4f5..388dfcd 100644
--- a/cc/layers/heads_up_display_layer_impl.h
+++ b/cc/layers/heads_up_display_layer_impl.h
@@ -35,17 +35,17 @@
   virtual ~HeadsUpDisplayLayerImpl();
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   virtual bool WillDraw(DrawMode draw_mode,
-                        ResourceProvider* resource_provider) OVERRIDE;
+                        ResourceProvider* resource_provider) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
   void UpdateHudTexture(DrawMode draw_mode,
                         ResourceProvider* resource_provider);
 
-  virtual void ReleaseResources() OVERRIDE;
+  virtual void ReleaseResources() override;
 
   bool IsAnimatingHUDContents() const { return fade_step_ > 0; }
 
@@ -70,9 +70,9 @@
 
   HeadsUpDisplayLayerImpl(LayerTreeImpl* tree_impl, int id);
 
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
   void UpdateHudContents();
   void DrawHudContents(SkCanvas* canvas);
diff --git a/cc/layers/heads_up_display_layer_impl_unittest.cc b/cc/layers/heads_up_display_layer_impl_unittest.cc
index 828a93a..d342d4f 100644
--- a/cc/layers/heads_up_display_layer_impl_unittest.cc
+++ b/cc/layers/heads_up_display_layer_impl_unittest.cc
@@ -7,7 +7,6 @@
 #include "cc/test/fake_impl_proxy.h"
 #include "cc/test/fake_layer_tree_host_impl.h"
 #include "cc/test/fake_output_surface.h"
-#include "cc/test/mock_occlusion_tracker.h"
 #include "cc/test/test_shared_bitmap_manager.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -17,12 +16,11 @@
 void CheckDrawLayer(HeadsUpDisplayLayerImpl* layer,
                     ResourceProvider* resource_provider,
                     DrawMode draw_mode) {
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   bool will_draw = layer->WillDraw(draw_mode, resource_provider);
   if (will_draw)
-    layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer->AppendQuads(render_pass.get(), Occlusion(), &data);
   layer->UpdateHudTexture(draw_mode, resource_provider);
   if (will_draw)
     layer->DidDraw(resource_provider);
diff --git a/cc/layers/heads_up_display_unittest.cc b/cc/layers/heads_up_display_unittest.cc
index b9bd5db..686338e 100644
--- a/cc/layers/heads_up_display_unittest.cc
+++ b/cc/layers/heads_up_display_unittest.cc
@@ -12,7 +12,7 @@
 
 class HeadsUpDisplayTest : public LayerTreeTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // Enable the HUD without requiring text.
     settings->initial_debug_state.show_property_changed_rects = true;
   }
@@ -23,7 +23,7 @@
   static scoped_refptr<DrawsContentLayer> Create() {
     return make_scoped_refptr(new DrawsContentLayer());
   }
-  virtual bool DrawsContent() const OVERRIDE { return true; }
+  virtual bool DrawsContent() const override { return true; }
 
  private:
   DrawsContentLayer() : Layer() {}
@@ -37,14 +37,14 @@
         root_layer2_(DrawsContentLayer::Create()),
         num_commits_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     root_layer1_->SetBounds(gfx::Size(30, 30));
     root_layer2_->SetBounds(gfx::Size(30, 30));
 
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     ++num_commits_;
 
     ASSERT_TRUE(layer_tree_host()->hud_layer());
@@ -86,7 +86,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   scoped_refptr<DrawsContentLayer> root_layer1_;
diff --git a/cc/layers/image_layer.h b/cc/layers/image_layer.h
index 63d467a..53d1f69 100644
--- a/cc/layers/image_layer.h
+++ b/cc/layers/image_layer.h
@@ -20,27 +20,27 @@
 
   // Layer implementation.
   virtual void SetTexturePriorities(const PriorityCalculator& priority_calc)
-      OVERRIDE;
+      override;
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
   virtual void CalculateContentsScale(float ideal_contents_scale,
                                       float* contents_scale_x,
                                       float* contents_scale_y,
-                                      gfx::Size* content_bounds) OVERRIDE;
-  virtual void OnOutputSurfaceCreated() OVERRIDE;
+                                      gfx::Size* content_bounds) override;
+  virtual void OnOutputSurfaceCreated() override;
 
   void SetBitmap(const SkBitmap& image);
 
  protected:
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
  private:
   ImageLayer();
   virtual ~ImageLayer();
 
   // TiledLayer Implementation.
-  virtual LayerUpdater* Updater() const OVERRIDE;
-  virtual void CreateUpdaterIfNeeded() OVERRIDE;
+  virtual LayerUpdater* Updater() const override;
+  virtual void CreateUpdaterIfNeeded() override;
 
   float ImageContentsScaleX() const;
   float ImageContentsScaleY() const;
diff --git a/cc/layers/io_surface_layer.h b/cc/layers/io_surface_layer.h
index ad06e7f..681f1a1 100644
--- a/cc/layers/io_surface_layer.h
+++ b/cc/layers/io_surface_layer.h
@@ -17,13 +17,13 @@
   void SetIOSurfaceProperties(uint32_t io_surface_id, const gfx::Size& size);
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
 
  protected:
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
   IOSurfaceLayer();
 
  private:
diff --git a/cc/layers/io_surface_layer_impl.cc b/cc/layers/io_surface_layer_impl.cc
index 7cb86ce..8d22195 100644
--- a/cc/layers/io_surface_layer_impl.cc
+++ b/cc/layers/io_surface_layer_impl.cc
@@ -9,7 +9,7 @@
 #include "cc/output/output_surface.h"
 #include "cc/quads/io_surface_draw_quad.h"
 #include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
 #include "third_party/khronos/GLES2/gl2.h"
@@ -66,7 +66,7 @@
 
 void IOSurfaceLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   SharedQuadState* shared_quad_state =
       render_pass->CreateAndAppendSharedQuadState();
@@ -78,9 +78,7 @@
   gfx::Rect quad_rect(content_bounds());
   gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect());
   gfx::Rect visible_quad_rect =
-      occlusion_tracker.GetCurrentOcclusionForLayer(
-                            draw_properties().target_space_transform)
-          .GetUnoccludedContentRect(quad_rect);
+      occlusion_in_content_space.GetUnoccludedContentRect(quad_rect);
   if (visible_quad_rect.IsEmpty())
     return;
 
diff --git a/cc/layers/io_surface_layer_impl.h b/cc/layers/io_surface_layer_impl.h
index ac8142d..d6b6625 100644
--- a/cc/layers/io_surface_layer_impl.h
+++ b/cc/layers/io_surface_layer_impl.h
@@ -24,23 +24,23 @@
   void SetIOSurfaceProperties(unsigned io_surface_id, const gfx::Size& size);
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer_tree_impl) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer_tree_impl) override;
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
   virtual bool WillDraw(DrawMode draw_mode,
-                        ResourceProvider* resource_provider) OVERRIDE;
-  virtual void ReleaseResources() OVERRIDE;
+                        ResourceProvider* resource_provider) override;
+  virtual void ReleaseResources() override;
 
  private:
   IOSurfaceLayerImpl(LayerTreeImpl* tree_impl, int id);
 
   void DestroyResource();
 
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
   unsigned io_surface_id_;
   gfx::Size io_surface_size_;
diff --git a/cc/layers/layer.h b/cc/layers/layer.h
index a627140..3e83e8f 100644
--- a/cc/layers/layer.h
+++ b/cc/layers/layer.h
@@ -552,16 +552,16 @@
   void RemoveChildOrDependent(Layer* child);
 
   // LayerAnimationValueProvider implementation.
-  virtual gfx::ScrollOffset ScrollOffsetForAnimation() const OVERRIDE;
+  virtual gfx::ScrollOffset ScrollOffsetForAnimation() const override;
 
   // LayerAnimationValueObserver implementation.
-  virtual void OnFilterAnimated(const FilterOperations& filters) OVERRIDE;
-  virtual void OnOpacityAnimated(float opacity) OVERRIDE;
-  virtual void OnTransformAnimated(const gfx::Transform& transform) OVERRIDE;
+  virtual void OnFilterAnimated(const FilterOperations& filters) override;
+  virtual void OnOpacityAnimated(float opacity) override;
+  virtual void OnTransformAnimated(const gfx::Transform& transform) override;
   virtual void OnScrollOffsetAnimated(
-      const gfx::ScrollOffset& scroll_offset) OVERRIDE;
-  virtual void OnAnimationWaitingForDeletion() OVERRIDE;
-  virtual bool IsActive() const OVERRIDE;
+      const gfx::ScrollOffset& scroll_offset) override;
+  virtual void OnAnimationWaitingForDeletion() override;
+  virtual bool IsActive() const override;
 
   // If this layer has a scroll parent, it removes |this| from its list of
   // scroll children.
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index 3e0e009..6dfec0e 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -783,7 +783,7 @@
 
   bounds_ = bounds;
 
-  ScrollbarParametersDidChange();
+  ScrollbarParametersDidChange(true);
   if (masks_to_bounds())
     NoteLayerPropertyChangedForSubtree();
   else
@@ -796,7 +796,7 @@
 
   bounds_delta_ = bounds_delta;
 
-  ScrollbarParametersDidChange();
+  ScrollbarParametersDidChange(true);
   if (masks_to_bounds())
     NoteLayerPropertyChangedForSubtree();
   else
@@ -1123,7 +1123,7 @@
 
   if (changed) {
     NoteLayerPropertyChangedForSubtree();
-    ScrollbarParametersDidChange();
+    ScrollbarParametersDidChange(false);
   }
 }
 
@@ -1229,7 +1229,8 @@
 }
 
 void LayerImpl::SetScrollbarPosition(ScrollbarLayerImplBase* scrollbar_layer,
-                                     LayerImpl* scrollbar_clip_layer) const {
+                                     LayerImpl* scrollbar_clip_layer,
+                                     bool on_resize) const {
   DCHECK(scrollbar_layer);
   LayerImpl* page_scale_layer = layer_tree_impl()->page_scale_layer();
 
@@ -1314,7 +1315,7 @@
             layer_tree_impl()->min_page_scale_factor()) ||
            !layer_tree_impl()->settings().use_pinch_zoom_scrollbars);
       if (is_animatable_scrollbar)
-        scrollbar_animation_controller_->DidScrollUpdate();
+        scrollbar_animation_controller_->DidScrollUpdate(on_resize);
     }
   }
 }
@@ -1377,14 +1378,17 @@
   return false;
 }
 
-void LayerImpl::ScrollbarParametersDidChange() {
+void LayerImpl::ScrollbarParametersDidChange(bool on_resize) {
   if (!scrollbars_)
     return;
 
   for (ScrollbarSet::iterator it = scrollbars_->begin();
        it != scrollbars_->end();
-       ++it)
-    (*it)->ScrollbarParametersDidChange();
+       ++it) {
+    bool is_scroll_layer = (*it)->ScrollLayerId() == layer_id_;
+    bool scroll_layer_resized = is_scroll_layer && on_resize;
+    (*it)->ScrollbarParametersDidChange(scroll_layer_resized);
+  }
 }
 
 void LayerImpl::SetNeedsPushProperties() {
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h
index fc7f1c6..1e8fa63 100644
--- a/cc/layers/layer_impl.h
+++ b/cc/layers/layer_impl.h
@@ -98,24 +98,24 @@
   int id() const { return layer_id_; }
 
   // LayerAnimationValueProvider implementation.
-  virtual gfx::ScrollOffset ScrollOffsetForAnimation() const OVERRIDE;
+  virtual gfx::ScrollOffset ScrollOffsetForAnimation() const override;
 
   // LayerAnimationValueObserver implementation.
-  virtual void OnFilterAnimated(const FilterOperations& filters) OVERRIDE;
-  virtual void OnOpacityAnimated(float opacity) OVERRIDE;
-  virtual void OnTransformAnimated(const gfx::Transform& transform) OVERRIDE;
+  virtual void OnFilterAnimated(const FilterOperations& filters) override;
+  virtual void OnOpacityAnimated(float opacity) override;
+  virtual void OnTransformAnimated(const gfx::Transform& transform) override;
   virtual void OnScrollOffsetAnimated(
-      const gfx::ScrollOffset& scroll_offset) OVERRIDE;
-  virtual void OnAnimationWaitingForDeletion() OVERRIDE;
-  virtual bool IsActive() const OVERRIDE;
+      const gfx::ScrollOffset& scroll_offset) override;
+  virtual void OnAnimationWaitingForDeletion() override;
+  virtual bool IsActive() const override;
 
   // AnimationDelegate implementation.
   virtual void NotifyAnimationStarted(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE{};
+      Animation::TargetProperty target_property) override{};
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE;
+      Animation::TargetProperty target_property) override;
 
   // Tree structure.
   LayerImpl* parent() { return parent_; }
@@ -195,7 +195,7 @@
   virtual bool WillDraw(DrawMode draw_mode,
                         ResourceProvider* resource_provider);
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
+                           const Occlusion& occlusion_in_content_space,
                            AppendQuadsData* append_quads_data) {}
   virtual void DidDraw(ResourceProvider* resource_provider);
 
@@ -386,7 +386,8 @@
   gfx::ScrollOffset MaxScrollOffset() const;
   gfx::Vector2dF ClampScrollToMaxScrollOffset();
   void SetScrollbarPosition(ScrollbarLayerImplBase* scrollbar_layer,
-                            LayerImpl* scrollbar_clip_layer) const;
+                            LayerImpl* scrollbar_clip_layer,
+                            bool on_resize) const;
   void SetScrollDelta(const gfx::Vector2dF& scroll_delta);
   gfx::Vector2dF ScrollDelta() const;
 
@@ -513,7 +514,7 @@
   void AddScrollbar(ScrollbarLayerImplBase* layer);
   void RemoveScrollbar(ScrollbarLayerImplBase* layer);
   bool HasScrollbar(ScrollbarOrientation orientation) const;
-  void ScrollbarParametersDidChange();
+  void ScrollbarParametersDidChange(bool on_resize);
   int clip_height() {
     return scroll_clip_layer_ ? scroll_clip_layer_->bounds().height() : 0;
   }
diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc
index dc046a0..1d8289f 100644
--- a/cc/layers/layer_impl_unittest.cc
+++ b/cc/layers/layer_impl_unittest.cc
@@ -492,11 +492,11 @@
 class ScrollDelegateIgnore : public LayerImpl::ScrollOffsetDelegate {
  public:
   virtual void SetTotalScrollOffset(
-      const gfx::ScrollOffset& new_value) OVERRIDE {}
-  virtual gfx::ScrollOffset GetTotalScrollOffset() OVERRIDE {
+      const gfx::ScrollOffset& new_value) override {}
+  virtual gfx::ScrollOffset GetTotalScrollOffset() override {
     return gfx::ScrollOffset(fixed_offset_);
   }
-  virtual bool IsExternalFlingActive() const OVERRIDE { return false; }
+  virtual bool IsExternalFlingActive() const override { return false; }
 
   void set_fixed_offset(const gfx::Vector2dF& fixed_offset) {
     fixed_offset_ = fixed_offset;
@@ -542,13 +542,13 @@
 class ScrollDelegateAccept : public LayerImpl::ScrollOffsetDelegate {
  public:
   virtual void SetTotalScrollOffset(
-      const gfx::ScrollOffset& new_value) OVERRIDE {
+      const gfx::ScrollOffset& new_value) override {
     current_offset_ = new_value;
   }
-  virtual gfx::ScrollOffset GetTotalScrollOffset() OVERRIDE {
+  virtual gfx::ScrollOffset GetTotalScrollOffset() override {
     return current_offset_;
   }
-  virtual bool IsExternalFlingActive() const OVERRIDE { return false; }
+  virtual bool IsExternalFlingActive() const override { return false; }
 
  private:
   gfx::ScrollOffset current_offset_;
diff --git a/cc/layers/layer_iterator_unittest.cc b/cc/layers/layer_iterator_unittest.cc
index 1daa923..3aa98d2 100644
--- a/cc/layers/layer_iterator_unittest.cc
+++ b/cc/layers/layer_iterator_unittest.cc
@@ -31,7 +31,7 @@
   int count_representing_contributing_surface_;
   int count_representing_itself_;
 
-  virtual bool DrawsContent() const OVERRIDE { return draws_content_; }
+  virtual bool DrawsContent() const override { return draws_content_; }
   void set_draws_content(bool draws_content) { draws_content_ = draws_content; }
 
  private:
diff --git a/cc/layers/layer_perftest.cc b/cc/layers/layer_perftest.cc
index 18b4355..14afcbf 100644
--- a/cc/layers/layer_perftest.cc
+++ b/cc/layers/layer_perftest.cc
@@ -23,7 +23,7 @@
 
 class MockLayerPainter : public LayerPainter {
  public:
-  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) OVERRIDE {
+  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) override {
   }
 };
 
@@ -38,13 +38,13 @@
                kTimeCheckInterval) {}
 
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     layer_tree_host_ = FakeLayerTreeHost::Create(&fake_client_);
     layer_tree_host_->InitializeSingleThreaded(
         &fake_client_, base::MessageLoopProxy::current());
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     layer_tree_host_->SetRootLayer(NULL);
     layer_tree_host_ = nullptr;
   }
diff --git a/cc/layers/layer_unittest.cc b/cc/layers/layer_unittest.cc
index 0ea8f3d..32b4b4c 100644
--- a/cc/layers/layer_unittest.cc
+++ b/cc/layers/layer_unittest.cc
@@ -51,7 +51,7 @@
 
 class MockLayerPainter : public LayerPainter {
  public:
-  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) OVERRIDE {
+  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) override {
   }
 };
 
@@ -62,11 +62,11 @@
         fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
 
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     layer_tree_host_.reset(new StrictMock<MockLayerTreeHost>(&fake_client_));
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     Mock::VerifyAndClearExpectations(layer_tree_host_.get());
     EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(AnyNumber());
     parent_ = NULL;
@@ -1211,12 +1211,12 @@
     return make_scoped_refptr(new DrawsContentChangeLayer());
   }
 
-  virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE {
+  virtual void SetLayerTreeHost(LayerTreeHost* host) override {
     Layer::SetLayerTreeHost(host);
     SetFakeDrawsContent(!fake_draws_content_);
   }
 
-  virtual bool HasDrawableContent() const OVERRIDE {
+  virtual bool HasDrawableContent() const override {
     return fake_draws_content_ && Layer::HasDrawableContent();
   }
 
@@ -1227,7 +1227,7 @@
 
  private:
   DrawsContentChangeLayer() : Layer(), fake_draws_content_(false) {}
-  virtual ~DrawsContentChangeLayer() OVERRIDE {}
+  virtual ~DrawsContentChangeLayer() override {}
 
   bool fake_draws_content_;
 };
diff --git a/cc/layers/nine_patch_layer.h b/cc/layers/nine_patch_layer.h
index 61d3e01..c1891bc 100644
--- a/cc/layers/nine_patch_layer.h
+++ b/cc/layers/nine_patch_layer.h
@@ -21,7 +21,7 @@
  public:
   static scoped_refptr<NinePatchLayer> Create();
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   // |border| is the space around the center rectangular region in layer space
   // (known as aperture in image space).  |border.x()| and |border.y()| are the
@@ -43,7 +43,7 @@
   NinePatchLayer();
   virtual ~NinePatchLayer();
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   gfx::Rect border_;
   bool fill_center_;
diff --git a/cc/layers/nine_patch_layer_impl.cc b/cc/layers/nine_patch_layer_impl.cc
index ba3f30c..b350ba9 100644
--- a/cc/layers/nine_patch_layer_impl.cc
+++ b/cc/layers/nine_patch_layer_impl.cc
@@ -9,7 +9,7 @@
 #include "cc/base/math_util.h"
 #include "cc/quads/texture_draw_quad.h"
 #include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 #include "ui/gfx/rect_f.h"
 
 namespace cc {
@@ -82,7 +82,7 @@
 
 void NinePatchLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   CheckGeometryLimitations();
   SharedQuadState* shared_quad_state =
@@ -213,10 +213,8 @@
   gfx::Rect visible_rect;
   const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
 
-  Occlusion occlusion =
-      occlusion_tracker.GetCurrentOcclusionForLayer(draw_transform());
-
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_top_left);
+  visible_rect =
+      occlusion_in_content_space.GetUnoccludedContentRect(layer_top_left);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -233,7 +231,8 @@
                  flipped);
   }
 
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_top_right);
+  visible_rect =
+      occlusion_in_content_space.GetUnoccludedContentRect(layer_top_right);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -250,7 +249,8 @@
                  flipped);
   }
 
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_bottom_left);
+  visible_rect =
+      occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom_left);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -267,7 +267,8 @@
                  flipped);
   }
 
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_bottom_right);
+  visible_rect =
+      occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom_right);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -284,7 +285,7 @@
                  flipped);
   }
 
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_top);
+  visible_rect = occlusion_in_content_space.GetUnoccludedContentRect(layer_top);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -301,7 +302,8 @@
                  flipped);
   }
 
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_left);
+  visible_rect =
+      occlusion_in_content_space.GetUnoccludedContentRect(layer_left);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -318,7 +320,8 @@
                  flipped);
   }
 
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_right);
+  visible_rect =
+      occlusion_in_content_space.GetUnoccludedContentRect(layer_right);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -335,7 +338,8 @@
                  flipped);
   }
 
-  visible_rect = occlusion.GetUnoccludedContentRect(layer_bottom);
+  visible_rect =
+      occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom);
   if (!visible_rect.IsEmpty()) {
     TextureDrawQuad* quad =
         render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -353,7 +357,8 @@
   }
 
   if (fill_center_) {
-    visible_rect = occlusion.GetUnoccludedContentRect(layer_center);
+    visible_rect =
+        occlusion_in_content_space.GetUnoccludedContentRect(layer_center);
     if (!visible_rect.IsEmpty()) {
       TextureDrawQuad* quad =
           render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
diff --git a/cc/layers/nine_patch_layer_impl.h b/cc/layers/nine_patch_layer_impl.h
index 235b182..0674ecb 100644
--- a/cc/layers/nine_patch_layer_impl.h
+++ b/cc/layers/nine_patch_layer_impl.h
@@ -58,20 +58,20 @@
                  bool fill_center);
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
-  virtual base::DictionaryValue* LayerTreeAsJson() const OVERRIDE;
+  virtual base::DictionaryValue* LayerTreeAsJson() const override;
 
  protected:
   NinePatchLayerImpl(LayerTreeImpl* tree_impl, int id);
 
  private:
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
   void CheckGeometryLimitations();
 
diff --git a/cc/layers/nine_patch_layer_impl_unittest.cc b/cc/layers/nine_patch_layer_impl_unittest.cc
index 9d1d870..2b82d48 100644
--- a/cc/layers/nine_patch_layer_impl_unittest.cc
+++ b/cc/layers/nine_patch_layer_impl_unittest.cc
@@ -35,7 +35,6 @@
                               const gfx::Rect& border,
                               bool fill_center,
                               size_t expected_quad_size) {
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   gfx::Rect visible_content_rect(layer_size);
   gfx::Rect expected_remaining(border.x(),
@@ -63,15 +62,14 @@
   layer->SetImageBounds(bitmap_size);
   layer->SetLayout(aperture_rect, border, fill_center);
   AppendQuadsData data;
-  layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  layer->AppendQuads(render_pass.get(), Occlusion(), &data);
 
   // Verify quad rects
   const QuadList& quads = render_pass->quad_list;
   EXPECT_EQ(expected_quad_size, quads.size());
 
   Region remaining(visible_content_rect);
-  for (QuadList::ConstIterator iter = quads.begin(); iter != quads.end();
-       ++iter) {
+  for (auto iter = quads.cbegin(); iter != quads.cend(); ++iter) {
     gfx::Rect quad_rect = iter->rect;
 
     EXPECT_TRUE(visible_content_rect.Contains(quad_rect)) << iter.index();
@@ -90,9 +88,8 @@
   // Verify UV rects
   gfx::Rect bitmap_rect(bitmap_size);
   Region tex_remaining(bitmap_rect);
-  for (QuadList::ConstIterator iter = quads.begin(); iter != quads.end();
-       ++iter) {
-    const TextureDrawQuad* tex_quad = TextureDrawQuad::MaterialCast(&*iter);
+  for (const auto& quad : quads) {
+    const TextureDrawQuad* tex_quad = TextureDrawQuad::MaterialCast(&quad);
     gfx::RectF tex_rect =
         gfx::BoundingRect(tex_quad->uv_top_left, tex_quad->uv_bottom_right);
     tex_rect.Scale(bitmap_size.width(), bitmap_size.height());
diff --git a/cc/layers/painted_scrollbar_layer.h b/cc/layers/painted_scrollbar_layer.h
index cd6a046..8a621e3 100644
--- a/cc/layers/painted_scrollbar_layer.h
+++ b/cc/layers/painted_scrollbar_layer.h
@@ -20,32 +20,32 @@
                                         public ContentsScalingLayer {
  public:
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   static scoped_refptr<PaintedScrollbarLayer> Create(
       scoped_ptr<Scrollbar> scrollbar,
       int scroll_layer_id);
 
-  virtual bool OpacityCanAnimateOnImplThread() const OVERRIDE;
-  virtual ScrollbarLayerInterface* ToScrollbarLayer() OVERRIDE;
+  virtual bool OpacityCanAnimateOnImplThread() const override;
+  virtual ScrollbarLayerInterface* ToScrollbarLayer() override;
 
   // ScrollbarLayerInterface
-  virtual int ScrollLayerId() const OVERRIDE;
-  virtual void SetScrollLayer(int layer_id) OVERRIDE;
-  virtual void SetClipLayer(int layer_id) OVERRIDE;
+  virtual int ScrollLayerId() const override;
+  virtual void SetScrollLayer(int layer_id) override;
+  virtual void SetClipLayer(int layer_id) override;
 
-  virtual ScrollbarOrientation orientation() const OVERRIDE;
+  virtual ScrollbarOrientation orientation() const override;
 
   // Layer interface
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
-  virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
-  virtual void PushScrollClipPropertiesTo(LayerImpl* layer) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
+  virtual void SetLayerTreeHost(LayerTreeHost* host) override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
+  virtual void PushScrollClipPropertiesTo(LayerImpl* layer) override;
   virtual void CalculateContentsScale(float ideal_contents_scale,
                                       float* contents_scale_x,
                                       float* contents_scale_y,
-                                      gfx::Size* content_bounds) OVERRIDE;
+                                      gfx::Size* content_bounds) override;
 
  protected:
   PaintedScrollbarLayer(scoped_ptr<Scrollbar> scrollbar, int scroll_layer_id);
diff --git a/cc/layers/painted_scrollbar_layer_impl.cc b/cc/layers/painted_scrollbar_layer_impl.cc
index 16196dd..dcb1e82 100644
--- a/cc/layers/painted_scrollbar_layer_impl.cc
+++ b/cc/layers/painted_scrollbar_layer_impl.cc
@@ -12,7 +12,7 @@
 #include "cc/quads/texture_draw_quad.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/layer_tree_settings.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 #include "ui/gfx/rect_conversions.h"
 
 namespace cc {
@@ -69,7 +69,7 @@
 
 void PaintedScrollbarLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   bool premultipled_alpha = true;
   bool flipped = false;
@@ -86,10 +86,8 @@
       render_pass, content_bounds(), shared_quad_state, append_quads_data);
 
   gfx::Rect thumb_quad_rect = ComputeThumbQuadRect();
-  Occlusion occlusion =
-      occlusion_tracker.GetCurrentOcclusionForLayer(draw_transform());
   gfx::Rect visible_thumb_quad_rect =
-      occlusion.GetUnoccludedContentRect(thumb_quad_rect);
+      occlusion_in_content_space.GetUnoccludedContentRect(thumb_quad_rect);
 
   ResourceProvider::ResourceId thumb_resource_id =
       layer_tree_impl()->ResourceIdForUIResource(thumb_ui_resource_id_);
@@ -116,7 +114,7 @@
 
   gfx::Rect track_quad_rect = content_bounds_rect;
   gfx::Rect visible_track_quad_rect =
-      occlusion.GetUnoccludedContentRect(track_quad_rect);
+      occlusion_in_content_space.GetUnoccludedContentRect(track_quad_rect);
   if (track_resource_id && !visible_track_quad_rect.IsEmpty()) {
     gfx::Rect opaque_rect(contents_opaque() ? track_quad_rect : gfx::Rect());
     const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
diff --git a/cc/layers/painted_scrollbar_layer_impl.h b/cc/layers/painted_scrollbar_layer_impl.h
index 4ebefb6..1c67e73 100644
--- a/cc/layers/painted_scrollbar_layer_impl.h
+++ b/cc/layers/painted_scrollbar_layer_impl.h
@@ -25,14 +25,14 @@
 
   // LayerImpl implementation.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   virtual bool WillDraw(DrawMode draw_mode,
-                        ResourceProvider* resource_provider) OVERRIDE;
+                        ResourceProvider* resource_provider) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
   void SetThumbThickness(int thumb_thickness);
   void SetThumbLength(int thumb_length);
@@ -52,14 +52,14 @@
                             ScrollbarOrientation orientation);
 
   // ScrollbarLayerImplBase implementation.
-  virtual int ThumbThickness() const OVERRIDE;
-  virtual int ThumbLength() const OVERRIDE;
-  virtual float TrackLength() const OVERRIDE;
-  virtual int TrackStart() const OVERRIDE;
-  virtual bool IsThumbResizable() const OVERRIDE;
+  virtual int ThumbThickness() const override;
+  virtual int ThumbLength() const override;
+  virtual float TrackLength() const override;
+  virtual int TrackStart() const override;
+  virtual bool IsThumbResizable() const override;
 
  private:
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
   UIResourceId track_ui_resource_id_;
   UIResourceId thumb_ui_resource_id_;
diff --git a/cc/layers/picture_image_layer.h b/cc/layers/picture_image_layer.h
index c0c0c84..6f73b42 100644
--- a/cc/layers/picture_image_layer.h
+++ b/cc/layers/picture_image_layer.h
@@ -21,18 +21,18 @@
 
   // Layer implementation.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(
-      LayerTreeImpl* tree_impl) OVERRIDE;
+      LayerTreeImpl* tree_impl) override;
 
   // ContentLayerClient implementation.
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& clip,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE;
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
-  virtual bool FillsBoundsCompletely() const OVERRIDE;
+      ContentLayerClient::GraphicsContextStatus gc_status) override;
+  virtual void DidChangeLayerCanUseLCDText() override {}
+  virtual bool FillsBoundsCompletely() const override;
 
  protected:
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
  private:
   PictureImageLayer();
diff --git a/cc/layers/picture_image_layer_impl.h b/cc/layers/picture_image_layer_impl.h
index cb48cf5..db36a13 100644
--- a/cc/layers/picture_image_layer_impl.h
+++ b/cc/layers/picture_image_layer_impl.h
@@ -18,19 +18,19 @@
   virtual ~PictureImageLayerImpl();
 
   // LayerImpl overrides.
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(
-      LayerTreeImpl* tree_impl) OVERRIDE;
+      LayerTreeImpl* tree_impl) override;
 
  protected:
   PictureImageLayerImpl(LayerTreeImpl* tree_impl, int id);
 
-  virtual bool ShouldAdjustRasterScale() const OVERRIDE;
-  virtual void RecalculateRasterScales() OVERRIDE;
+  virtual bool ShouldAdjustRasterScale() const override;
+  virtual void RecalculateRasterScales() override;
   virtual void GetDebugBorderProperties(
-      SkColor* color, float* width) const OVERRIDE;
+      SkColor* color, float* width) const override;
 
-  virtual void UpdateIdealScales() OVERRIDE;
+  virtual void UpdateIdealScales() override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PictureImageLayerImpl);
diff --git a/cc/layers/picture_image_layer_impl_unittest.cc b/cc/layers/picture_image_layer_impl_unittest.cc
index 831e3b0..5c2ef4e 100644
--- a/cc/layers/picture_image_layer_impl_unittest.cc
+++ b/cc/layers/picture_image_layer_impl_unittest.cc
@@ -12,7 +12,6 @@
 #include "cc/test/fake_output_surface.h"
 #include "cc/test/fake_picture_layer_tiling_client.h"
 #include "cc/test/impl_side_painting_settings.h"
-#include "cc/test/mock_occlusion_tracker.h"
 #include "cc/test/test_shared_bitmap_manager.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -147,11 +146,10 @@
   // Draw.
   active_layer->draw_properties().visible_content_rect =
       gfx::Rect(active_layer->bounds());
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   active_layer->WillDraw(DRAW_MODE_SOFTWARE, NULL);
-  active_layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer->DidDraw(NULL);
 
   EXPECT_EQ(DrawQuad::TILED_CONTENT, render_pass->quad_list.front()->material);
diff --git a/cc/layers/picture_layer.h b/cc/layers/picture_layer.h
index 80bb4d8..978ec40 100644
--- a/cc/layers/picture_layer.h
+++ b/cc/layers/picture_layer.h
@@ -25,18 +25,18 @@
 
   // Layer interface.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(
-      LayerTreeImpl* tree_impl) OVERRIDE;
-  virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
-  virtual void SetNeedsDisplayRect(const gfx::RectF& layer_rect) OVERRIDE;
+      LayerTreeImpl* tree_impl) override;
+  virtual void SetLayerTreeHost(LayerTreeHost* host) override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
+  virtual void SetNeedsDisplayRect(const gfx::RectF& layer_rect) override;
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
-  virtual void SetIsMask(bool is_mask) OVERRIDE;
-  virtual bool SupportsLCDText() const OVERRIDE;
-  virtual skia::RefPtr<SkPicture> GetPicture() const OVERRIDE;
-  virtual bool IsSuitableForGpuRasterization() const OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
+  virtual void SetIsMask(bool is_mask) override;
+  virtual bool SupportsLCDText() const override;
+  virtual skia::RefPtr<SkPicture> GetPicture() const override;
+  virtual bool IsSuitableForGpuRasterization() const override;
 
-  virtual void RunMicroBenchmark(MicroBenchmark* benchmark) OVERRIDE;
+  virtual void RunMicroBenchmark(MicroBenchmark* benchmark) override;
 
   ContentLayerClient* client() { return client_; }
 
@@ -48,7 +48,7 @@
   explicit PictureLayer(ContentLayerClient* client);
   virtual ~PictureLayer();
 
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
   void UpdateCanUseLCDText();
 
  private:
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index 8a78bb1..de176c3 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -25,7 +25,7 @@
 #include "cc/quads/tile_draw_quad.h"
 #include "cc/resources/tile_manager.h"
 #include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 #include "ui/gfx/quad_f.h"
 #include "ui/gfx/rect_conversions.h"
 #include "ui/gfx/size_conversions.h"
@@ -150,10 +150,9 @@
   needs_push_properties_ = true;
 }
 
-void PictureLayerImpl::AppendQuads(
-    RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
-    AppendQuadsData* append_quads_data) {
+void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
+                                   const Occlusion& occlusion_in_content_space,
+                                   AppendQuadsData* append_quads_data) {
   DCHECK(!needs_post_commit_initialization_);
 
   SharedQuadState* shared_quad_state =
@@ -165,14 +164,12 @@
     AppendDebugBorderQuad(
         render_pass, content_bounds(), shared_quad_state, append_quads_data);
 
-    SolidColorLayerImpl::AppendSolidQuads(
-        render_pass,
-        occlusion_tracker,
-        shared_quad_state,
-        content_bounds(),
-        draw_properties().target_space_transform,
-        pile_->solid_color(),
-        append_quads_data);
+    SolidColorLayerImpl::AppendSolidQuads(render_pass,
+                                          occlusion_in_content_space,
+                                          shared_quad_state,
+                                          content_bounds(),
+                                          pile_->solid_color(),
+                                          append_quads_data);
     return;
   }
 
@@ -182,13 +179,12 @@
                               SK_MScalar1 / max_contents_scale);
   gfx::Size scaled_content_bounds =
       gfx::ToCeiledSize(gfx::ScaleSize(content_bounds(), max_contents_scale));
-
   gfx::Rect scaled_visible_content_rect =
       gfx::ScaleToEnclosingRect(visible_content_rect(), max_contents_scale);
   scaled_visible_content_rect.Intersect(gfx::Rect(scaled_content_bounds));
-
-  Occlusion occlusion =
-      occlusion_tracker.GetCurrentOcclusionForLayer(scaled_draw_transform);
+  Occlusion scaled_occlusion =
+      occlusion_in_content_space.GetOcclusionWithGivenDrawTransform(
+          scaled_draw_transform);
 
   shared_quad_state->SetAll(scaled_draw_transform,
                             scaled_content_bounds,
@@ -211,7 +207,7 @@
     gfx::Rect geometry_rect = scaled_visible_content_rect;
     gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect();
     gfx::Rect visible_geometry_rect =
-        occlusion.GetUnoccludedContentRect(geometry_rect);
+        scaled_occlusion.GetUnoccludedContentRect(geometry_rect);
     if (visible_geometry_rect.IsEmpty())
       return;
 
@@ -306,7 +302,7 @@
     gfx::Rect geometry_rect = iter.geometry_rect();
     gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect();
     gfx::Rect visible_geometry_rect =
-        occlusion.GetUnoccludedContentRect(geometry_rect);
+        scaled_occlusion.GetUnoccludedContentRect(geometry_rect);
     if (visible_geometry_rect.IsEmpty())
       continue;
 
@@ -449,17 +445,9 @@
 
   DoPostCommitInitializationIfNeeded();
 
-  // Any draw properties derived from |transform|, |viewport|, and |clip|
-  // parameters in LayerTreeHostImpl::SetExternalDrawConstraints are not valid
-  // for prioritizing tiles during resourceless software draws. This is because
-  // resourceless software draws can have wildly different transforms/viewports
-  // from regular draws.
   if (!resourceless_software_draw) {
     visible_rect_for_tile_priority_ = visible_content_rect();
   }
-  viewport_rect_for_tile_priority_ =
-      layer_tree_impl()->ViewportRectForTilePriority();
-  screen_space_transform_for_tile_priority_ = screen_space_transform();
 
   if (!CanHaveTilings()) {
     ideal_page_scale_ = 0.f;
@@ -537,20 +525,21 @@
 
 gfx::Rect PictureLayerImpl::GetViewportForTilePriorityInContentSpace() const {
   // If visible_rect_for_tile_priority_ is empty or
-  // viewport_rect_for_tile_priority_ is set to be different from the device
+  // viewport_rect_for_tile_priority is set to be different from the device
   // viewport, try to inverse project the viewport into layer space and use
   // that. Otherwise just use visible_rect_for_tile_priority_
   gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_;
+  gfx::Rect viewport_rect_for_tile_priority =
+      layer_tree_impl()->ViewportRectForTilePriority();
 
   if (visible_rect_in_content_space.IsEmpty() ||
-      layer_tree_impl()->DeviceViewport() != viewport_rect_for_tile_priority_) {
+      layer_tree_impl()->DeviceViewport() != viewport_rect_for_tile_priority) {
     gfx::Transform view_to_layer(gfx::Transform::kSkipInitialization);
-
-    if (screen_space_transform_for_tile_priority_.GetInverse(&view_to_layer)) {
+    if (screen_space_transform().GetInverse(&view_to_layer)) {
       // Transform from view space to content space.
       visible_rect_in_content_space =
           gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
-              view_to_layer, viewport_rect_for_tile_priority_));
+              view_to_layer, viewport_rect_for_tile_priority));
     }
   }
   return visible_rect_in_content_space;
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h
index a0cc434..98b0a6e 100644
--- a/cc/layers/picture_layer_impl.h
+++ b/cc/layers/picture_layer_impl.h
@@ -102,47 +102,47 @@
   virtual ~PictureLayerImpl();
 
   // LayerImpl overrides.
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
   virtual void UpdateTiles(const Occlusion& occlusion_in_content_space,
-                           bool resourceless_software_draw) OVERRIDE;
-  virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE;
-  virtual void DidBecomeActive() OVERRIDE;
-  virtual void DidBeginTracing() OVERRIDE;
-  virtual void ReleaseResources() OVERRIDE;
-  virtual skia::RefPtr<SkPicture> GetPicture() OVERRIDE;
+                           bool resourceless_software_draw) override;
+  virtual void NotifyTileStateChanged(const Tile* tile) override;
+  virtual void DidBecomeActive() override;
+  virtual void DidBeginTracing() override;
+  virtual void ReleaseResources() override;
+  virtual skia::RefPtr<SkPicture> GetPicture() override;
 
   // PictureLayerTilingClient overrides.
   virtual scoped_refptr<Tile> CreateTile(
     PictureLayerTiling* tiling,
-    const gfx::Rect& content_rect) OVERRIDE;
-  virtual PicturePileImpl* GetPile() OVERRIDE;
+    const gfx::Rect& content_rect) override;
+  virtual PicturePileImpl* GetPile() override;
   virtual gfx::Size CalculateTileSize(
-      const gfx::Size& content_bounds) const OVERRIDE;
-  virtual const Region* GetInvalidation() OVERRIDE;
+      const gfx::Size& content_bounds) const override;
+  virtual const Region* GetInvalidation() override;
   virtual const PictureLayerTiling* GetTwinTiling(
-      const PictureLayerTiling* tiling) const OVERRIDE;
+      const PictureLayerTiling* tiling) const override;
   virtual PictureLayerTiling* GetRecycledTwinTiling(
-      const PictureLayerTiling* tiling) OVERRIDE;
-  virtual size_t GetMaxTilesForInterestArea() const OVERRIDE;
-  virtual float GetSkewportTargetTimeInSeconds() const OVERRIDE;
-  virtual int GetSkewportExtrapolationLimitInContentPixels() const OVERRIDE;
-  virtual WhichTree GetTree() const OVERRIDE;
+      const PictureLayerTiling* tiling) override;
+  virtual size_t GetMaxTilesForInterestArea() const override;
+  virtual float GetSkewportTargetTimeInSeconds() const override;
+  virtual int GetSkewportExtrapolationLimitInContentPixels() const override;
+  virtual WhichTree GetTree() const override;
 
   // PushPropertiesTo active tree => pending tree.
   void SyncTiling(const PictureLayerTiling* tiling);
 
   // Mask-related functions.
-  virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
+  virtual ResourceProvider::ResourceId ContentsResourceId() const override;
 
-  virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
+  virtual size_t GPUMemoryUsageInBytes() const override;
 
-  virtual void RunMicroBenchmark(MicroBenchmarkImpl* benchmark) OVERRIDE;
+  virtual void RunMicroBenchmark(MicroBenchmarkImpl* benchmark) override;
 
   // Functions used by tile manager.
   PictureLayerImpl* GetTwinLayer() { return twin_layer_; }
@@ -190,10 +190,10 @@
   bool ShouldAdjustRasterScaleDuringScaleAnimations() const;
 
   virtual void GetDebugBorderProperties(
-      SkColor* color, float* width) const OVERRIDE;
+      SkColor* color, float* width) const override;
   virtual void GetAllTilesForTracing(
-      std::set<const Tile*>* tiles) const OVERRIDE;
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+      std::set<const Tile*>* tiles) const override;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
   virtual void UpdateIdealScales();
   float MaximumTilingContentsScale() const;
@@ -222,11 +222,13 @@
   // after a CalculateContentsScale/ManageTilings.
   bool should_update_tile_priorities_;
 
-  // Save a copy of the visible rect and viewport size of the last frame that
-  // has a valid viewport for prioritizing tiles.
+  // Any draw properties derived from |transform|, |viewport|, and |clip|
+  // parameters in LayerTreeHostImpl::SetExternalDrawConstraints are not valid
+  // for prioritizing tiles during resourceless software draws. This is because
+  // resourceless software draws can have wildly different transforms/viewports
+  // from regular draws. Save a copy of the required draw properties of the last
+  // frame that has a valid viewport for prioritizing tiles.
   gfx::Rect visible_rect_for_tile_priority_;
-  gfx::Rect viewport_rect_for_tile_priority_;
-  gfx::Transform screen_space_transform_for_tile_priority_;
 
   friend class PictureLayer;
   DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
diff --git a/cc/layers/picture_layer_impl_perftest.cc b/cc/layers/picture_layer_impl_perftest.cc
index c26b07d..7d87424 100644
--- a/cc/layers/picture_layer_impl_perftest.cc
+++ b/cc/layers/picture_layer_impl_perftest.cc
@@ -45,7 +45,7 @@
                base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
                kTimeCheckInterval) {}
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     host_impl_.InitializeRenderer(FakeOutputSurface::Create3d());
   }
 
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 20e61dc..72794b3 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -38,7 +38,7 @@
  public:
   explicit MockCanvas(int w, int h) : SkCanvas(w, h) {}
 
-  virtual void drawRect(const SkRect& rect, const SkPaint& paint) OVERRIDE {
+  virtual void drawRect(const SkRect& rect, const SkPaint& paint) override {
     // Capture calls before SkCanvas quickReject() kicks in.
     rects_.push_back(rect);
   }
@@ -71,7 +71,7 @@
   virtual ~PictureLayerImplTest() {
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     InitializeRenderer();
   }
 
@@ -353,18 +353,14 @@
                                         viewport_rect_for_tile_priority,
                                         transform_for_tile_priority,
                                         resourceless_software_draw);
-  active_layer_->draw_properties().visible_content_rect = viewport;
-  active_layer_->draw_properties().screen_space_transform = transform;
-  active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
+  host_impl_.active_tree()->UpdateDrawProperties();
 
   gfx::Rect viewport_rect_for_tile_priority_in_view_space =
       viewport_rect_for_tile_priority;
 
-  // Verify the viewport rect for tile priority is used in picture layer impl.
-  EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(),
-            viewport_rect_for_tile_priority_in_view_space);
-
   // Verify the viewport rect for tile priority is used in picture layer tiling.
+  EXPECT_EQ(viewport_rect_for_tile_priority_in_view_space,
+            active_layer_->GetViewportForTilePriorityInContentSpace());
   PictureLayerTilingSet* tilings = active_layer_->tilings();
   for (size_t i = 0; i < tilings->num_tilings(); i++) {
     PictureLayerTiling* tiling = tilings->tiling_at(i);
@@ -391,9 +387,7 @@
                                         viewport_rect_for_tile_priority,
                                         transform_for_tile_priority,
                                         resourceless_software_draw);
-  active_layer_->draw_properties().visible_content_rect = viewport;
-  active_layer_->draw_properties().screen_space_transform = transform;
-  active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
+  host_impl_.active_tree()->UpdateDrawProperties();
 
   gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization);
   bool success = transform_for_tile_priority.GetInverse(&screen_to_view);
@@ -407,10 +401,8 @@
       gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
           screen_to_view, viewport_rect_for_tile_priority));
 
-  // Verify the viewport rect for tile priority is used in PictureLayerImpl.
-  EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(),
-            viewport_rect_for_tile_priority_in_view_space);
-
+  EXPECT_EQ(viewport_rect_for_tile_priority_in_view_space,
+            active_layer_->GetViewportForTilePriorityInContentSpace());
   tilings = active_layer_->tilings();
   for (size_t i = 0; i < tilings->num_tilings(); i++) {
     PictureLayerTiling* tiling = tilings->tiling_at(i);
@@ -460,11 +452,8 @@
   gfx::Rect visible_rect_for_tile_priority =
       active_layer_->visible_rect_for_tile_priority();
   EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
-  gfx::Rect viewport_rect_for_tile_priority =
-      active_layer_->viewport_rect_for_tile_priority();
-  EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty());
   gfx::Transform screen_space_transform_for_tile_priority =
-      active_layer_->screen_space_transform_for_tile_priority();
+      active_layer_->screen_space_transform();
 
   // Expand viewport and set it as invalid for prioritizing tiles.
   // Should update viewport and transform, but not update visible rect.
@@ -484,10 +473,9 @@
                                         resourceless_software_draw);
   active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
 
-  // Viewport and transform for tile priority are updated.
-  EXPECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority());
-  EXPECT_TRANSFORMATION_MATRIX_EQ(
-      transform, active_layer_->screen_space_transform_for_tile_priority());
+  // Transform for tile priority is updated.
+  EXPECT_TRANSFORMATION_MATRIX_EQ(transform,
+                                  active_layer_->screen_space_transform());
   // Visible rect for tile priority retains old value.
   EXPECT_EQ(visible_rect_for_tile_priority,
             active_layer_->visible_rect_for_tile_priority());
@@ -505,13 +493,9 @@
                                         resourceless_software_draw);
   active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
 
-  EXPECT_TRANSFORMATION_MATRIX_EQ(
-      transform, active_layer_->screen_space_transform_for_tile_priority());
+  EXPECT_TRANSFORMATION_MATRIX_EQ(transform,
+                                  active_layer_->screen_space_transform());
   EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
-
-  // Match the reverse translate in |transform|.
-  EXPECT_EQ(viewport - gfx::Vector2d(1, 1),
-            active_layer_->viewport_rect_for_tile_priority());
 }
 
 TEST_F(PictureLayerImplTest, ClonePartialInvalidation) {
@@ -1377,7 +1361,6 @@
 }
 
 TEST_F(PictureLayerImplTest, DisallowTileDrawQuads) {
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
   gfx::Size tile_size(400, 400);
@@ -1399,7 +1382,7 @@
 
   AppendQuadsData data;
   active_layer_->WillDraw(DRAW_MODE_RESOURCELESS_SOFTWARE, NULL);
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer_->DidDraw(NULL);
 
   ASSERT_EQ(1U, render_pass->quad_list.size());
@@ -1580,11 +1563,10 @@
   host_impl_.active_tree()->UpdateDrawProperties();
   active_layer_->draw_properties().visible_content_rect = visible_content_rect;
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   active_layer_->WillDraw(DRAW_MODE_SOFTWARE, NULL);
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer_->DidDraw(NULL);
 
   // All tiles in activation rect is ready to draw.
@@ -1615,11 +1597,10 @@
       active_layer_->tilings()->tiling_at(0)->AllTilesForTesting();
   host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   active_layer_->WillDraw(DRAW_MODE_SOFTWARE, NULL);
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer_->DidDraw(NULL);
 
   // All high res tiles drew, nothing was incomplete.
@@ -1657,11 +1638,10 @@
       active_layer_->tilings()->tiling_at(1)->AllTilesForTesting();
   host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(low_tiles);
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   active_layer_->WillDraw(DRAW_MODE_SOFTWARE, NULL);
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer_->DidDraw(NULL);
 
   // The missing high res tile was replaced by a low res tile.
@@ -1719,11 +1699,10 @@
       active_layer_->HighResTiling()->AllTilesForTesting();
   host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(high_tiles);
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   active_layer_->WillDraw(DRAW_MODE_SOFTWARE, NULL);
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer_->DidDraw(NULL);
 
   // All high res tiles drew, and the one ideal res tile drew.
@@ -2237,14 +2216,14 @@
 
 class DeferredInitPictureLayerImplTest : public PictureLayerImplTest {
  public:
-  virtual void InitializeRenderer() OVERRIDE {
+  virtual void InitializeRenderer() override {
     bool delegated_rendering = false;
     host_impl_.InitializeRenderer(FakeOutputSurface::CreateDeferredGL(
         scoped_ptr<SoftwareOutputDevice>(new SoftwareOutputDevice),
         delegated_rendering));
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     PictureLayerImplTest::SetUp();
 
     // Create some default active and pending trees.
@@ -3197,11 +3176,8 @@
   gfx::Rect visible_rect_for_tile_priority =
       active_layer_->visible_rect_for_tile_priority();
   EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
-  gfx::Rect viewport_rect_for_tile_priority =
-      active_layer_->viewport_rect_for_tile_priority();
-  EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty());
   gfx::Transform screen_space_transform_for_tile_priority =
-      active_layer_->screen_space_transform_for_tile_priority();
+      active_layer_->screen_space_transform();
 
   // Expand viewport and set it as invalid for prioritizing tiles.
   // Should update viewport and transform, but not update visible rect.
@@ -3221,10 +3197,9 @@
                                         resourceless_software_draw);
   active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
 
-  // Viewport and transform for tile priority are updated.
-  EXPECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority());
-  EXPECT_TRANSFORMATION_MATRIX_EQ(
-      transform, active_layer_->screen_space_transform_for_tile_priority());
+  // Transform for tile priority is updated.
+  EXPECT_TRANSFORMATION_MATRIX_EQ(transform,
+                                  active_layer_->screen_space_transform());
   // Visible rect for tile priority retains old value.
   EXPECT_EQ(visible_rect_for_tile_priority,
             active_layer_->visible_rect_for_tile_priority());
@@ -3242,13 +3217,9 @@
                                         resourceless_software_draw);
   active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
 
-  EXPECT_TRANSFORMATION_MATRIX_EQ(
-      transform, active_layer_->screen_space_transform_for_tile_priority());
+  EXPECT_TRANSFORMATION_MATRIX_EQ(transform,
+                                  active_layer_->screen_space_transform());
   EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
-
-  // Match the reverse translate in |transform|.
-  EXPECT_EQ(viewport - gfx::Vector2d(1, 1),
-            active_layer_->viewport_rect_for_tile_priority());
 }
 
 TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) {
@@ -3468,7 +3439,6 @@
 }
 
 TEST_F(PictureLayerImplTest, SharedQuadStateContainsMaxTilingScale) {
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
   gfx::Size tile_size(400, 400);
@@ -3494,7 +3464,7 @@
                               SK_MScalar1 / max_contents_scale);
 
   AppendQuadsData data;
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
 
   // SharedQuadState should have be of size 1, as we are doing AppenQuad once.
   EXPECT_EQ(1u, render_pass->shared_quad_state_list.size());
@@ -3564,7 +3534,7 @@
  public:
   PictureLayerImplTestWithDelegatingRenderer() : PictureLayerImplTest() {}
 
-  virtual void InitializeRenderer() OVERRIDE {
+  virtual void InitializeRenderer() override {
     host_impl_.InitializeRenderer(FakeOutputSurface::CreateDelegating3d());
   }
 };
@@ -3603,11 +3573,10 @@
   host_impl_.SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
   host_impl_.ManageTiles();
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   active_layer_->WillDraw(DRAW_MODE_HARDWARE, NULL);
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer_->DidDraw(NULL);
 
   // Even when OOM, quads should be produced, and should be different material
@@ -4314,11 +4283,10 @@
     host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
   }
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
   AppendQuadsData data;
   active_layer_->WillDraw(DRAW_MODE_SOFTWARE, NULL);
-  active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  active_layer_->AppendQuads(render_pass.get(), Occlusion(), &data);
   active_layer_->DidDraw(NULL);
 
   DrawQuad::Material expected = test_for_solid
diff --git a/cc/layers/picture_layer_unittest.cc b/cc/layers/picture_layer_unittest.cc
index 331193f..0e3d8fa 100644
--- a/cc/layers/picture_layer_unittest.cc
+++ b/cc/layers/picture_layer_unittest.cc
@@ -23,9 +23,9 @@
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& clip,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {}
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
-  virtual bool FillsBoundsCompletely() const OVERRIDE {
+      ContentLayerClient::GraphicsContextStatus gc_status) override {}
+  virtual void DidChangeLayerCanUseLCDText() override {}
+  virtual bool FillsBoundsCompletely() const override {
     return false;
   };
 };
diff --git a/cc/layers/render_surface_unittest.cc b/cc/layers/render_surface_unittest.cc
index f9ac05b..b57152a 100644
--- a/cc/layers/render_surface_unittest.cc
+++ b/cc/layers/render_surface_unittest.cc
@@ -135,7 +135,7 @@
 
 class TestRenderPassSink : public RenderPassSink {
  public:
-  virtual void AppendRenderPass(scoped_ptr<RenderPass> render_pass) OVERRIDE {
+  virtual void AppendRenderPass(scoped_ptr<RenderPass> render_pass) override {
     render_passes_.push_back(render_pass.Pass());
   }
 
diff --git a/cc/layers/scrollbar_layer_impl_base.cc b/cc/layers/scrollbar_layer_impl_base.cc
index c1878b9..204b491 100644
--- a/cc/layers/scrollbar_layer_impl_base.cc
+++ b/cc/layers/scrollbar_layer_impl_base.cc
@@ -92,7 +92,7 @@
   RegisterScrollbarWithLayers(
       this, clip_layer_, scroll_layer_, &LayerImpl::AddScrollbar);
 
-  ScrollbarParametersDidChange();
+  ScrollbarParametersDidChange(false);
 }
 
 gfx::Rect ScrollbarLayerImplBase::ScrollbarLayerRectToContentRect(
@@ -247,11 +247,11 @@
   return ScrollbarLayerRectToContentRect(thumb_rect);
 }
 
-void ScrollbarLayerImplBase::ScrollbarParametersDidChange() {
+void ScrollbarLayerImplBase::ScrollbarParametersDidChange(bool on_resize) {
   if (!clip_layer_ || !scroll_layer_)
     return;
 
-  scroll_layer_->SetScrollbarPosition(this, clip_layer_);
+  scroll_layer_->SetScrollbarPosition(this, clip_layer_, on_resize);
 }
 
 }  // namespace cc
diff --git a/cc/layers/scrollbar_layer_impl_base.h b/cc/layers/scrollbar_layer_impl_base.h
index 7017ba2..7d37acc 100644
--- a/cc/layers/scrollbar_layer_impl_base.h
+++ b/cc/layers/scrollbar_layer_impl_base.h
@@ -44,8 +44,8 @@
     return is_left_side_vertical_scrollbar_;
   }
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
-  virtual ScrollbarLayerImplBase* ToScrollbarLayer() OVERRIDE;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
+  virtual ScrollbarLayerImplBase* ToScrollbarLayer() override;
   void PushScrollClipPropertiesTo(LayerImpl* layer);
 
   bool SetVisibleToTotalLengthRatio(float ratio);
@@ -56,7 +56,7 @@
   }
   bool SetThumbThicknessScaleFactor(float thumb_thickness_scale_factor);
 
-  void ScrollbarParametersDidChange();
+  void ScrollbarParametersDidChange(bool on_resize);
 
  protected:
   ScrollbarLayerImplBase(LayerTreeImpl* tree_impl,
diff --git a/cc/layers/scrollbar_layer_unittest.cc b/cc/layers/scrollbar_layer_unittest.cc
index 44158d5..9db5d3b 100644
--- a/cc/layers/scrollbar_layer_unittest.cc
+++ b/cc/layers/scrollbar_layer_unittest.cc
@@ -193,7 +193,7 @@
     root_layer_impl = root_clip_layer_impl->children()[0];          \
     scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( \
         root_layer_impl->children()[1]);                            \
-    scrollbar_layer_impl->ScrollbarParametersDidChange();           \
+    scrollbar_layer_impl->ScrollbarParametersDidChange(false);      \
   } while (false)
 
 TEST(ScrollbarLayerTest, UpdatePropertiesOfScrollBarWhenThumbRemoved) {
@@ -345,11 +345,9 @@
 
   // Thickness should be overridden to 3.
   {
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
     AppendQuadsData data;
-    scrollbar_layer_impl->AppendQuads(
-        render_pass.get(), occlusion_tracker, &data);
+    scrollbar_layer_impl->AppendQuads(render_pass.get(), Occlusion(), &data);
 
     const QuadList& quads = render_pass->quad_list;
     ASSERT_EQ(1u, quads.size());
@@ -361,11 +359,9 @@
   scrollbar_layer_impl->draw_properties().contents_scale_x = 2.f;
   scrollbar_layer_impl->draw_properties().contents_scale_y = 2.f;
   {
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
     AppendQuadsData data;
-    scrollbar_layer_impl->AppendQuads(
-        render_pass.get(), occlusion_tracker, &data);
+    scrollbar_layer_impl->AppendQuads(render_pass.get(), Occlusion(), &data);
 
     const QuadList& quads = render_pass->quad_list;
     ASSERT_EQ(1u, quads.size());
@@ -379,11 +375,9 @@
   // current viewport state.
   scrollbar_layer_impl->SetVisibleToTotalLengthRatio(0.2f);
   {
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
     AppendQuadsData data;
-    scrollbar_layer_impl->AppendQuads(
-        render_pass.get(), occlusion_tracker, &data);
+    scrollbar_layer_impl->AppendQuads(render_pass.get(), Occlusion(), &data);
 
     const QuadList& quads = render_pass->quad_list;
     ASSERT_EQ(1u, quads.size());
@@ -395,11 +389,9 @@
   scrollbar_layer_impl->SetCurrentPos(0.f);
   scrollbar_layer_impl->SetMaximum(0);
   {
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
     AppendQuadsData data;
-    scrollbar_layer_impl->AppendQuads(
-        render_pass.get(), occlusion_tracker, &data);
+    scrollbar_layer_impl->AppendQuads(render_pass.get(), Occlusion(), &data);
 
     const QuadList& quads = render_pass->quad_list;
     ASSERT_EQ(1u, quads.size());
@@ -455,12 +447,10 @@
   scrollbar_layer_impl->SetMaximum(8);
 
   {
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
-    scrollbar_layer_impl->AppendQuads(
-        render_pass.get(), occlusion_tracker, &data);
+    scrollbar_layer_impl->AppendQuads(render_pass.get(), Occlusion(), &data);
 
     const QuadList& quads = render_pass->quad_list;
     ASSERT_EQ(1u, quads.size());
@@ -578,7 +568,7 @@
 
   void SetScrollbarBounds(const gfx::Size& bounds) { bounds_ = bounds; }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     scroll_layer_ = Layer::Create();
     layer_tree_host()->root_layer()->AddChild(scroll_layer_);
 
@@ -593,7 +583,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     const int kMaxTextureSize =
         layer_tree_host()->GetRendererCapabilities().max_texture_size;
 
@@ -608,7 +598,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   scoped_refptr<PaintedScrollbarLayer> scrollbar_layer_;
@@ -645,7 +635,7 @@
     InitializeSingleThreaded(client, base::MessageLoopProxy::current());
   }
 
-  virtual UIResourceId CreateUIResource(UIResourceClient* content) OVERRIDE {
+  virtual UIResourceId CreateUIResource(UIResourceClient* content) override {
     total_ui_resource_created_++;
     UIResourceId nid = next_id_++;
     ui_resource_bitmap_map_.insert(
@@ -654,7 +644,7 @@
   }
 
   // Deletes a UI resource.  May safely be called more than once.
-  virtual void DeleteUIResource(UIResourceId id) OVERRIDE {
+  virtual void DeleteUIResource(UIResourceId id) override {
     UIResourceBitmapMap::iterator iter = ui_resource_bitmap_map_.find(id);
     if (iter != ui_resource_bitmap_map_.end()) {
       ui_resource_bitmap_map_.erase(iter);
diff --git a/cc/layers/solid_color_layer.h b/cc/layers/solid_color_layer.h
index d391070..987c005 100644
--- a/cc/layers/solid_color_layer.h
+++ b/cc/layers/solid_color_layer.h
@@ -18,9 +18,9 @@
   static scoped_refptr<SolidColorLayer> Create();
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
-  virtual void SetBackgroundColor(SkColor color) OVERRIDE;
+  virtual void SetBackgroundColor(SkColor color) override;
 
  protected:
   SolidColorLayer();
diff --git a/cc/layers/solid_color_layer_impl.cc b/cc/layers/solid_color_layer_impl.cc
index 618ea53..c8ddc7d 100644
--- a/cc/layers/solid_color_layer_impl.cc
+++ b/cc/layers/solid_color_layer_impl.cc
@@ -8,7 +8,7 @@
 
 #include "cc/layers/append_quads_data.h"
 #include "cc/quads/solid_color_draw_quad.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 
 namespace cc {
 
@@ -29,15 +29,11 @@
 
 void SolidColorLayerImpl::AppendSolidQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     SharedQuadState* shared_quad_state,
     const gfx::Size& content_bounds,
-    const gfx::Transform& target_space_transform,
     SkColor color,
     AppendQuadsData* append_quads_data) {
-  Occlusion occlusion =
-      occlusion_tracker.GetCurrentOcclusionForLayer(target_space_transform);
-
   // We create a series of smaller quads instead of just one large one so that
   // the culler can reduce the total pixels drawn.
   int width = content_bounds.width();
@@ -49,7 +45,7 @@
                           std::min(width - x, kSolidQuadTileSize),
                           std::min(height - y, kSolidQuadTileSize));
       gfx::Rect visible_quad_rect =
-          occlusion.GetUnoccludedContentRect(quad_rect);
+          occlusion_in_content_space.GetUnoccludedContentRect(quad_rect);
       if (visible_quad_rect.IsEmpty())
         continue;
 
@@ -66,7 +62,7 @@
 
 void SolidColorLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   SharedQuadState* shared_quad_state =
       render_pass->CreateAndAppendSharedQuadState();
@@ -76,10 +72,9 @@
       render_pass, content_bounds(), shared_quad_state, append_quads_data);
 
   AppendSolidQuads(render_pass,
-                   occlusion_tracker,
+                   occlusion_in_content_space,
                    shared_quad_state,
                    content_bounds(),
-                   draw_properties().target_space_transform,
                    background_color(),
                    append_quads_data);
 }
diff --git a/cc/layers/solid_color_layer_impl.h b/cc/layers/solid_color_layer_impl.h
index e59db0f..0116479 100644
--- a/cc/layers/solid_color_layer_impl.h
+++ b/cc/layers/solid_color_layer_impl.h
@@ -18,29 +18,27 @@
     return make_scoped_ptr(new SolidColorLayerImpl(tree_impl, id));
   }
 
-  static void AppendSolidQuads(
-      RenderPass* render_pass,
-      const OcclusionTracker<LayerImpl>& occlusion_tracker,
-      SharedQuadState* shared_quad_state,
-      const gfx::Size& content_bounds,
-      const gfx::Transform& target_space_transform,
-      SkColor color,
-      AppendQuadsData* append_quads_data);
+  static void AppendSolidQuads(RenderPass* render_pass,
+                               const Occlusion& occlusion_in_content_space,
+                               SharedQuadState* shared_quad_state,
+                               const gfx::Size& content_bounds,
+                               SkColor color,
+                               AppendQuadsData* append_quads_data);
 
   virtual ~SolidColorLayerImpl();
 
   // LayerImpl overrides.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
  protected:
   SolidColorLayerImpl(LayerTreeImpl* tree_impl, int id);
 
  private:
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
   DISALLOW_COPY_AND_ASSIGN(SolidColorLayerImpl);
 };
diff --git a/cc/layers/solid_color_layer_impl_unittest.cc b/cc/layers/solid_color_layer_impl_unittest.cc
index 3e5f453..768fae4 100644
--- a/cc/layers/solid_color_layer_impl_unittest.cc
+++ b/cc/layers/solid_color_layer_impl_unittest.cc
@@ -21,7 +21,6 @@
 namespace {
 
 TEST(SolidColorLayerImplTest, VerifyTilingCompleteAndNoOverlap) {
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
   gfx::Size layer_size = gfx::Size(800, 600);
@@ -39,7 +38,7 @@
   layer->draw_properties().render_target = layer.get();
 
   AppendQuadsData data;
-  layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  layer->AppendQuads(render_pass.get(), Occlusion(), &data);
 
   LayerTestCommon::VerifyQuadsExactlyCoverRect(render_pass->quad_list,
                                                visible_content_rect);
@@ -48,7 +47,6 @@
 TEST(SolidColorLayerImplTest, VerifyCorrectBackgroundColorInQuad) {
   SkColor test_color = 0xFFA55AFF;
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
   gfx::Size layer_size = gfx::Size(100, 100);
@@ -67,7 +65,7 @@
   layer->draw_properties().render_target = layer.get();
 
   AppendQuadsData data;
-  layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  layer->AppendQuads(render_pass.get(), Occlusion(), &data);
 
   ASSERT_EQ(render_pass->quad_list.size(), 1U);
   EXPECT_EQ(
@@ -78,7 +76,6 @@
 TEST(SolidColorLayerImplTest, VerifyCorrectOpacityInQuad) {
   const float opacity = 0.5f;
 
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
   gfx::Size layer_size = gfx::Size(100, 100);
@@ -97,7 +94,7 @@
   layer->draw_properties().render_target = layer.get();
 
   AppendQuadsData data;
-  layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  layer->AppendQuads(render_pass.get(), Occlusion(), &data);
 
   ASSERT_EQ(render_pass->quad_list.size(), 1U);
   EXPECT_EQ(opacity,
@@ -141,11 +138,10 @@
     // should be the full tile.
     layer_impl->draw_properties().opacity = 1;
 
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
-    layer_impl->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer_impl->AppendQuads(render_pass.get(), Occlusion(), &data);
 
     ASSERT_EQ(render_pass->quad_list.size(), 1U);
     EXPECT_EQ(visible_content_rect.ToString(),
@@ -168,11 +164,10 @@
     // should be empty.
     layer_impl->draw_properties().opacity = 1;
 
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
-    layer_impl->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer_impl->AppendQuads(render_pass.get(), Occlusion(), &data);
 
     ASSERT_EQ(render_pass->quad_list.size(), 1U);
     EXPECT_EQ(gfx::Rect().ToString(),
diff --git a/cc/layers/solid_color_scrollbar_layer.h b/cc/layers/solid_color_scrollbar_layer.h
index 654a6a6..de46c54 100644
--- a/cc/layers/solid_color_scrollbar_layer.h
+++ b/cc/layers/solid_color_scrollbar_layer.h
@@ -15,7 +15,7 @@
                                            public Layer {
  public:
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   static scoped_refptr<SolidColorScrollbarLayer> Create(
       ScrollbarOrientation orientation,
@@ -25,20 +25,20 @@
       int scroll_layer_id);
 
   // Layer overrides.
-  virtual bool OpacityCanAnimateOnImplThread() const OVERRIDE;
-  virtual ScrollbarLayerInterface* ToScrollbarLayer() OVERRIDE;
+  virtual bool OpacityCanAnimateOnImplThread() const override;
+  virtual ScrollbarLayerInterface* ToScrollbarLayer() override;
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
-  virtual void PushScrollClipPropertiesTo(LayerImpl* layer) OVERRIDE;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
+  virtual void PushScrollClipPropertiesTo(LayerImpl* layer) override;
 
-  virtual void SetNeedsDisplayRect(const gfx::RectF&) OVERRIDE;
+  virtual void SetNeedsDisplayRect(const gfx::RectF&) override;
 
   // ScrollbarLayerInterface
-  virtual int ScrollLayerId() const OVERRIDE;
-  virtual void SetScrollLayer(int layer_id) OVERRIDE;
-  virtual void SetClipLayer(int layer_id) OVERRIDE;
+  virtual int ScrollLayerId() const override;
+  virtual void SetScrollLayer(int layer_id) override;
+  virtual void SetClipLayer(int layer_id) override;
 
-  virtual ScrollbarOrientation orientation() const OVERRIDE;
+  virtual ScrollbarOrientation orientation() const override;
 
  protected:
   SolidColorScrollbarLayer(ScrollbarOrientation orientation,
diff --git a/cc/layers/solid_color_scrollbar_layer_impl.cc b/cc/layers/solid_color_scrollbar_layer_impl.cc
index a0c9609..db6a502 100644
--- a/cc/layers/solid_color_scrollbar_layer_impl.cc
+++ b/cc/layers/solid_color_scrollbar_layer_impl.cc
@@ -6,7 +6,7 @@
 #include "cc/quads/solid_color_draw_quad.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/layer_tree_settings.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 
 namespace cc {
 
@@ -95,7 +95,7 @@
 
 void SolidColorScrollbarLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   SharedQuadState* shared_quad_state =
       render_pass->CreateAndAppendSharedQuadState();
@@ -106,9 +106,7 @@
 
   gfx::Rect thumb_quad_rect(ComputeThumbQuadRect());
   gfx::Rect visible_quad_rect =
-      occlusion_tracker.GetCurrentOcclusionForLayer(
-                            draw_properties().target_space_transform)
-          .GetUnoccludedContentRect(thumb_quad_rect);
+      occlusion_in_content_space.GetUnoccludedContentRect(thumb_quad_rect);
   if (visible_quad_rect.IsEmpty())
     return;
 
diff --git a/cc/layers/solid_color_scrollbar_layer_impl.h b/cc/layers/solid_color_scrollbar_layer_impl.h
index 91f1ac3..32695d0 100644
--- a/cc/layers/solid_color_scrollbar_layer_impl.h
+++ b/cc/layers/solid_color_scrollbar_layer_impl.h
@@ -24,12 +24,12 @@
 
   // LayerImpl overrides.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
  protected:
   SolidColorScrollbarLayerImpl(LayerTreeImpl* tree_impl,
@@ -41,11 +41,11 @@
                                bool is_overlay);
 
   // ScrollbarLayerImplBase implementation.
-  virtual int ThumbThickness() const OVERRIDE;
-  virtual int ThumbLength() const OVERRIDE;
-  virtual float TrackLength() const OVERRIDE;
-  virtual int TrackStart() const OVERRIDE;
-  virtual bool IsThumbResizable() const OVERRIDE;
+  virtual int ThumbThickness() const override;
+  virtual int ThumbLength() const override;
+  virtual float TrackLength() const override;
+  virtual int TrackStart() const override;
+  virtual bool IsThumbResizable() const override;
 
  private:
   int thumb_thickness_;
diff --git a/cc/layers/surface_layer.h b/cc/layers/surface_layer.h
index d58d47d..eace365 100644
--- a/cc/layers/surface_layer.h
+++ b/cc/layers/surface_layer.h
@@ -21,12 +21,12 @@
 
   // Layer overrides.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
  protected:
   SurfaceLayer();
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
  private:
   virtual ~SurfaceLayer();
diff --git a/cc/layers/surface_layer_impl.cc b/cc/layers/surface_layer_impl.cc
index 352aca6..4fb9d95 100644
--- a/cc/layers/surface_layer_impl.cc
+++ b/cc/layers/surface_layer_impl.cc
@@ -7,7 +7,7 @@
 #include "base/debug/trace_event_argument.h"
 #include "cc/debug/debug_colors.h"
 #include "cc/quads/surface_draw_quad.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 
 namespace cc {
 
@@ -37,10 +37,9 @@
   layer_impl->SetSurfaceId(surface_id_);
 }
 
-void SurfaceLayerImpl::AppendQuads(
-    RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
-    AppendQuadsData* append_quads_data) {
+void SurfaceLayerImpl::AppendQuads(RenderPass* render_pass,
+                                   const Occlusion& occlusion_in_content_space,
+                                   AppendQuadsData* append_quads_data) {
   SharedQuadState* shared_quad_state =
       render_pass->CreateAndAppendSharedQuadState();
   PopulateSharedQuadState(shared_quad_state);
@@ -53,9 +52,7 @@
 
   gfx::Rect quad_rect(content_bounds());
   gfx::Rect visible_quad_rect =
-      occlusion_tracker.GetCurrentOcclusionForLayer(
-                            draw_properties().target_space_transform)
-          .GetUnoccludedContentRect(quad_rect);
+      occlusion_in_content_space.GetUnoccludedContentRect(quad_rect);
   if (visible_quad_rect.IsEmpty())
     return;
   SurfaceDrawQuad* quad =
diff --git a/cc/layers/surface_layer_impl.h b/cc/layers/surface_layer_impl.h
index 712ea14..5353a21 100644
--- a/cc/layers/surface_layer_impl.h
+++ b/cc/layers/surface_layer_impl.h
@@ -23,20 +23,20 @@
 
   // LayerImpl overrides.
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
  protected:
   SurfaceLayerImpl(LayerTreeImpl* tree_impl, int id);
 
  private:
   virtual void GetDebugBorderProperties(SkColor* color,
-                                        float* width) const OVERRIDE;
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+                                        float* width) const override;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
+  virtual const char* LayerTypeAsString() const override;
 
   SurfaceId surface_id_;
 
diff --git a/cc/layers/texture_layer.h b/cc/layers/texture_layer.h
index 22dcb4d..735fed9 100644
--- a/cc/layers/texture_layer.h
+++ b/cc/layers/texture_layer.h
@@ -95,7 +95,7 @@
   void ClearTexture();
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   // Sets whether this texture should be Y-flipped at draw time. Defaults to
   // true.
@@ -134,18 +134,18 @@
   // TODO(danakj): Remove this when pepper doesn't need it. crbug.com/350204
   void SetTextureMailboxWithoutReleaseCallback(const TextureMailbox& mailbox);
 
-  virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) OVERRIDE;
+  virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) override;
 
-  virtual void SetLayerTreeHost(LayerTreeHost* layer_tree_host) OVERRIDE;
+  virtual void SetLayerTreeHost(LayerTreeHost* layer_tree_host) override;
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
-  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
+  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const override;
 
  protected:
   explicit TextureLayer(TextureLayerClient* client);
   virtual ~TextureLayer();
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
  private:
   void SetTextureMailboxInternal(
diff --git a/cc/layers/texture_layer_impl.cc b/cc/layers/texture_layer_impl.cc
index 206d8db..bcde7cd 100644
--- a/cc/layers/texture_layer_impl.cc
+++ b/cc/layers/texture_layer_impl.cc
@@ -13,7 +13,7 @@
 #include "cc/resources/scoped_resource.h"
 #include "cc/resources/single_release_callback_impl.h"
 #include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 
 namespace cc {
 
@@ -139,10 +139,9 @@
          LayerImpl::WillDraw(draw_mode, resource_provider);
 }
 
-void TextureLayerImpl::AppendQuads(
-    RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
-    AppendQuadsData* append_quads_data) {
+void TextureLayerImpl::AppendQuads(RenderPass* render_pass,
+                                   const Occlusion& occlusion_in_content_space,
+                                   AppendQuadsData* append_quads_data) {
   DCHECK(external_texture_resource_ || valid_texture_copy_);
 
   SharedQuadState* shared_quad_state =
@@ -159,9 +158,7 @@
   gfx::Rect quad_rect(content_bounds());
   gfx::Rect opaque_rect = opaque ? quad_rect : gfx::Rect();
   gfx::Rect visible_quad_rect =
-      occlusion_tracker.GetCurrentOcclusionForLayer(
-                            draw_properties().target_space_transform)
-          .GetUnoccludedContentRect(quad_rect);
+      occlusion_in_content_space.GetUnoccludedContentRect(quad_rect);
   if (visible_quad_rect.IsEmpty())
     return;
 
diff --git a/cc/layers/texture_layer_impl.h b/cc/layers/texture_layer_impl.h
index 9edf099..bbf0817 100644
--- a/cc/layers/texture_layer_impl.h
+++ b/cc/layers/texture_layer_impl.h
@@ -23,16 +23,16 @@
   virtual ~TextureLayerImpl();
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* layer_tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   virtual bool WillDraw(DrawMode draw_mode,
-                        ResourceProvider* resource_provider) OVERRIDE;
+                        ResourceProvider* resource_provider) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
-  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE;
-  virtual void ReleaseResources() OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
+  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const override;
+  virtual void ReleaseResources() override;
 
   // These setter methods don't cause any implicit damage, so the texture client
   // must explicitly invalidate if they intend to cause a visible change in the
@@ -56,7 +56,7 @@
  private:
   TextureLayerImpl(LayerTreeImpl* tree_impl, int id);
 
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
   void FreeTextureMailbox();
 
   ResourceProvider::ResourceId external_texture_resource_;
diff --git a/cc/layers/texture_layer_unittest.cc b/cc/layers/texture_layer_unittest.cc
index b3c48fb..8846152 100644
--- a/cc/layers/texture_layer_unittest.cc
+++ b/cc/layers/texture_layer_unittest.cc
@@ -68,7 +68,7 @@
   virtual bool PrepareTextureMailbox(
       TextureMailbox* mailbox,
       scoped_ptr<SingleReleaseCallback>* release_callback,
-      bool use_shared_memory) OVERRIDE {
+      bool use_shared_memory) override {
     if (!mailbox_changed_)
       return false;
 
@@ -721,7 +721,7 @@
         callback.Pass());
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     EXPECT_EQ(true, main_thread_.CalledOnValidThread());
 
     gfx::Size bounds(100, 100);
@@ -745,7 +745,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     ++commit_count_;
     switch (commit_count_) {
       case 1:
@@ -817,7 +817,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   base::ThreadChecker main_thread_;
@@ -846,7 +846,7 @@
         callback.Pass());
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     gfx::Size bounds(100, 100);
     root_ = Layer::Create();
     root_->SetBounds(bounds);
@@ -863,11 +863,11 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     ++activate_count_;
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // The first mailbox has been activated. Set a new mailbox, and
@@ -886,7 +886,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     switch (host_impl->active_tree()->source_frame_number()) {
       case 0: {
         // The activate for the 1st mailbox should have happened before now.
@@ -911,7 +911,7 @@
   }
 
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int activate_count_;
   scoped_refptr<Layer> root_;
@@ -1133,7 +1133,7 @@
   virtual bool PrepareTextureMailbox(
       TextureMailbox* texture_mailbox,
       scoped_ptr<SingleReleaseCallback>* release_callback,
-      bool use_shared_memory) OVERRIDE {
+      bool use_shared_memory) override {
     if (layer_tree_host()->source_frame_number() == 1) {
       // Once this has been committed, the mailbox will be released.
       *texture_mailbox = TextureMailbox();
@@ -1154,7 +1154,7 @@
     EndTest();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root = Layer::Create();
     root->SetBounds(gfx::Size(10, 10));
     root->SetIsDrawable(true);
@@ -1168,11 +1168,11 @@
     LayerTreeTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         EXPECT_FALSE(proxy()->MainFrameWillHappenForTesting());
@@ -1189,7 +1189,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ASSERT_TRUE(result);
     DelegatedFrameData* delegated_frame_data =
         output_surface()->last_sent_frame().delegated_frame_data.get();
@@ -1206,7 +1206,7 @@
     host_impl->ReclaimResources(&ack);
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   scoped_refptr<TextureLayer> texture_layer_;
@@ -1233,7 +1233,7 @@
   virtual bool PrepareTextureMailbox(
       TextureMailbox* mailbox,
       scoped_ptr<SingleReleaseCallback>* release_callback,
-      bool use_shared_memory) OVERRIDE {
+      bool use_shared_memory) override {
     ++prepare_called_;
     if (!mailbox_changed_)
       return false;
@@ -1252,7 +1252,7 @@
     ++mailbox_returned_;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root = Layer::Create();
     root->SetBounds(gfx::Size(10, 10));
     root->SetIsDrawable(true);
@@ -1277,11 +1277,11 @@
     LayerTreeTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     ++commit_count_;
     switch (commit_count_) {
       case 1:
@@ -1326,7 +1326,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ASSERT_TRUE(result);
     DelegatedFrameData* delegated_frame_data =
         output_surface()->last_sent_frame().delegated_frame_data.get();
@@ -1343,7 +1343,7 @@
     host_impl->ReclaimResources(&ack);
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   scoped_refptr<SolidColorLayer> solid_layer_;
@@ -1370,7 +1370,7 @@
   virtual bool PrepareTextureMailbox(
       TextureMailbox* mailbox,
       scoped_ptr<SingleReleaseCallback>* release_callback,
-      bool use_shared_memory) OVERRIDE {
+      bool use_shared_memory) override {
     *mailbox = TextureMailbox(MailboxFromChar('1'), GL_TEXTURE_2D, 0);
     *release_callback = SingleReleaseCallback::Create(
         base::Bind(&TextureLayerReleaseResourcesBase::MailboxReleased,
@@ -1382,7 +1382,7 @@
     mailbox_released_ = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeTest::SetupTree();
 
     scoped_refptr<TextureLayer> texture_layer =
@@ -1393,16 +1393,16 @@
     layer_tree_host()->root_layer()->AddChild(texture_layer);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     mailbox_released_ = false;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_TRUE(mailbox_released_);
   }
 
@@ -1413,7 +1413,7 @@
 class TextureLayerReleaseResourcesAfterCommit
     : public TextureLayerReleaseResourcesBase {
  public:
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     LayerTreeImpl* tree = NULL;
     if (host_impl->settings().impl_side_painting)
       tree = host_impl->pending_tree();
@@ -1428,7 +1428,7 @@
 class TextureLayerReleaseResourcesAfterActivate
     : public TextureLayerReleaseResourcesBase {
  public:
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     host_impl->active_tree()->root_layer()->children()[0]->ReleaseResources();
   }
 };
@@ -1455,7 +1455,7 @@
         callback.Pass());
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     gfx::Size bounds(100, 100);
     root_ = Layer::Create();
     root_->SetBounds(bounds);
@@ -1469,7 +1469,7 @@
     layer_tree_host()->SetViewportSize(bounds);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     EXPECT_EQ(true, main_thread_.CalledOnValidThread());
 
     callback_count_ = 0;
@@ -1481,7 +1481,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // Delete the TextureLayer on the main thread while the mailbox is in
@@ -1492,7 +1492,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(1, callback_count_);
   }
 
@@ -1526,7 +1526,7 @@
         callback.Pass());
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     gfx::Size bounds(100, 100);
     root_ = Layer::Create();
     root_->SetBounds(bounds);
@@ -1540,7 +1540,7 @@
     layer_tree_host()->SetViewportSize(bounds);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     EXPECT_EQ(true, main_thread_.CalledOnValidThread());
 
     callback_count_ = 0;
@@ -1552,7 +1552,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // Remove the TextureLayer on the main thread while the mailbox is in
@@ -1566,7 +1566,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(1, callback_count_);
   }
 
diff --git a/cc/layers/tiled_layer.h b/cc/layers/tiled_layer.h
index 9f482c8..e8ac89b 100644
--- a/cc/layers/tiled_layer.h
+++ b/cc/layers/tiled_layer.h
@@ -25,17 +25,17 @@
   };
 
   // Layer implementation.
-  virtual void SetIsMask(bool is_mask) OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
-  virtual void ReduceMemoryUsage() OVERRIDE;
-  virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) OVERRIDE;
-  virtual void SetLayerTreeHost(LayerTreeHost* layer_tree_host) OVERRIDE;
+  virtual void SetIsMask(bool is_mask) override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
+  virtual void ReduceMemoryUsage() override;
+  virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) override;
+  virtual void SetLayerTreeHost(LayerTreeHost* layer_tree_host) override;
   virtual void SetTexturePriorities(const PriorityCalculator& priority_calc)
-      OVERRIDE;
-  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE;
+      override;
+  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const override;
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
-  virtual void OnOutputSurfaceCreated() OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
+  virtual void OnOutputSurfaceCreated() override;
 
  protected:
   TiledLayer();
@@ -67,7 +67,7 @@
 
   bool SkipsDraw() const { return skips_draw_; }
 
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
   // Virtual for testing
   virtual PrioritizedResourceManager* ResourceManager();
@@ -76,7 +76,7 @@
 
  private:
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   void CreateTilerIfNeeded();
   void set_tiling_option(TilingOption tiling_option) {
diff --git a/cc/layers/tiled_layer_impl.cc b/cc/layers/tiled_layer_impl.cc
index 18d9d1e..5a0e81d 100644
--- a/cc/layers/tiled_layer_impl.cc
+++ b/cc/layers/tiled_layer_impl.cc
@@ -16,7 +16,7 @@
 #include "cc/quads/solid_color_draw_quad.h"
 #include "cc/quads/tile_draw_quad.h"
 #include "cc/resources/layer_tiling_data.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 #include "third_party/khronos/GLES2/gl2.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/gfx/quad_f.h"
@@ -155,10 +155,9 @@
   return LayerImpl::WillDraw(draw_mode, resource_provider);
 }
 
-void TiledLayerImpl::AppendQuads(
-    RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
-    AppendQuadsData* append_quads_data) {
+void TiledLayerImpl::AppendQuads(RenderPass* render_pass,
+                                 const Occlusion& occlusion_in_content_space,
+                                 AppendQuadsData* append_quads_data) {
   DCHECK(tiler_);
   DCHECK(!tiler_->has_empty_bounds());
   DCHECK(!visible_content_rect().IsEmpty());
@@ -204,8 +203,6 @@
   if (skips_draw_)
     return;
 
-  Occlusion occlusion =
-      occlusion_tracker.GetCurrentOcclusionForLayer(draw_transform());
   for (int j = top; j <= bottom; ++j) {
     for (int i = left; i <= right; ++i) {
       DrawableTile* tile = TileAt(i, j);
@@ -218,7 +215,7 @@
         continue;
 
       gfx::Rect visible_tile_rect =
-          occlusion.GetUnoccludedContentRect(tile_rect);
+          occlusion_in_content_space.GetUnoccludedContentRect(tile_rect);
       if (visible_tile_rect.IsEmpty())
         continue;
 
diff --git a/cc/layers/tiled_layer_impl.h b/cc/layers/tiled_layer_impl.h
index 4c1459e..0a65a96 100644
--- a/cc/layers/tiled_layer_impl.h
+++ b/cc/layers/tiled_layer_impl.h
@@ -23,16 +23,16 @@
   virtual ~TiledLayerImpl();
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   virtual bool WillDraw(DrawMode draw_mode,
-                        ResourceProvider* resource_provider) OVERRIDE;
+                        ResourceProvider* resource_provider) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
-  virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
+  virtual ResourceProvider::ResourceId ContentsResourceId() const override;
 
   void set_skips_draw(bool skips_draw) { skips_draw_ = skips_draw; }
   void SetTilingData(const LayerTilingData& tiler);
@@ -42,12 +42,12 @@
                           bool contents_swizzled);
   void PushInvalidTile(int i, int j);
 
-  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE;
-  virtual void ReleaseResources() OVERRIDE;
+  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const override;
+  virtual void ReleaseResources() override;
 
   const LayerTilingData* TilingForTesting() const { return tiler_.get(); }
 
-  virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
+  virtual size_t GPUMemoryUsageInBytes() const override;
 
  protected:
   TiledLayerImpl(LayerTreeImpl* tree_impl, int id);
@@ -56,11 +56,11 @@
   bool HasResourceIdForTileAt(int i, int j) const;
 
   virtual void GetDebugBorderProperties(SkColor* color, float* width) const
-      OVERRIDE;
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+      override;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
  private:
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
   DrawableTile* TileAt(int i, int j) const;
   DrawableTile* CreateTile(int i, int j);
diff --git a/cc/layers/tiled_layer_impl_unittest.cc b/cc/layers/tiled_layer_impl_unittest.cc
index 7609ade..ffc89c8 100644
--- a/cc/layers/tiled_layer_impl_unittest.cc
+++ b/cc/layers/tiled_layer_impl_unittest.cc
@@ -70,9 +70,8 @@
     layer->draw_properties().visible_content_rect = visible_content_rect;
     layer->SetBounds(layer_size);
 
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     AppendQuadsData data;
-    layer->AppendQuads(render_pass, occlusion_tracker, &data);
+    layer->AppendQuads(render_pass, Occlusion(), &data);
   }
 
  protected:
@@ -92,12 +91,11 @@
   {
     scoped_ptr<TiledLayerImpl> layer =
         CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS);
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
     EXPECT_TRUE(layer->WillDraw(DRAW_MODE_HARDWARE, NULL));
-    layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer->AppendQuads(render_pass.get(), Occlusion(), &data);
     layer->DidDraw(NULL);
     unsigned num_tiles = num_tiles_x * num_tiles_y;
     EXPECT_EQ(render_pass->quad_list.size(), num_tiles);
@@ -109,7 +107,6 @@
         CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS);
     layer->draw_properties().visible_content_rect = gfx::Rect();
 
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     EXPECT_FALSE(layer->WillDraw(DRAW_MODE_HARDWARE, NULL));
@@ -123,12 +120,11 @@
     gfx::Rect outside_bounds(-100, -100, 50, 50);
     layer->draw_properties().visible_content_rect = outside_bounds;
 
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
     EXPECT_TRUE(layer->WillDraw(DRAW_MODE_HARDWARE, NULL));
-    layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer->AppendQuads(render_pass.get(), Occlusion(), &data);
     layer->DidDraw(NULL);
     EXPECT_EQ(render_pass->quad_list.size(), 0u);
   }
@@ -139,11 +135,10 @@
         CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS);
     layer->set_skips_draw(true);
 
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
-    layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer->AppendQuads(render_pass.get(), Occlusion(), &data);
     EXPECT_EQ(render_pass->quad_list.size(), 0u);
   }
 }
@@ -160,18 +155,15 @@
 
   // No checkerboarding
   {
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
-    layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer->AppendQuads(render_pass.get(), Occlusion(), &data);
     EXPECT_EQ(render_pass->quad_list.size(), 4u);
     EXPECT_EQ(0u, data.num_missing_tiles);
 
-    for (QuadList::Iterator iter = render_pass->quad_list.begin();
-         iter != render_pass->quad_list.end();
-         ++iter)
-      EXPECT_EQ(iter->material, DrawQuad::TILED_CONTENT);
+    for (const auto& quad : render_pass->quad_list)
+      EXPECT_EQ(quad.material, DrawQuad::TILED_CONTENT);
   }
 
   for (int i = 0; i < num_tiles_x; ++i)
@@ -180,17 +172,14 @@
 
   // All checkerboarding
   {
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
-    layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    layer->AppendQuads(render_pass.get(), Occlusion(), &data);
     EXPECT_LT(0u, data.num_missing_tiles);
     EXPECT_EQ(render_pass->quad_list.size(), 4u);
-    for (QuadList::Iterator iter = render_pass->quad_list.begin();
-         iter != render_pass->quad_list.end();
-         ++iter)
-      EXPECT_NE(iter->material, DrawQuad::TILED_CONTENT);
+    for (const auto& quad : render_pass->quad_list)
+      EXPECT_NE(quad.material, DrawQuad::TILED_CONTENT);
   }
 }
 
@@ -266,8 +255,8 @@
            LayerTilingData::NO_BORDER_TEXELS,
            gfx::Rect(layer_size));
 
-  for (QuadList::Iterator iter = render_pass->quad_list.begin();
-       iter != render_pass->quad_list.end();
+  for (auto iter = render_pass->quad_list.cbegin();
+       iter != render_pass->quad_list.cend();
        ++iter) {
     const TileDrawQuad* quad = TileDrawQuad::MaterialCast(&*iter);
 
diff --git a/cc/layers/tiled_layer_unittest.cc b/cc/layers/tiled_layer_unittest.cc
index d2bc0a9..3af0e3f 100644
--- a/cc/layers/tiled_layer_unittest.cc
+++ b/cc/layers/tiled_layer_unittest.cc
@@ -69,7 +69,7 @@
   }
 
   virtual void OnCreateAndInitializeOutputSurfaceAttempted(
-      bool success) OVERRIDE {
+      bool success) override {
     LayerTreeHost::OnCreateAndInitializeOutputSurfaceAttempted(success);
     output_surface_created_ = success;
     run_loop_.Quit();
@@ -1648,7 +1648,7 @@
     return make_scoped_ptr(new TrackingLayerPainter());
   }
 
-  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) OVERRIDE {
+  virtual void Paint(SkCanvas* canvas, const gfx::Rect& content_rect) override {
     painted_rect_ = content_rect;
   }
 
@@ -1674,7 +1674,7 @@
   }
 
  private:
-  virtual LayerUpdater* Updater() const OVERRIDE {
+  virtual LayerUpdater* Updater() const override {
     return layer_updater_.get();
   }
   virtual ~UpdateTrackingTiledLayer() {}
diff --git a/cc/layers/ui_resource_layer.cc b/cc/layers/ui_resource_layer.cc
index 498ba33..4293b09 100644
--- a/cc/layers/ui_resource_layer.cc
+++ b/cc/layers/ui_resource_layer.cc
@@ -23,7 +23,7 @@
                                             const SkBitmap& skbitmap) {
     return make_scoped_ptr(new ScopedUIResourceHolder(host, skbitmap));
   }
-  virtual UIResourceId id() OVERRIDE { return resource_->id(); }
+  virtual UIResourceId id() override { return resource_->id(); }
 
  private:
   ScopedUIResourceHolder(LayerTreeHost* host, const SkBitmap& skbitmap) {
@@ -39,7 +39,7 @@
     return make_scoped_ptr(new SharedUIResourceHolder(id));
   }
 
-  virtual UIResourceId id() OVERRIDE { return id_; }
+  virtual UIResourceId id() override { return id_; }
 
  private:
   explicit SharedUIResourceHolder(UIResourceId id) : id_(id) {}
diff --git a/cc/layers/ui_resource_layer.h b/cc/layers/ui_resource_layer.h
index 8e278a9..f79389b 100644
--- a/cc/layers/ui_resource_layer.h
+++ b/cc/layers/ui_resource_layer.h
@@ -20,9 +20,9 @@
  public:
   static scoped_refptr<UIResourceLayer> Create();
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
-  virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE;
+  virtual void SetLayerTreeHost(LayerTreeHost* host) override;
 
   void SetBitmap(const SkBitmap& skbitmap);
 
@@ -49,7 +49,7 @@
   UIResourceLayer();
   virtual ~UIResourceLayer();
 
-  virtual bool HasDrawableContent() const OVERRIDE;
+  virtual bool HasDrawableContent() const override;
 
   scoped_ptr<UIResourceHolder> ui_resource_holder_;
   SkBitmap bitmap_;
@@ -60,7 +60,7 @@
 
  private:
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
   void RecreateUIResourceHolder();
 
 
diff --git a/cc/layers/ui_resource_layer_impl.cc b/cc/layers/ui_resource_layer_impl.cc
index 8a7d3df..dc08a90 100644
--- a/cc/layers/ui_resource_layer_impl.cc
+++ b/cc/layers/ui_resource_layer_impl.cc
@@ -9,7 +9,7 @@
 #include "cc/base/math_util.h"
 #include "cc/quads/texture_draw_quad.h"
 #include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 #include "ui/gfx/rect_f.h"
 
 namespace cc {
@@ -93,7 +93,7 @@
 
 void UIResourceLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   SharedQuadState* shared_quad_state =
       render_pass->CreateAndAppendSharedQuadState();
@@ -122,9 +122,7 @@
   gfx::Rect quad_rect(bounds());
   gfx::Rect opaque_rect(opaque ? quad_rect : gfx::Rect());
   gfx::Rect visible_quad_rect =
-      occlusion_tracker.GetCurrentOcclusionForLayer(
-                            draw_properties().target_space_transform)
-          .GetUnoccludedContentRect(quad_rect);
+      occlusion_in_content_space.GetUnoccludedContentRect(quad_rect);
   if (visible_quad_rect.IsEmpty())
     return;
 
diff --git a/cc/layers/ui_resource_layer_impl.h b/cc/layers/ui_resource_layer_impl.h
index 2bdf818..a0cb6ec 100644
--- a/cc/layers/ui_resource_layer_impl.h
+++ b/cc/layers/ui_resource_layer_impl.h
@@ -40,16 +40,16 @@
   void SetVertexOpacity(const float vertex_opacity[4]);
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   virtual bool WillDraw(DrawMode draw_mode,
-                        ResourceProvider* resource_provider) OVERRIDE;
+                        ResourceProvider* resource_provider) override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
 
-  virtual base::DictionaryValue* LayerTreeAsJson() const OVERRIDE;
+  virtual base::DictionaryValue* LayerTreeAsJson() const override;
 
  protected:
   UIResourceLayerImpl(LayerTreeImpl* tree_impl, int id);
@@ -64,7 +64,7 @@
   float vertex_opacity_[4];
 
  private:
-  virtual const char* LayerTypeAsString() const OVERRIDE;
+  virtual const char* LayerTypeAsString() const override;
 
   DISALLOW_COPY_AND_ASSIGN(UIResourceLayerImpl);
 };
diff --git a/cc/layers/ui_resource_layer_impl_unittest.cc b/cc/layers/ui_resource_layer_impl_unittest.cc
index 66db321..dc24e1d 100644
--- a/cc/layers/ui_resource_layer_impl_unittest.cc
+++ b/cc/layers/ui_resource_layer_impl_unittest.cc
@@ -45,11 +45,10 @@
 
 void QuadSizeTest(scoped_ptr<UIResourceLayerImpl> layer,
                   size_t expected_quad_size) {
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
   AppendQuadsData data;
-  layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  layer->AppendQuads(render_pass.get(), Occlusion(), &data);
 
   // Verify quad rects
   const QuadList& quads = render_pass->quad_list;
@@ -86,11 +85,10 @@
 
 void OpaqueBoundsTest(scoped_ptr<UIResourceLayerImpl> layer,
                  const gfx::Rect& expected_opaque_bounds) {
-  MockOcclusionTracker<LayerImpl> occlusion_tracker;
   scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
   AppendQuadsData data;
-  layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+  layer->AppendQuads(render_pass.get(), Occlusion(), &data);
 
   // Verify quad rects
   const QuadList& quads = render_pass->quad_list;
diff --git a/cc/layers/video_frame_provider.h b/cc/layers/video_frame_provider.h
new file mode 100644
index 0000000..784d951
--- /dev/null
+++ b/cc/layers/video_frame_provider.h
@@ -0,0 +1,63 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_LAYERS_VIDEO_FRAME_PROVIDER_H_
+#define CC_LAYERS_VIDEO_FRAME_PROVIDER_H_
+
+#include "base/memory/ref_counted.h"
+
+namespace media {
+class VideoFrame;
+}
+
+namespace cc {
+
+// Threading notes: This class may be used in a multi threaded manner.
+// Specifically, the implementation may call GetCurrentFrame() or
+// PutCurrentFrame() from the compositor thread. If so, the caller is
+// responsible for making sure Client::DidReceiveFrame() and
+// Client::DidUpdateMatrix() are only called from this same thread.
+class VideoFrameProvider {
+ public:
+  virtual ~VideoFrameProvider() {}
+
+  class Client {
+   public:
+    // Provider will call this method to tell the client to stop using it.
+    // StopUsingProvider() may be called from any thread. The client should
+    // block until it has PutCurrentFrame() any outstanding frames.
+    virtual void StopUsingProvider() = 0;
+
+    // Notifies the provider's client that a call to GetCurrentFrame() will
+    // return new data.
+    virtual void DidReceiveFrame() = 0;
+
+    // Notifies the provider's client of a new UV transform matrix to be used.
+    virtual void DidUpdateMatrix(const float* matrix) = 0;
+
+   protected:
+    virtual ~Client() {}
+  };
+
+  // May be called from any thread, but there must be some external guarantee
+  // that the provider is not destroyed before this call returns.
+  virtual void SetVideoFrameProviderClient(Client* client) = 0;
+
+  // This function places a lock on the current frame and returns a pointer to
+  // it. Calls to this method should always be followed with a call to
+  // PutCurrentFrame().
+  // Only the current provider client should call this function.
+  virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() = 0;
+
+  // This function releases the lock on the video frame. It should always be
+  // called after GetCurrentFrame(). Frames passed into this method
+  // should no longer be referenced after the call is made. Only the current
+  // provider client should call this function.
+  virtual void PutCurrentFrame(
+      const scoped_refptr<media::VideoFrame>& frame) = 0;
+};
+
+}  // namespace cc
+
+#endif  // CC_LAYERS_VIDEO_FRAME_PROVIDER_H_
diff --git a/cc/layers/video_frame_provider_client_impl.cc b/cc/layers/video_frame_provider_client_impl.cc
new file mode 100644
index 0000000..cf78413
--- /dev/null
+++ b/cc/layers/video_frame_provider_client_impl.cc
@@ -0,0 +1,95 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/layers/video_frame_provider_client_impl.h"
+
+#include "base/debug/trace_event.h"
+#include "cc/base/math_util.h"
+#include "cc/layers/video_layer_impl.h"
+#include "media/base/video_frame.h"
+
+namespace cc {
+
+// static
+scoped_refptr<VideoFrameProviderClientImpl>
+    VideoFrameProviderClientImpl::Create(
+        VideoFrameProvider* provider) {
+  return make_scoped_refptr(
+      new VideoFrameProviderClientImpl(provider));
+}
+
+VideoFrameProviderClientImpl::~VideoFrameProviderClientImpl() {}
+
+VideoFrameProviderClientImpl::VideoFrameProviderClientImpl(
+    VideoFrameProvider* provider)
+    : active_video_layer_(NULL), provider_(provider) {
+  // This only happens during a commit on the compositor thread while the main
+  // thread is blocked. That makes this a thread-safe call to set the video
+  // frame provider client that does not require a lock. The same is true of
+  // the call to Stop().
+  provider_->SetVideoFrameProviderClient(this);
+
+  // This matrix is the default transformation for stream textures, and flips
+  // on the Y axis.
+  stream_texture_matrix_ = gfx::Transform(
+      1.0, 0.0, 0.0, 0.0,
+      0.0, -1.0, 0.0, 1.0,
+      0.0, 0.0, 1.0, 0.0,
+      0.0, 0.0, 0.0, 1.0);
+}
+
+void VideoFrameProviderClientImpl::Stop() {
+  if (!provider_)
+    return;
+  provider_->SetVideoFrameProviderClient(NULL);
+  provider_ = NULL;
+}
+
+scoped_refptr<media::VideoFrame>
+VideoFrameProviderClientImpl::AcquireLockAndCurrentFrame() {
+  provider_lock_.Acquire();  // Balanced by call to ReleaseLock().
+  if (!provider_)
+    return NULL;
+
+  return provider_->GetCurrentFrame();
+}
+
+void VideoFrameProviderClientImpl::PutCurrentFrame(
+    const scoped_refptr<media::VideoFrame>& frame) {
+  provider_lock_.AssertAcquired();
+  provider_->PutCurrentFrame(frame);
+}
+
+void VideoFrameProviderClientImpl::ReleaseLock() {
+  provider_lock_.AssertAcquired();
+  provider_lock_.Release();
+}
+
+void VideoFrameProviderClientImpl::StopUsingProvider() {
+  // Block the provider from shutting down until this client is done
+  // using the frame.
+  base::AutoLock locker(provider_lock_);
+  provider_ = NULL;
+}
+
+void VideoFrameProviderClientImpl::DidReceiveFrame() {
+  TRACE_EVENT1("cc",
+               "VideoFrameProviderClientImpl::DidReceiveFrame",
+               "active_video_layer",
+               !!active_video_layer_);
+  if (active_video_layer_)
+    active_video_layer_->SetNeedsRedraw();
+}
+
+void VideoFrameProviderClientImpl::DidUpdateMatrix(const float* matrix) {
+  stream_texture_matrix_ = gfx::Transform(
+      matrix[0], matrix[4], matrix[8], matrix[12],
+      matrix[1], matrix[5], matrix[9], matrix[13],
+      matrix[2], matrix[6], matrix[10], matrix[14],
+      matrix[3], matrix[7], matrix[11], matrix[15]);
+  if (active_video_layer_)
+    active_video_layer_->SetNeedsRedraw();
+}
+
+}  // namespace cc
diff --git a/cc/layers/video_frame_provider_client_impl.h b/cc/layers/video_frame_provider_client_impl.h
new file mode 100644
index 0000000..c2d6599
--- /dev/null
+++ b/cc/layers/video_frame_provider_client_impl.h
@@ -0,0 +1,64 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_LAYERS_VIDEO_FRAME_PROVIDER_CLIENT_IMPL_H_
+#define CC_LAYERS_VIDEO_FRAME_PROVIDER_CLIENT_IMPL_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/synchronization/lock.h"
+#include "cc/layers/video_frame_provider.h"
+#include "ui/gfx/transform.h"
+
+namespace media { class VideoFrame; }
+
+namespace cc {
+class VideoLayerImpl;
+
+class VideoFrameProviderClientImpl
+    : public VideoFrameProvider::Client,
+      public base::RefCounted<VideoFrameProviderClientImpl> {
+ public:
+  static scoped_refptr<VideoFrameProviderClientImpl> Create(
+      VideoFrameProvider* provider);
+
+  VideoLayerImpl* active_video_layer() { return active_video_layer_; }
+  void set_active_video_layer(VideoLayerImpl* video_layer) {
+    active_video_layer_ = video_layer;
+  }
+
+  void Stop();
+  bool Stopped() const { return !provider_; }
+
+  scoped_refptr<media::VideoFrame> AcquireLockAndCurrentFrame();
+  void PutCurrentFrame(const scoped_refptr<media::VideoFrame>& frame);
+  void ReleaseLock();
+  const gfx::Transform& stream_texture_matrix() const {
+    return stream_texture_matrix_;
+  }
+
+  // VideoFrameProvider::Client implementation. These methods are all callable
+  // on any thread.
+  virtual void StopUsingProvider() override;
+  virtual void DidReceiveFrame() override;
+  virtual void DidUpdateMatrix(const float* matrix) override;
+
+ private:
+  explicit VideoFrameProviderClientImpl(VideoFrameProvider* provider);
+  friend class base::RefCounted<VideoFrameProviderClientImpl>;
+  virtual ~VideoFrameProviderClientImpl();
+
+  VideoLayerImpl* active_video_layer_;
+
+  // Guards the destruction of provider_ and the frame that it provides
+  base::Lock provider_lock_;
+  VideoFrameProvider* provider_;
+
+  gfx::Transform stream_texture_matrix_;
+
+  DISALLOW_COPY_AND_ASSIGN(VideoFrameProviderClientImpl);
+};
+
+}  // namespace cc
+
+#endif  // CC_LAYERS_VIDEO_FRAME_PROVIDER_CLIENT_IMPL_H_
diff --git a/cc/layers/video_layer.h b/cc/layers/video_layer.h
new file mode 100644
index 0000000..c7ca647
--- /dev/null
+++ b/cc/layers/video_layer.h
@@ -0,0 +1,47 @@
+// Copyright 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_LAYERS_VIDEO_LAYER_H_
+#define CC_LAYERS_VIDEO_LAYER_H_
+
+#include "base/callback.h"
+#include "cc/base/cc_export.h"
+#include "cc/layers/layer.h"
+#include "media/base/video_rotation.h"
+
+namespace media { class VideoFrame; }
+
+namespace cc {
+
+class VideoFrameProvider;
+class VideoLayerImpl;
+
+// A Layer that contains a Video element.
+class CC_EXPORT VideoLayer : public Layer {
+ public:
+  static scoped_refptr<VideoLayer> Create(VideoFrameProvider* provider,
+                                          media::VideoRotation video_rotation);
+
+  virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
+      override;
+
+  virtual bool Update(ResourceUpdateQueue* queue,
+                      const OcclusionTracker<Layer>* occlusion) override;
+
+ private:
+  VideoLayer(VideoFrameProvider* provider, media::VideoRotation video_rotation);
+  virtual ~VideoLayer();
+
+  // This pointer is only for passing to VideoLayerImpl's constructor. It should
+  // never be dereferenced by this class.
+  VideoFrameProvider* provider_;
+
+  media::VideoRotation video_rotation_;
+
+  DISALLOW_COPY_AND_ASSIGN(VideoLayer);
+};
+
+}  // namespace cc
+
+#endif  // CC_LAYERS_VIDEO_LAYER_H_
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
index 2edea94..5e37397 100644
--- a/cc/layers/video_layer_impl.cc
+++ b/cc/layers/video_layer_impl.cc
@@ -14,7 +14,7 @@
 #include "cc/resources/resource_provider.h"
 #include "cc/resources/single_release_callback_impl.h"
 #include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/occlusion_tracker.h"
+#include "cc/trees/occlusion.h"
 #include "cc/trees/proxy.h"
 #include "media/base/video_frame.h"
 
@@ -129,10 +129,9 @@
   return true;
 }
 
-void VideoLayerImpl::AppendQuads(
-    RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
-    AppendQuadsData* append_quads_data) {
+void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
+                                 const Occlusion& occlusion_in_content_space,
+                                 AppendQuadsData* append_quads_data) {
   DCHECK(frame_.get());
 
   gfx::Transform transform = draw_transform();
@@ -175,9 +174,10 @@
   gfx::Rect visible_rect = frame_->visible_rect();
   gfx::Size coded_size = frame_->coded_size();
 
+  Occlusion occlusion_in_video_space =
+      occlusion_in_content_space.GetOcclusionWithGivenDrawTransform(transform);
   gfx::Rect visible_quad_rect =
-      occlusion_tracker.GetCurrentOcclusionForLayer(transform)
-          .GetUnoccludedContentRect(quad_rect);
+      occlusion_in_video_space.GetUnoccludedContentRect(quad_rect);
   if (visible_quad_rect.IsEmpty())
     return;
 
diff --git a/cc/layers/video_layer_impl.h b/cc/layers/video_layer_impl.h
new file mode 100644
index 0000000..232a1c7
--- /dev/null
+++ b/cc/layers/video_layer_impl.h
@@ -0,0 +1,80 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_LAYERS_VIDEO_LAYER_IMPL_H_
+#define CC_LAYERS_VIDEO_LAYER_IMPL_H_
+
+#include <vector>
+
+#include "cc/base/cc_export.h"
+#include "cc/layers/layer_impl.h"
+#include "cc/resources/release_callback_impl.h"
+#include "cc/resources/video_resource_updater.h"
+#include "media/base/video_rotation.h"
+
+namespace media {
+class VideoFrame;
+}
+
+namespace cc {
+class VideoFrameProvider;
+class VideoFrameProviderClientImpl;
+
+class CC_EXPORT VideoLayerImpl : public LayerImpl {
+ public:
+  static scoped_ptr<VideoLayerImpl> Create(LayerTreeImpl* tree_impl,
+                                           int id,
+                                           VideoFrameProvider* provider,
+                                           media::VideoRotation video_rotation);
+  virtual ~VideoLayerImpl();
+
+  // LayerImpl implementation.
+  virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
+      override;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
+  virtual bool WillDraw(DrawMode draw_mode,
+                        ResourceProvider* resource_provider) override;
+  virtual void AppendQuads(RenderPass* render_pass,
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
+  virtual void DidDraw(ResourceProvider* resource_provider) override;
+  virtual void DidBecomeActive() override;
+  virtual void ReleaseResources() override;
+
+  void SetNeedsRedraw();
+
+  void SetProviderClientImpl(
+      scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl);
+
+  media::VideoRotation video_rotation() const { return video_rotation_; }
+
+ private:
+  VideoLayerImpl(LayerTreeImpl* tree_impl,
+                 int id,
+                 media::VideoRotation video_rotation);
+
+  virtual const char* LayerTypeAsString() const override;
+
+  scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl_;
+
+  scoped_refptr<media::VideoFrame> frame_;
+
+  media::VideoRotation video_rotation_;
+
+  scoped_ptr<VideoResourceUpdater> updater_;
+  VideoFrameExternalResources::ResourceType frame_resource_type_;
+  std::vector<ResourceProvider::ResourceId> frame_resources_;
+
+  // TODO(danakj): Remove these, hide software path inside ResourceProvider and
+  // ExternalResource (aka TextureMailbox) classes.
+  std::vector<unsigned> software_resources_;
+  // Called once for each software resource.
+  ReleaseCallbackImpl software_release_callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(VideoLayerImpl);
+};
+
+}  // namespace cc
+
+#endif  // CC_LAYERS_VIDEO_LAYER_IMPL_H_
diff --git a/cc/output/bsp_walk_action.h b/cc/output/bsp_walk_action.h
index bb31865..342e635 100644
--- a/cc/output/bsp_walk_action.h
+++ b/cc/output/bsp_walk_action.h
@@ -23,7 +23,7 @@
 class CC_EXPORT BspWalkActionToVector : public BspWalkAction {
  public:
   explicit BspWalkActionToVector(std::vector<DrawPolygon*>* in_list);
-  virtual void operator()(DrawPolygon* item) OVERRIDE;
+  virtual void operator()(DrawPolygon* item) override;
 
  private:
   std::vector<DrawPolygon*>* list_;
diff --git a/cc/output/delegating_renderer.cc b/cc/output/delegating_renderer.cc
index d21ab66..c4dc9fe 100644
--- a/cc/output/delegating_renderer.cc
+++ b/cc/output/delegating_renderer.cc
@@ -92,11 +92,8 @@
       base::Bind(&AppendToArray, &resources);
   for (size_t i = 0; i < out_data.render_pass_list.size(); ++i) {
     RenderPass* render_pass = out_data.render_pass_list.at(i);
-    for (QuadList::Iterator iter = render_pass->quad_list.begin();
-         iter != render_pass->quad_list.end();
-         ++iter) {
-      iter->IterateResources(append_to_array);
-    }
+    for (auto& quad : render_pass->quad_list)
+      quad.IterateResources(append_to_array);
   }
   resource_provider_->PrepareSendToParent(resources, &out_data.resource_list);
 }
diff --git a/cc/output/delegating_renderer.h b/cc/output/delegating_renderer.h
index 52dbe01..1acebc5 100644
--- a/cc/output/delegating_renderer.h
+++ b/cc/output/delegating_renderer.h
@@ -24,18 +24,18 @@
       ResourceProvider* resource_provider);
   virtual ~DelegatingRenderer();
 
-  virtual const RendererCapabilitiesImpl& Capabilities() const OVERRIDE;
+  virtual const RendererCapabilitiesImpl& Capabilities() const override;
 
   virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
                          float device_scale_factor,
                          const gfx::Rect& device_viewport_rect,
                          const gfx::Rect& device_clip_rect,
-                         bool disable_picture_quad_image_filtering) OVERRIDE;
+                         bool disable_picture_quad_image_filtering) override;
 
-  virtual void Finish() OVERRIDE {}
+  virtual void Finish() override {}
 
-  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) OVERRIDE;
-  virtual void ReceiveSwapBuffersAck(const CompositorFrameAck&) OVERRIDE;
+  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) override;
+  virtual void ReceiveSwapBuffersAck(const CompositorFrameAck&) override;
 
  private:
   DelegatingRenderer(RendererClient* client,
@@ -43,7 +43,7 @@
                      OutputSurface* output_surface,
                      ResourceProvider* resource_provider);
 
-  virtual void DidChangeVisibility() OVERRIDE;
+  virtual void DidChangeVisibility() override;
 
   OutputSurface* output_surface_;
   ResourceProvider* resource_provider_;
diff --git a/cc/output/delegating_renderer_unittest.cc b/cc/output/delegating_renderer_unittest.cc
index 48bacd5..4c9deb2 100644
--- a/cc/output/delegating_renderer_unittest.cc
+++ b/cc/output/delegating_renderer_unittest.cc
@@ -18,7 +18,7 @@
   virtual ~DelegatingRendererTest() {}
 
   virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     scoped_ptr<FakeOutputSurface> output_surface =
         FakeOutputSurface::CreateDelegating3d();
     output_surface_ = output_surface.get();
@@ -32,17 +32,17 @@
 
 class DelegatingRendererTestDraw : public DelegatingRendererTest {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f);
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(0u, output_surface_->num_sent_frames());
 
     const CompositorFrame& last_frame = output_surface_->last_sent_frame();
@@ -53,12 +53,12 @@
     return DRAW_SUCCESS;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_EQ(0u, output_surface_->num_sent_frames());
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     EXPECT_TRUE(result);
     EXPECT_EQ(1u, output_surface_->num_sent_frames());
 
@@ -83,15 +83,15 @@
 
 class DelegatingRendererTestResources : public DelegatingRendererTest {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   virtual DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
                                            LayerTreeHostImpl::FrameData* frame,
-                                           DrawResult draw_result) OVERRIDE {
+                                           DrawResult draw_result) override {
     frame->render_passes.clear();
     frame->render_passes_by_id.clear();
 
@@ -111,12 +111,12 @@
     return draw_result;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_EQ(0u, output_surface_->num_sent_frames());
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     EXPECT_TRUE(result);
     EXPECT_EQ(1u, output_surface_->num_sent_frames());
 
diff --git a/cc/output/direct_renderer.h b/cc/output/direct_renderer.h
index f13ed37..d4c4ba6 100644
--- a/cc/output/direct_renderer.h
+++ b/cc/output/direct_renderer.h
@@ -26,13 +26,13 @@
   virtual ~DirectRenderer();
 
   virtual void DecideRenderPassAllocationsForFrame(
-      const RenderPassList& render_passes_in_draw_order) OVERRIDE;
-  virtual bool HasAllocatedResourcesForTesting(RenderPassId id) const OVERRIDE;
+      const RenderPassList& render_passes_in_draw_order) override;
+  virtual bool HasAllocatedResourcesForTesting(RenderPassId id) const override;
   virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
                          float device_scale_factor,
                          const gfx::Rect& device_viewport_rect,
                          const gfx::Rect& device_clip_rect,
-                         bool disable_picture_quad_image_filtering) OVERRIDE;
+                         bool disable_picture_quad_image_filtering) override;
 
   struct CC_EXPORT DrawingFrame {
     DrawingFrame();
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index 0c43e02..b2d5153 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -13,6 +13,7 @@
 #include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "cc/base/math_util.h"
+#include "cc/layers/video_layer_impl.h"
 #include "cc/output/compositor_frame.h"
 #include "cc/output/compositor_frame_metadata.h"
 #include "cc/output/context_provider.h"
@@ -55,8 +56,8 @@
       : gl_(gl), has_passed_(true) {}
 
   // Overridden from ResourceProvider::Fence:
-  virtual void Set() OVERRIDE { has_passed_ = false; }
-  virtual bool HasPassed() OVERRIDE {
+  virtual void Set() override { has_passed_ = false; }
+  virtual bool HasPassed() override {
     if (!has_passed_) {
       has_passed_ = true;
       Synchronize();
@@ -250,11 +251,11 @@
         : query_(query) {}
 
     // Overridden from ResourceProvider::Fence:
-    virtual void Set() OVERRIDE {
+    virtual void Set() override {
       DCHECK(query_);
       query_->Set();
     }
-    virtual bool HasPassed() OVERRIDE {
+    virtual bool HasPassed() override {
       return !query_ || !query_->IsPending();
     }
 
@@ -466,11 +467,8 @@
 
   for (size_t i = 0; i < frame->render_passes_in_draw_order->size(); ++i) {
     RenderPass* pass = frame->render_passes_in_draw_order->at(i);
-    for (QuadList::Iterator iter = pass->quad_list.begin();
-         iter != pass->quad_list.end();
-         ++iter) {
-      iter->IterateResources(wait_on_resource_syncpoints_callback);
-    }
+    for (auto& quad : pass->quad_list)
+      quad.IterateResources(wait_on_resource_syncpoints_callback);
   }
 
   // TODO(enne): Do we need to reinitialize all of this state per frame?
@@ -852,20 +850,93 @@
   return image;
 }
 
-scoped_ptr<ScopedResource> GLRenderer::GetBackgroundWithFilters(
+bool GLRenderer::ShouldApplyBackgroundFilters(DrawingFrame* frame,
+                                              const RenderPassDrawQuad* quad) {
+  if (quad->background_filters.IsEmpty())
+    return false;
+
+  // TODO(danakj): We only allow background filters on an opaque render surface
+  // because other surfaces may contain translucent pixels, and the contents
+  // behind those translucent pixels wouldn't have the filter applied.
+  if (frame->current_render_pass->has_transparent_background)
+    return false;
+
+  // TODO(ajuma): Add support for reference filters once
+  // FilterOperations::GetOutsets supports reference filters.
+  if (quad->background_filters.HasReferenceFilter())
+    return false;
+  return true;
+}
+
+gfx::Rect GLRenderer::GetBackdropBoundingBoxForRenderPassQuad(
     DrawingFrame* frame,
     const RenderPassDrawQuad* quad,
-    const gfx::Transform& contents_device_transform,
+    const gfx::Transform& contents_device_transform) {
+  gfx::Rect backdrop_rect = gfx::ToEnclosingRect(MathUtil::MapClippedRect(
+      contents_device_transform, SharedGeometryQuad().BoundingBox()));
+
+  if (ShouldApplyBackgroundFilters(frame, quad)) {
+    int top, right, bottom, left;
+    quad->background_filters.GetOutsets(&top, &right, &bottom, &left);
+    backdrop_rect.Inset(-left, -top, -right, -bottom);
+  }
+
+  backdrop_rect.Intersect(
+      MoveFromDrawToWindowSpace(frame->current_render_pass->output_rect));
+  return backdrop_rect;
+}
+
+scoped_ptr<ScopedResource> GLRenderer::GetBackdropTexture(
+    const gfx::Rect& bounding_rect) {
+  scoped_ptr<ScopedResource> device_background_texture =
+      ScopedResource::Create(resource_provider_);
+  // CopyTexImage2D fails when called on a texture having immutable storage.
+  device_background_texture->Allocate(
+      bounding_rect.size(), ResourceProvider::TextureHintDefault, RGBA_8888);
+  {
+    ResourceProvider::ScopedWriteLockGL lock(resource_provider_,
+                                             device_background_texture->id());
+    GetFramebufferTexture(
+        lock.texture_id(), device_background_texture->format(), bounding_rect);
+  }
+  return device_background_texture.Pass();
+}
+
+skia::RefPtr<SkImage> GLRenderer::ApplyBackgroundFilters(
+    DrawingFrame* frame,
+    const RenderPassDrawQuad* quad,
+    ScopedResource* background_texture) {
+  DCHECK(ShouldApplyBackgroundFilters(frame, quad));
+  skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter(
+      quad->background_filters, background_texture->size());
+
+  skia::RefPtr<SkImage> background_with_filters =
+      ApplyImageFilter(ScopedUseGrContext::Create(this, frame),
+                       resource_provider_,
+                       quad->rect.origin(),
+                       quad->filters_scale,
+                       filter.get(),
+                       background_texture);
+  return background_with_filters;
+}
+
+scoped_ptr<ScopedResource>
+GLRenderer::ApplyInverseTransformForBackgroundFilters(
+    DrawingFrame* frame,
+    const RenderPassDrawQuad* quad,
     const gfx::Transform& contents_device_transform_inverse,
-    bool* background_changed) {
+    ScopedResource* device_background_texture,
+    skia::RefPtr<SkImage> filtered_device_background,
+    const gfx::Rect& backdrop_bounding_rect) {
   // This method draws a background filter, which applies a filter to any pixels
   // behind the quad and seen through its background.  The algorithm works as
   // follows:
-  // 1. Compute a bounding box around the pixels that will be visible through
-  // the quad.
+  // 1. Read the pixels in the bounding box into a buffer.
+  // Moved to GLRenderer::GetBackdropBoundingBoxForRenderPassQuad().
   // 2. Read the pixels in the bounding box into a buffer R.
+  // Moved to GLRenderer::GetBackdropTexture().
   // 3. Apply the background filter to R, so that it is applied in the pixels'
-  // coordinate space.
+  // coordinate space. Moved to GLRenderer::ApplyBackgroundFilters().
   // 4. Apply the quad's inverse transform to map the pixels in R into the
   // quad's content space. This implicitly clips R by the content bounds of the
   // quad since the destination texture has bounds matching the quad's content.
@@ -881,56 +952,7 @@
   // TODO(danakj): When this algorithm changes, update
   // LayerTreeHost::PrioritizeTextures() accordingly.
 
-  // TODO(danakj): We only allow background filters on an opaque render surface
-  // because other surfaces may contain translucent pixels, and the contents
-  // behind those translucent pixels wouldn't have the filter applied.
-  bool apply_background_filters =
-      !frame->current_render_pass->has_transparent_background;
-  DCHECK(!frame->current_texture);
-
-  // TODO(ajuma): Add support for reference filters once
-  // FilterOperations::GetOutsets supports reference filters.
-  if (apply_background_filters && quad->background_filters.HasReferenceFilter())
-    apply_background_filters = false;
-
-  // TODO(danakj): Do a single readback for both the surface and replica and
-  // cache the filtered results (once filter textures are not reused).
-  gfx::Rect window_rect = gfx::ToEnclosingRect(MathUtil::MapClippedRect(
-      contents_device_transform, SharedGeometryQuad().BoundingBox()));
-
-  int top, right, bottom, left;
-  quad->background_filters.GetOutsets(&top, &right, &bottom, &left);
-  window_rect.Inset(-left, -top, -right, -bottom);
-
-  window_rect.Intersect(
-      MoveFromDrawToWindowSpace(frame->current_render_pass->output_rect));
-
-  scoped_ptr<ScopedResource> device_background_texture =
-      ScopedResource::Create(resource_provider_);
-  // CopyTexImage2D fails when called on a texture having immutable storage.
-  device_background_texture->Allocate(
-      window_rect.size(), ResourceProvider::TextureHintDefault, RGBA_8888);
-  {
-    ResourceProvider::ScopedWriteLockGL lock(resource_provider_,
-                                             device_background_texture->id());
-    GetFramebufferTexture(
-        lock.texture_id(), device_background_texture->format(), window_rect);
-  }
-
-  skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter(
-      quad->background_filters, device_background_texture->size());
-
-  skia::RefPtr<SkImage> filtered_device_background;
-  if (apply_background_filters) {
-    filtered_device_background =
-        ApplyImageFilter(ScopedUseGrContext::Create(this, frame),
-                         resource_provider_,
-                         quad->rect.origin(),
-                         quad->filters_scale,
-                         filter.get(),
-                         device_background_texture.get());
-  }
-  *background_changed = (filtered_device_background != NULL);
+  DCHECK(device_background_texture);
 
   int filtered_device_background_texture_id = 0;
   scoped_ptr<ResourceProvider::ScopedReadLockGL> lock;
@@ -968,15 +990,15 @@
     gl_->Clear(GL_COLOR_BUFFER_BIT);
 #endif
 
-    // The filtered_deveice_background_texture is oriented the same as the frame
-    // buffer. The transform we are copying with has a vertical flip, as well as
+    // The background_texture is oriented the same as the frame buffer.
+    // The transform we are copying with has a vertical flip, as well as
     // the |device_to_framebuffer_transform|, which cancel each other out. So do
     // not flip the contents in the shader to maintain orientation.
     bool flip_vertically = false;
 
     CopyTextureToFramebuffer(frame,
                              filtered_device_background_texture_id,
-                             window_rect,
+                             backdrop_bounding_rect,
                              device_to_framebuffer_transform,
                              flip_vertically);
   }
@@ -1011,8 +1033,8 @@
     return;
 
   bool need_background_texture = !ShouldApplyBlendModeUsingBlendFunc(quad) ||
-                                 !quad->background_filters.IsEmpty();
-  bool background_changed = false;
+                                 ShouldApplyBackgroundFilters(frame, quad);
+
   scoped_ptr<ScopedResource> background_texture;
   if (need_background_texture) {
     // The pixels from the filtered background should completely replace the
@@ -1021,12 +1043,33 @@
     if (disable_blending)
       SetBlendEnabled(false);
 
-    background_texture =
-        GetBackgroundWithFilters(frame,
-                                 quad,
-                                 contents_device_transform,
-                                 contents_device_transform_inverse,
-                                 &background_changed);
+    // Compute a bounding box around the pixels that will be visible through
+    // the quad.
+    gfx::Rect backdrop_rect = GetBackdropBoundingBoxForRenderPassQuad(
+        frame, quad, contents_device_transform);
+
+    // Read the pixels in the bounding box into a buffer R.
+    scoped_ptr<ScopedResource> scoped_background_texture =
+        GetBackdropTexture(backdrop_rect);
+
+    skia::RefPtr<SkImage> background_with_filters;
+    if (ShouldApplyBackgroundFilters(frame, quad)) {
+      // Apply the background filters to R, so that it is applied in the pixels'
+      // coordinate space.
+      background_with_filters =
+          ApplyBackgroundFilters(frame, quad, scoped_background_texture.get());
+    }
+    // Apply the quad's inverse transform to map the pixels in R into the
+    // quad's content space. This implicitly clips R by the content bounds of
+    // the quad since the destination texture has bounds matching the quad's
+    // content.
+    background_texture = ApplyInverseTransformForBackgroundFilters(
+        frame,
+        quad,
+        contents_device_transform_inverse,
+        scoped_background_texture.get(),
+        background_with_filters,
+        backdrop_rect);
 
     if (disable_blending)
       SetBlendEnabled(true);
@@ -1065,6 +1108,9 @@
     }
   }
 
+  // If blending is applied using shaders, the background texture with
+  // filters will be used as backdrop for blending operation, so we don't
+  // need to copy it to the frame buffer.
   if (background_texture && !ShouldApplyBlendModeUsingBlendFunc(quad)) {
     filter_bitmap =
         ApplyBlendModeWithBackdrop(ScopedUseGrContext::Create(this, frame),
@@ -1073,10 +1119,9 @@
                                    contents_texture,
                                    background_texture.get(),
                                    quad->shared_quad_state->blend_mode);
-  }
-
-  // Draw the background texture if it has some filters applied.
-  if (background_texture && background_changed) {
+  } else if (background_texture) {
+    // Draw the background texture if it has some filters applied.
+    DCHECK(ShouldApplyBackgroundFilters(frame, quad));
     DCHECK(background_texture->size() == quad->rect.size());
     ResourceProvider::ScopedReadLockGL lock(resource_provider_,
                                             background_texture->id());
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h
index 87739da..2cfc47f 100644
--- a/cc/output/gl_renderer.h
+++ b/cc/output/gl_renderer.h
@@ -57,13 +57,13 @@
 
   virtual ~GLRenderer();
 
-  virtual const RendererCapabilitiesImpl& Capabilities() const OVERRIDE;
+  virtual const RendererCapabilitiesImpl& Capabilities() const override;
 
   // Waits for rendering to finish.
-  virtual void Finish() OVERRIDE;
+  virtual void Finish() override;
 
-  virtual void DoNoOp() OVERRIDE;
-  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) OVERRIDE;
+  virtual void DoNoOp() override;
+  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) override;
 
   virtual bool IsContextLost();
 
@@ -80,7 +80,7 @@
              TextureMailboxDeleter* texture_mailbox_deleter,
              int highp_threshold_min);
 
-  virtual void DidChangeVisibility() OVERRIDE;
+  virtual void DidChangeVisibility() override;
 
   bool IsBackbufferDiscarded() const { return is_backbuffer_discarded_; }
 
@@ -101,26 +101,26 @@
   void SetBlendEnabled(bool enabled);
   bool blend_enabled() const { return blend_shadow_; }
 
-  virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) OVERRIDE;
+  virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) override;
   virtual bool BindFramebufferToTexture(DrawingFrame* frame,
                                         const ScopedResource* resource,
-                                        const gfx::Rect& target_rect) OVERRIDE;
-  virtual void SetDrawViewport(const gfx::Rect& window_space_viewport) OVERRIDE;
-  virtual void SetScissorTestRect(const gfx::Rect& scissor_rect) OVERRIDE;
+                                        const gfx::Rect& target_rect) override;
+  virtual void SetDrawViewport(const gfx::Rect& window_space_viewport) override;
+  virtual void SetScissorTestRect(const gfx::Rect& scissor_rect) override;
   virtual void DiscardPixels(bool has_external_stencil_test,
-                             bool draw_rect_covers_full_surface) OVERRIDE;
+                             bool draw_rect_covers_full_surface) override;
   virtual void ClearFramebuffer(DrawingFrame* frame,
-                                bool has_external_stencil_test) OVERRIDE;
-  virtual void DoDrawQuad(DrawingFrame* frame, const class DrawQuad*) OVERRIDE;
-  virtual void BeginDrawingFrame(DrawingFrame* frame) OVERRIDE;
-  virtual void FinishDrawingFrame(DrawingFrame* frame) OVERRIDE;
-  virtual bool FlippedFramebuffer() const OVERRIDE;
-  virtual void EnsureScissorTestEnabled() OVERRIDE;
-  virtual void EnsureScissorTestDisabled() OVERRIDE;
+                                bool has_external_stencil_test) override;
+  virtual void DoDrawQuad(DrawingFrame* frame, const class DrawQuad*) override;
+  virtual void BeginDrawingFrame(DrawingFrame* frame) override;
+  virtual void FinishDrawingFrame(DrawingFrame* frame) override;
+  virtual bool FlippedFramebuffer() const override;
+  virtual void EnsureScissorTestEnabled() override;
+  virtual void EnsureScissorTestDisabled() override;
   virtual void CopyCurrentRenderPassToBitmap(
       DrawingFrame* frame,
-      scoped_ptr<CopyOutputRequest> request) OVERRIDE;
-  virtual void FinishDrawingQuadList() OVERRIDE;
+      scoped_ptr<CopyOutputRequest> request) override;
+  virtual void FinishDrawingQuadList() override;
 
   // Check if quad needs antialiasing and if so, inflate the quad and
   // fill edge array for fragment shader.  local_quad is set to
@@ -146,12 +146,27 @@
   static bool ShouldApplyBlendModeUsingBlendFunc(const DrawQuad* quad);
   void ApplyBlendModeUsingBlendFunc(const DrawQuad* quad);
   void RestoreBlendFuncToDefault();
-  scoped_ptr<ScopedResource> GetBackgroundWithFilters(
+
+  gfx::Rect GetBackdropBoundingBoxForRenderPassQuad(
       DrawingFrame* frame,
       const RenderPassDrawQuad* quad,
-      const gfx::Transform& contents_device_transform,
-      const gfx::Transform& contents_device_transformInverse,
-      bool* background_changed);
+      const gfx::Transform& contents_device_transform);
+  scoped_ptr<ScopedResource> GetBackdropTexture(const gfx::Rect& bounding_rect);
+
+  static bool ShouldApplyBackgroundFilters(DrawingFrame* frame,
+                                           const RenderPassDrawQuad* quad);
+  skia::RefPtr<SkImage> ApplyBackgroundFilters(
+      DrawingFrame* frame,
+      const RenderPassDrawQuad* quad,
+      ScopedResource* background_texture);
+  scoped_ptr<ScopedResource> ApplyInverseTransformForBackgroundFilters(
+      DrawingFrame* frame,
+      const RenderPassDrawQuad* quad,
+      const gfx::Transform& contents_device_transform_inverse,
+      ScopedResource* background_texture,
+      skia::RefPtr<SkImage> backdrop_bitmap,
+      const gfx::Rect& backdrop_bounding_rect);
+
   void DrawRenderPassQuad(DrawingFrame* frame, const RenderPassDrawQuad* quad);
   void DrawSolidColorQuad(const DrawingFrame* frame,
                           const SolidColorDrawQuad* quad);
@@ -205,8 +220,8 @@
   void RestoreGLState();
   void RestoreFramebuffer(DrawingFrame* frame);
 
-  virtual void DiscardBackbuffer() OVERRIDE;
-  virtual void EnsureBackbuffer() OVERRIDE;
+  virtual void DiscardBackbuffer() override;
+  virtual void EnsureBackbuffer() override;
   void EnforceMemoryPolicy();
 
   void ScheduleOverlays(DrawingFrame* frame);
diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc
index c98652c..45b6d2a 100644
--- a/cc/output/gl_renderer_unittest.cc
+++ b/cc/output/gl_renderer_unittest.cc
@@ -363,35 +363,35 @@
   virtual void getAttachedShaders(GLuint program,
                                   GLsizei max_count,
                                   GLsizei* count,
-                                  GLuint* shaders) OVERRIDE {
+                                  GLuint* shaders) override {
     ADD_FAILURE();
   }
-  virtual GLint getAttribLocation(GLuint program, const GLchar* name) OVERRIDE {
+  virtual GLint getAttribLocation(GLuint program, const GLchar* name) override {
     ADD_FAILURE();
     return 0;
   }
-  virtual void getBooleanv(GLenum pname, GLboolean* value) OVERRIDE {
+  virtual void getBooleanv(GLenum pname, GLboolean* value) override {
     ADD_FAILURE();
   }
   virtual void getBufferParameteriv(GLenum target,
                                     GLenum pname,
-                                    GLint* value) OVERRIDE {
+                                    GLint* value) override {
     ADD_FAILURE();
   }
-  virtual GLenum getError() OVERRIDE {
+  virtual GLenum getError() override {
     ADD_FAILURE();
     return GL_NO_ERROR;
   }
-  virtual void getFloatv(GLenum pname, GLfloat* value) OVERRIDE {
+  virtual void getFloatv(GLenum pname, GLfloat* value) override {
     ADD_FAILURE();
   }
   virtual void getFramebufferAttachmentParameteriv(GLenum target,
                                                    GLenum attachment,
                                                    GLenum pname,
-                                                   GLint* value) OVERRIDE {
+                                                   GLint* value) override {
     ADD_FAILURE();
   }
-  virtual void getIntegerv(GLenum pname, GLint* value) OVERRIDE {
+  virtual void getIntegerv(GLenum pname, GLint* value) override {
     if (pname == GL_MAX_TEXTURE_SIZE) {
       // MAX_TEXTURE_SIZE is cached client side, so it's OK to query.
       *value = 1024;
@@ -404,7 +404,7 @@
   // mode, but not release.
   virtual void getProgramiv(GLuint program,
                             GLenum pname,
-                            GLint* value) OVERRIDE {
+                            GLint* value) override {
 #ifndef NDEBUG
     *value = 1;
 #else
@@ -412,7 +412,7 @@
 #endif
   }
 
-  virtual void getShaderiv(GLuint shader, GLenum pname, GLint* value) OVERRIDE {
+  virtual void getShaderiv(GLuint shader, GLenum pname, GLint* value) override {
 #ifndef NDEBUG
     *value = 1;
 #else
@@ -422,53 +422,53 @@
 
   virtual void getRenderbufferParameteriv(GLenum target,
                                           GLenum pname,
-                                          GLint* value) OVERRIDE {
+                                          GLint* value) override {
     ADD_FAILURE();
   }
 
   virtual void getShaderPrecisionFormat(GLenum shadertype,
                                         GLenum precisiontype,
                                         GLint* range,
-                                        GLint* precision) OVERRIDE {
+                                        GLint* precision) override {
     ADD_FAILURE();
   }
   virtual void getTexParameterfv(GLenum target,
                                  GLenum pname,
-                                 GLfloat* value) OVERRIDE {
+                                 GLfloat* value) override {
     ADD_FAILURE();
   }
   virtual void getTexParameteriv(GLenum target,
                                  GLenum pname,
-                                 GLint* value) OVERRIDE {
+                                 GLint* value) override {
     ADD_FAILURE();
   }
   virtual void getUniformfv(GLuint program,
                             GLint location,
-                            GLfloat* value) OVERRIDE {
+                            GLfloat* value) override {
     ADD_FAILURE();
   }
   virtual void getUniformiv(GLuint program,
                             GLint location,
-                            GLint* value) OVERRIDE {
+                            GLint* value) override {
     ADD_FAILURE();
   }
   virtual GLint getUniformLocation(GLuint program,
-                                   const GLchar* name) OVERRIDE {
+                                   const GLchar* name) override {
     ADD_FAILURE();
     return 0;
   }
   virtual void getVertexAttribfv(GLuint index,
                                  GLenum pname,
-                                 GLfloat* value) OVERRIDE {
+                                 GLfloat* value) override {
     ADD_FAILURE();
   }
   virtual void getVertexAttribiv(GLuint index,
                                  GLenum pname,
-                                 GLint* value) OVERRIDE {
+                                 GLint* value) override {
     ADD_FAILURE();
   }
   virtual GLsizeiptr getVertexAttribOffset(GLuint index,
-                                           GLenum pname) OVERRIDE {
+                                           GLenum pname) override {
     ADD_FAILURE();
     return 0;
   }
@@ -504,12 +504,12 @@
 
   virtual void getProgramiv(GLuint program,
                             GLenum pname,
-                            GLint* value) OVERRIDE {
+                            GLint* value) override {
     context_lost_ = true;
     *value = 0;
   }
 
-  virtual void getShaderiv(GLuint shader, GLenum pname, GLint* value) OVERRIDE {
+  virtual void getShaderiv(GLuint shader, GLenum pname, GLint* value) override {
     context_lost_ = true;
     *value = 0;
   }
@@ -700,17 +700,17 @@
       : last_call_was_set_visibility_(false) {}
 
   // TestWebGraphicsContext3D methods.
-  virtual void flush() OVERRIDE { last_call_was_set_visibility_ = false; }
-  virtual void deleteTexture(GLuint) OVERRIDE {
+  virtual void flush() override { last_call_was_set_visibility_ = false; }
+  virtual void deleteTexture(GLuint) override {
     last_call_was_set_visibility_ = false;
   }
-  virtual void deleteFramebuffer(GLuint) OVERRIDE {
+  virtual void deleteFramebuffer(GLuint) override {
     last_call_was_set_visibility_ = false;
   }
-  virtual void deleteQueryEXT(GLuint) OVERRIDE {
+  virtual void deleteQueryEXT(GLuint) override {
     last_call_was_set_visibility_ = false;
   }
-  virtual void deleteRenderbuffer(GLuint) OVERRIDE {
+  virtual void deleteRenderbuffer(GLuint) override {
     last_call_was_set_visibility_ = false;
   }
 
@@ -979,14 +979,14 @@
  public:
   ScissorTestOnClearCheckingContext() : scissor_enabled_(false) {}
 
-  virtual void clear(GLbitfield) OVERRIDE { EXPECT_FALSE(scissor_enabled_); }
+  virtual void clear(GLbitfield) override { EXPECT_FALSE(scissor_enabled_); }
 
-  virtual void enable(GLenum cap) OVERRIDE {
+  virtual void enable(GLenum cap) override {
     if (cap == GL_SCISSOR_TEST)
       scissor_enabled_ = true;
   }
 
-  virtual void disable(GLenum cap) OVERRIDE {
+  virtual void disable(GLenum cap) override {
     if (cap == GL_SCISSOR_TEST)
       scissor_enabled_ = false;
   }
@@ -1069,7 +1069,7 @@
 
   virtual void discardFramebufferEXT(GLenum target,
                                      GLsizei numAttachments,
-                                     const GLenum* attachments) OVERRIDE {
+                                     const GLenum* attachments) override {
     ++discarded_;
   }
 
@@ -1088,7 +1088,7 @@
                           false) {
     surface_size_ = gfx::Size(500, 500);
   }
-  virtual void Reshape(const gfx::Size& size, float scale_factor) OVERRIDE {}
+  virtual void Reshape(const gfx::Size& size, float scale_factor) override {}
   void set_fixed_size(const gfx::Size& size) { surface_size_ = size; }
 };
 
@@ -1258,7 +1258,7 @@
   }
 
   virtual void viewport(GLint x, GLint y, GLsizei width, GLsizei height)
-      OVERRIDE {
+      override {
     EXPECT_EQ(10, x);
     EXPECT_EQ(390, y);
     EXPECT_EQ(100, width);
@@ -1267,7 +1267,7 @@
   }
 
   virtual void scissor(GLint x, GLint y, GLsizei width, GLsizei height)
-      OVERRIDE {
+      override {
     EXPECT_EQ(30, x);
     EXPECT_EQ(450, y);
     EXPECT_EQ(20, width);
diff --git a/cc/output/output_surface_unittest.cc b/cc/output/output_surface_unittest.cc
index 4c51e1a..aca1d27 100644
--- a/cc/output/output_surface_unittest.cc
+++ b/cc/output/output_surface_unittest.cc
@@ -61,8 +61,8 @@
   virtual ~TestSoftwareOutputDevice();
 
   // Overriden from cc:SoftwareOutputDevice
-  virtual void DiscardBackbuffer() OVERRIDE;
-  virtual void EnsureBackbuffer() OVERRIDE;
+  virtual void DiscardBackbuffer() override;
+  virtual void EnsureBackbuffer() override;
 
   int discard_backbuffer_count() { return discard_backbuffer_count_; }
   int ensure_backbuffer_count() { return ensure_backbuffer_count_; }
diff --git a/cc/output/overlay_strategy_single_on_top.cc b/cc/output/overlay_strategy_single_on_top.cc
index 6ac96b2..94d35c4 100644
--- a/cc/output/overlay_strategy_single_on_top.cc
+++ b/cc/output/overlay_strategy_single_on_top.cc
@@ -28,8 +28,8 @@
   DCHECK(root_render_pass);
 
   QuadList& quad_list = root_render_pass->quad_list;
-  QuadList::Iterator candidate_iterator = quad_list.end();
-  for (QuadList::Iterator it = quad_list.begin(); it != quad_list.end(); ++it) {
+  auto candidate_iterator = quad_list.end();
+  for (auto it = quad_list.begin(); it != quad_list.end(); ++it) {
     const DrawQuad* draw_quad = &*it;
     if (draw_quad->material == DrawQuad::TEXTURE_CONTENT) {
       const TextureDrawQuad& quad = *TextureDrawQuad::MaterialCast(draw_quad);
@@ -40,8 +40,7 @@
       bool intersects = false;
       gfx::RectF rect = draw_quad->rect;
       draw_quad->quadTransform().TransformRect(&rect);
-      for (QuadList::Iterator overlap_iter = quad_list.begin();
-           overlap_iter != it;
+      for (auto overlap_iter = quad_list.cbegin(); overlap_iter != it;
            ++overlap_iter) {
         gfx::RectF overlap_rect = overlap_iter->rect;
         overlap_iter->quadTransform().TransformRect(&overlap_rect);
diff --git a/cc/output/overlay_strategy_single_on_top.h b/cc/output/overlay_strategy_single_on_top.h
index d984d3d..1bf6bd8 100644
--- a/cc/output/overlay_strategy_single_on_top.h
+++ b/cc/output/overlay_strategy_single_on_top.h
@@ -20,7 +20,7 @@
   OverlayStrategySingleOnTop(OverlayCandidateValidator* capability_checker,
                              ResourceProvider* resource_provider);
   virtual bool Attempt(RenderPassList* render_passes_in_draw_order,
-                       OverlayCandidateList* candidate_list) OVERRIDE;
+                       OverlayCandidateList* candidate_list) override;
 
  private:
   OverlayCandidateValidator* capability_checker_;
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
index 71f1ddc..698b42b 100644
--- a/cc/output/overlay_unittest.cc
+++ b/cc/output/overlay_unittest.cc
@@ -40,7 +40,7 @@
 
 class SingleOverlayValidator : public OverlayCandidateValidator {
  public:
-  virtual void CheckOverlaySupport(OverlayCandidateList* surfaces) OVERRIDE;
+  virtual void CheckOverlaySupport(OverlayCandidateList* surfaces) override;
 };
 
 void SingleOverlayValidator::CheckOverlaySupport(
@@ -62,7 +62,7 @@
   SingleOverlayProcessor(OutputSurface* surface,
                          ResourceProvider* resource_provider);
   // Virtual to allow testing different strategies.
-  virtual void Initialize() OVERRIDE;
+  virtual void Initialize() override;
 };
 
 SingleOverlayProcessor::SingleOverlayProcessor(
@@ -206,9 +206,9 @@
               actual->shared_quad_state_list.size());
     EXPECT_EQ(expected->quad_list.size(), actual->quad_list.size());
 
-    for (QuadList::Iterator exp_iter = expected->quad_list.begin(),
-                            act_iter = actual->quad_list.begin();
-         exp_iter != expected->quad_list.end();
+    for (auto exp_iter = expected->quad_list.cbegin(),
+              act_iter = actual->quad_list.cbegin();
+         exp_iter != expected->quad_list.cend();
          ++exp_iter, ++act_iter) {
       EXPECT_EQ(exp_iter->rect.ToString(), act_iter->rect.ToString());
       EXPECT_EQ(exp_iter->shared_quad_state->content_bounds.ToString(),
@@ -529,7 +529,7 @@
 
   MOCK_METHOD2(DoDrawQuad, void(DrawingFrame* frame, const DrawQuad* quad));
 
-  virtual void FinishDrawingFrame(DrawingFrame* frame) OVERRIDE {
+  virtual void FinishDrawingFrame(DrawingFrame* frame) override {
     GLRenderer::FinishDrawingFrame(frame);
 
     if (!expect_overlays_) {
@@ -552,7 +552,7 @@
 class FakeRendererClient : public RendererClient {
  public:
   // RendererClient methods.
-  virtual void SetFullRootLayerDamage() OVERRIDE {}
+  virtual void SetFullRootLayerDamage() override {}
 };
 
 class MockOverlayScheduler {
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index 6d5af36..00c9100 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -12,6 +12,7 @@
 #include "cc/test/fake_picture_pile_impl.h"
 #include "cc/test/pixel_test.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
+#include "media/base/video_frame.h"
 #include "third_party/skia/include/core/SkColorPriv.h"
 #include "third_party/skia/include/core/SkImageFilter.h"
 #include "third_party/skia/include/core/SkMatrix.h"
@@ -383,6 +384,346 @@
       FuzzyPixelOffByOneComparator(true)));
 }
 
+class VideoGLRendererPixelTest : public GLRendererPixelTest {
+ protected:
+  void CreateTestYUVVideoDrawQuad_Striped(const SharedQuadState* shared_state,
+                                          media::VideoFrame::Format format,
+                                          bool is_transparent,
+                                          const gfx::RectF& tex_coord_rect,
+                                          RenderPass* render_pass) {
+    const gfx::Rect rect(this->device_viewport_size_);
+
+    scoped_refptr<media::VideoFrame> video_frame =
+        media::VideoFrame::CreateFrame(
+            format, rect.size(), rect, rect.size(), base::TimeDelta());
+
+    // YUV values representing a striped pattern, for validating texture
+    // coordinates for sampling.
+    uint8_t y_value = 0;
+    uint8_t u_value = 0;
+    uint8_t v_value = 0;
+    for (int i = 0; i < video_frame->rows(media::VideoFrame::kYPlane); ++i) {
+      uint8_t* y_row = video_frame->data(media::VideoFrame::kYPlane) +
+                       video_frame->stride(media::VideoFrame::kYPlane) * i;
+      for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kYPlane);
+           ++j) {
+        y_row[j] = (y_value += 1);
+      }
+    }
+    for (int i = 0; i < video_frame->rows(media::VideoFrame::kUPlane); ++i) {
+      uint8_t* u_row = video_frame->data(media::VideoFrame::kUPlane) +
+                       video_frame->stride(media::VideoFrame::kUPlane) * i;
+      uint8_t* v_row = video_frame->data(media::VideoFrame::kVPlane) +
+                       video_frame->stride(media::VideoFrame::kVPlane) * i;
+      for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane);
+           ++j) {
+        u_row[j] = (u_value += 3);
+        v_row[j] = (v_value += 5);
+      }
+    }
+    CreateTestYUVVideoDrawQuad_FromVideoFrame(
+        shared_state, video_frame, is_transparent, tex_coord_rect, render_pass);
+  }
+
+  void CreateTestYUVVideoDrawQuad_Solid(const SharedQuadState* shared_state,
+                                        media::VideoFrame::Format format,
+                                        bool is_transparent,
+                                        const gfx::RectF& tex_coord_rect,
+                                        uint8 y,
+                                        uint8 u,
+                                        uint8 v,
+                                        RenderPass* render_pass) {
+    const gfx::Rect rect(this->device_viewport_size_);
+
+    scoped_refptr<media::VideoFrame> video_frame =
+        media::VideoFrame::CreateFrame(
+            format, rect.size(), rect, rect.size(), base::TimeDelta());
+
+    // YUV values of a solid, constant, color. Useful for testing that color
+    // space/color range are being handled properly.
+    memset(video_frame->data(media::VideoFrame::kYPlane),
+           y,
+           video_frame->stride(media::VideoFrame::kYPlane) *
+               video_frame->rows(media::VideoFrame::kYPlane));
+    memset(video_frame->data(media::VideoFrame::kUPlane),
+           u,
+           video_frame->stride(media::VideoFrame::kUPlane) *
+               video_frame->rows(media::VideoFrame::kUPlane));
+    memset(video_frame->data(media::VideoFrame::kVPlane),
+           v,
+           video_frame->stride(media::VideoFrame::kVPlane) *
+               video_frame->rows(media::VideoFrame::kVPlane));
+
+    CreateTestYUVVideoDrawQuad_FromVideoFrame(
+        shared_state, video_frame, is_transparent, tex_coord_rect, render_pass);
+  }
+
+  void CreateTestYUVVideoDrawQuad_FromVideoFrame(
+      const SharedQuadState* shared_state,
+      scoped_refptr<media::VideoFrame> video_frame,
+      bool is_transparent,
+      const gfx::RectF& tex_coord_rect,
+      RenderPass* render_pass) {
+    const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A);
+    const YUVVideoDrawQuad::ColorSpace color_space =
+        (video_frame->format() == media::VideoFrame::YV12J
+             ? YUVVideoDrawQuad::REC_601_JPEG
+             : YUVVideoDrawQuad::REC_601);
+    const gfx::Rect rect(this->device_viewport_size_);
+    const gfx::Rect opaque_rect(0, 0, 0, 0);
+
+    if (with_alpha)
+      memset(video_frame->data(media::VideoFrame::kAPlane),
+             is_transparent ? 0 : 128,
+             video_frame->stride(media::VideoFrame::kAPlane) *
+                 video_frame->rows(media::VideoFrame::kAPlane));
+
+    VideoFrameExternalResources resources =
+        video_resource_updater_->CreateExternalResourcesFromVideoFrame(
+            video_frame);
+
+    EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type);
+    EXPECT_EQ(media::VideoFrame::NumPlanes(video_frame->format()),
+              resources.mailboxes.size());
+    EXPECT_EQ(media::VideoFrame::NumPlanes(video_frame->format()),
+              resources.release_callbacks.size());
+
+    ResourceProvider::ResourceId y_resource =
+        resource_provider_->CreateResourceFromTextureMailbox(
+            resources.mailboxes[media::VideoFrame::kYPlane],
+            SingleReleaseCallbackImpl::Create(
+                resources.release_callbacks[media::VideoFrame::kYPlane]));
+    ResourceProvider::ResourceId u_resource =
+        resource_provider_->CreateResourceFromTextureMailbox(
+            resources.mailboxes[media::VideoFrame::kUPlane],
+            SingleReleaseCallbackImpl::Create(
+                resources.release_callbacks[media::VideoFrame::kUPlane]));
+    ResourceProvider::ResourceId v_resource =
+        resource_provider_->CreateResourceFromTextureMailbox(
+            resources.mailboxes[media::VideoFrame::kVPlane],
+            SingleReleaseCallbackImpl::Create(
+                resources.release_callbacks[media::VideoFrame::kVPlane]));
+    ResourceProvider::ResourceId a_resource = 0;
+    if (with_alpha) {
+      a_resource = resource_provider_->CreateResourceFromTextureMailbox(
+          resources.mailboxes[media::VideoFrame::kAPlane],
+          SingleReleaseCallbackImpl::Create(
+              resources.release_callbacks[media::VideoFrame::kAPlane]));
+    }
+
+    YUVVideoDrawQuad* yuv_quad =
+        render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
+    yuv_quad->SetNew(shared_state,
+                     rect,
+                     opaque_rect,
+                     rect,
+                     tex_coord_rect,
+                     y_resource,
+                     u_resource,
+                     v_resource,
+                     a_resource,
+                     color_space);
+  }
+
+  virtual void SetUp() override {
+    GLRendererPixelTest::SetUp();
+    video_resource_updater_.reset(new VideoResourceUpdater(
+        output_surface_->context_provider(), resource_provider_.get()));
+  }
+
+ private:
+  scoped_ptr<VideoResourceUpdater> video_resource_updater_;
+};
+
+TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) {
+  gfx::Rect rect(this->device_viewport_size_);
+
+  RenderPassId id(1, 1);
+  scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
+
+  CreateTestYUVVideoDrawQuad_Striped(shared_state,
+                                     media::VideoFrame::YV12,
+                                     false,
+                                     gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
+                                     pass.get());
+
+  RenderPassList pass_list;
+  pass_list.push_back(pass.Pass());
+
+  EXPECT_TRUE(
+      this->RunPixelTest(&pass_list,
+                         base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")),
+                         FuzzyPixelOffByOneComparator(true)));
+}
+
+TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) {
+  gfx::Rect rect(this->device_viewport_size_);
+
+  RenderPassId id(1, 1);
+  scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
+
+  // Intentionally sets frame format to I420 for testing coverage.
+  CreateTestYUVVideoDrawQuad_Striped(shared_state,
+                                     media::VideoFrame::I420,
+                                     false,
+                                     gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f),
+                                     pass.get());
+
+  RenderPassList pass_list;
+  pass_list.push_back(pass.Pass());
+
+  EXPECT_TRUE(this->RunPixelTest(
+      &pass_list,
+      base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")),
+      FuzzyPixelOffByOneComparator(true)));
+}
+
+TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) {
+  gfx::Rect rect(this->device_viewport_size_);
+
+  RenderPassId id(1, 1);
+  scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
+
+  // In MPEG color range YUV values of (15,128,128) should produce black.
+  CreateTestYUVVideoDrawQuad_Solid(shared_state,
+                                   media::VideoFrame::YV12,
+                                   false,
+                                   gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
+                                   15,
+                                   128,
+                                   128,
+                                   pass.get());
+
+  RenderPassList pass_list;
+  pass_list.push_back(pass.Pass());
+
+  // If we didn't get black out of the YUV values above, then we probably have a
+  // color range issue.
+  EXPECT_TRUE(this->RunPixelTest(&pass_list,
+                                 base::FilePath(FILE_PATH_LITERAL("black.png")),
+                                 FuzzyPixelOffByOneComparator(true)));
+}
+
+TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) {
+  gfx::Rect rect(this->device_viewport_size_);
+
+  RenderPassId id(1, 1);
+  scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
+
+  // YUV of (149,43,21) should be green (0,255,0) in RGB.
+  CreateTestYUVVideoDrawQuad_Solid(shared_state,
+                                   media::VideoFrame::YV12J,
+                                   false,
+                                   gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
+                                   149,
+                                   43,
+                                   21,
+                                   pass.get());
+
+  RenderPassList pass_list;
+  pass_list.push_back(pass.Pass());
+
+  EXPECT_TRUE(this->RunPixelTest(&pass_list,
+                                 base::FilePath(FILE_PATH_LITERAL("green.png")),
+                                 FuzzyPixelOffByOneComparator(true)));
+}
+
+TEST_F(VideoGLRendererPixelTest, SimpleYUVJRectGrey) {
+  gfx::Rect rect(this->device_viewport_size_);
+
+  RenderPassId id(1, 1);
+  scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
+
+  // Dark grey in JPEG color range (in MPEG, this is black).
+  CreateTestYUVVideoDrawQuad_Solid(shared_state,
+                                   media::VideoFrame::YV12J,
+                                   false,
+                                   gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
+                                   15,
+                                   128,
+                                   128,
+                                   pass.get());
+
+  RenderPassList pass_list;
+  pass_list.push_back(pass.Pass());
+
+  EXPECT_TRUE(
+      this->RunPixelTest(&pass_list,
+                         base::FilePath(FILE_PATH_LITERAL("dark_grey.png")),
+                         FuzzyPixelOffByOneComparator(true)));
+}
+
+TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) {
+  gfx::Rect rect(this->device_viewport_size_);
+
+  RenderPassId id(1, 1);
+  scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
+
+  CreateTestYUVVideoDrawQuad_Striped(shared_state,
+                                     media::VideoFrame::YV12A,
+                                     false,
+                                     gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
+                                     pass.get());
+
+  SolidColorDrawQuad* color_quad =
+      pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+  color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false);
+
+  RenderPassList pass_list;
+  pass_list.push_back(pass.Pass());
+
+  EXPECT_TRUE(this->RunPixelTest(
+      &pass_list,
+      base::FilePath(FILE_PATH_LITERAL("yuv_stripes_alpha.png")),
+      FuzzyPixelOffByOneComparator(true)));
+}
+
+TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) {
+  gfx::Rect rect(this->device_viewport_size_);
+
+  RenderPassId id(1, 1);
+  scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
+
+  CreateTestYUVVideoDrawQuad_Striped(shared_state,
+                                     media::VideoFrame::YV12A,
+                                     true,
+                                     gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
+                                     pass.get());
+
+  SolidColorDrawQuad* color_quad =
+      pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+  color_quad->SetNew(shared_state, rect, rect, SK_ColorBLACK, false);
+
+  RenderPassList pass_list;
+  pass_list.push_back(pass.Pass());
+
+  EXPECT_TRUE(this->RunPixelTest(
+      &pass_list,
+      base::FilePath(FILE_PATH_LITERAL("black.png")),
+      ExactPixelComparator(true)));
+}
+
 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) {
   gfx::Rect viewport_rect(this->device_viewport_size_);
 
diff --git a/cc/output/software_renderer.h b/cc/output/software_renderer.h
index 5c9fef0..deac838 100644
--- a/cc/output/software_renderer.h
+++ b/cc/output/software_renderer.h
@@ -34,42 +34,42 @@
       ResourceProvider* resource_provider);
 
   virtual ~SoftwareRenderer();
-  virtual const RendererCapabilitiesImpl& Capabilities() const OVERRIDE;
-  virtual void Finish() OVERRIDE;
-  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) OVERRIDE;
+  virtual const RendererCapabilitiesImpl& Capabilities() const override;
+  virtual void Finish() override;
+  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) override;
   virtual void ReceiveSwapBuffersAck(
-      const CompositorFrameAck& ack) OVERRIDE;
-  virtual void DiscardBackbuffer() OVERRIDE;
-  virtual void EnsureBackbuffer() OVERRIDE;
+      const CompositorFrameAck& ack) override;
+  virtual void DiscardBackbuffer() override;
+  virtual void EnsureBackbuffer() override;
 
  protected:
-  virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) OVERRIDE;
+  virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) override;
   virtual bool BindFramebufferToTexture(
       DrawingFrame* frame,
       const ScopedResource* texture,
-      const gfx::Rect& target_rect) OVERRIDE;
-  virtual void SetDrawViewport(const gfx::Rect& window_space_viewport) OVERRIDE;
-  virtual void SetScissorTestRect(const gfx::Rect& scissor_rect) OVERRIDE;
+      const gfx::Rect& target_rect) override;
+  virtual void SetDrawViewport(const gfx::Rect& window_space_viewport) override;
+  virtual void SetScissorTestRect(const gfx::Rect& scissor_rect) override;
   virtual void DiscardPixels(bool has_external_stencil_test,
-                             bool draw_rect_covers_full_surface) OVERRIDE;
+                             bool draw_rect_covers_full_surface) override;
   virtual void ClearFramebuffer(DrawingFrame* frame,
-                                bool has_external_stencil_test) OVERRIDE;
-  virtual void DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) OVERRIDE;
-  virtual void BeginDrawingFrame(DrawingFrame* frame) OVERRIDE;
-  virtual void FinishDrawingFrame(DrawingFrame* frame) OVERRIDE;
-  virtual bool FlippedFramebuffer() const OVERRIDE;
-  virtual void EnsureScissorTestEnabled() OVERRIDE;
-  virtual void EnsureScissorTestDisabled() OVERRIDE;
+                                bool has_external_stencil_test) override;
+  virtual void DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) override;
+  virtual void BeginDrawingFrame(DrawingFrame* frame) override;
+  virtual void FinishDrawingFrame(DrawingFrame* frame) override;
+  virtual bool FlippedFramebuffer() const override;
+  virtual void EnsureScissorTestEnabled() override;
+  virtual void EnsureScissorTestDisabled() override;
   virtual void CopyCurrentRenderPassToBitmap(
       DrawingFrame* frame,
-      scoped_ptr<CopyOutputRequest> request) OVERRIDE;
+      scoped_ptr<CopyOutputRequest> request) override;
 
   SoftwareRenderer(RendererClient* client,
                    const LayerTreeSettings* settings,
                    OutputSurface* output_surface,
                    ResourceProvider* resource_provider);
 
-  virtual void DidChangeVisibility() OVERRIDE;
+  virtual void DidChangeVisibility() override;
 
  private:
   void ClearCanvas(SkColor color);
diff --git a/cc/output/software_renderer_unittest.cc b/cc/output/software_renderer_unittest.cc
index 2818ab6..5dfc158 100644
--- a/cc/output/software_renderer_unittest.cc
+++ b/cc/output/software_renderer_unittest.cc
@@ -54,7 +54,7 @@
   SoftwareRenderer* renderer() const { return renderer_.get(); }
 
   // RendererClient implementation.
-  virtual void SetFullRootLayerDamage() OVERRIDE {}
+  virtual void SetFullRootLayerDamage() override {}
 
   scoped_ptr<SkBitmap> DrawAndCopyOutput(RenderPassList* list,
                                          float device_scale_factor,
diff --git a/cc/quads/checkerboard_draw_quad.h b/cc/quads/checkerboard_draw_quad.h
index f99531d..71253e3 100644
--- a/cc/quads/checkerboard_draw_quad.h
+++ b/cc/quads/checkerboard_draw_quad.h
@@ -31,12 +31,12 @@
   SkColor color;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-    OVERRIDE;
+    override;
 
   static const CheckerboardDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/content_draw_quad_base.h b/cc/quads/content_draw_quad_base.h
index 5173d6c..d6b1995 100644
--- a/cc/quads/content_draw_quad_base.h
+++ b/cc/quads/content_draw_quad_base.h
@@ -42,7 +42,7 @@
  protected:
   ContentDrawQuadBase();
   virtual ~ContentDrawQuadBase();
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/debug_border_draw_quad.h b/cc/quads/debug_border_draw_quad.h
index 828d4e0..e2b6f70 100644
--- a/cc/quads/debug_border_draw_quad.h
+++ b/cc/quads/debug_border_draw_quad.h
@@ -34,12 +34,12 @@
   int width;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const DebugBorderDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/io_surface_draw_quad.h b/cc/quads/io_surface_draw_quad.h
index 86b4d52..3829156 100644
--- a/cc/quads/io_surface_draw_quad.h
+++ b/cc/quads/io_surface_draw_quad.h
@@ -44,12 +44,12 @@
   Orientation orientation;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const IOSurfaceDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/list_container.cc b/cc/quads/list_container.cc
index fd4e2f4..cc09a22 100644
--- a/cc/quads/list_container.cc
+++ b/cc/quads/list_container.cc
@@ -279,7 +279,7 @@
 
 template <typename BaseElementType>
 typename ListContainer<BaseElementType>::ConstReverseIterator
-ListContainer<BaseElementType>::rbegin() const {
+ListContainer<BaseElementType>::crbegin() const {
   if (data_->IsEmpty())
     return ConstReverseIterator(data_.get(), 0, NULL, 0);
 
@@ -290,11 +290,23 @@
 
 template <typename BaseElementType>
 typename ListContainer<BaseElementType>::ConstReverseIterator
-ListContainer<BaseElementType>::rend() const {
+ListContainer<BaseElementType>::crend() const {
   return ConstReverseIterator(data_.get(), 0, NULL, size());
 }
 
 template <typename BaseElementType>
+typename ListContainer<BaseElementType>::ConstReverseIterator
+ListContainer<BaseElementType>::rbegin() const {
+  return crbegin();
+}
+
+template <typename BaseElementType>
+typename ListContainer<BaseElementType>::ConstReverseIterator
+ListContainer<BaseElementType>::rend() const {
+  return crend();
+}
+
+template <typename BaseElementType>
 typename ListContainer<BaseElementType>::ReverseIterator
 ListContainer<BaseElementType>::rbegin() {
   if (data_->IsEmpty())
@@ -313,7 +325,7 @@
 
 template <typename BaseElementType>
 typename ListContainer<BaseElementType>::ConstIterator
-ListContainer<BaseElementType>::begin() const {
+ListContainer<BaseElementType>::cbegin() const {
   if (data_->IsEmpty())
     return ConstIterator(data_.get(), 0, NULL, 0);
 
@@ -322,7 +334,7 @@
 
 template <typename BaseElementType>
 typename ListContainer<BaseElementType>::ConstIterator
-ListContainer<BaseElementType>::end() const {
+ListContainer<BaseElementType>::cend() const {
   if (data_->IsEmpty())
     return ConstIterator(data_.get(), 0, NULL, size());
 
@@ -331,6 +343,18 @@
 }
 
 template <typename BaseElementType>
+typename ListContainer<BaseElementType>::ConstIterator
+ListContainer<BaseElementType>::begin() const {
+  return cbegin();
+}
+
+template <typename BaseElementType>
+typename ListContainer<BaseElementType>::ConstIterator
+ListContainer<BaseElementType>::end() const {
+  return cend();
+}
+
+template <typename BaseElementType>
 typename ListContainer<BaseElementType>::Iterator
 ListContainer<BaseElementType>::begin() {
   if (data_->IsEmpty())
diff --git a/cc/quads/list_container.h b/cc/quads/list_container.h
index c3c19b0..24c24ac 100644
--- a/cc/quads/list_container.h
+++ b/cc/quads/list_container.h
@@ -173,15 +173,21 @@
   // This function does not deallocate memory.
   void EraseAndInvalidateAllPointers(Iterator position);
 
+  ConstReverseIterator crbegin() const;
+  ConstReverseIterator crend() const;
   ConstReverseIterator rbegin() const;
   ConstReverseIterator rend() const;
   ReverseIterator rbegin();
   ReverseIterator rend();
+  ConstIterator cbegin() const;
+  ConstIterator cend() const;
   ConstIterator begin() const;
   ConstIterator end() const;
   Iterator begin();
   Iterator end();
 
+  // TODO(weiliangc): front(), back() and ElementAt() function should return
+  // reference, consistent with container-of-object.
   BaseElementType* front();
   BaseElementType* back();
   const BaseElementType* front() const;
diff --git a/cc/quads/list_container_unittest.cc b/cc/quads/list_container_unittest.cc
index cb79f7a..8b68852 100644
--- a/cc/quads/list_container_unittest.cc
+++ b/cc/quads/list_container_unittest.cc
@@ -31,11 +31,11 @@
  public:
   virtual ~SimpleDrawQuad() {}
   virtual void IterateResources(
-      const ResourceIteratorCallback& callback) OVERRIDE {}
+      const ResourceIteratorCallback& callback) override {}
 
   void set_value(int val) { value = val; }
   int get_value() { return value; }
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE {}
+  virtual void ExtendValue(base::debug::TracedValue* value) const override {}
 
  private:
   int value;
@@ -59,8 +59,8 @@
  public:
   virtual ~MockDrawQuad() { Destruct(); }
   virtual void IterateResources(
-      const ResourceIteratorCallback& callback) OVERRIDE {}
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE {}
+      const ResourceIteratorCallback& callback) override {}
+  virtual void ExtendValue(base::debug::TracedValue* value) const override {}
   MOCK_METHOD0(Destruct, void());
 };
 
diff --git a/cc/quads/picture_draw_quad.h b/cc/quads/picture_draw_quad.h
index 4fb6b4b..5d75e05 100644
--- a/cc/quads/picture_draw_quad.h
+++ b/cc/quads/picture_draw_quad.h
@@ -51,12 +51,12 @@
   ResourceFormat texture_format;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const PictureDrawQuad* MaterialCast(const DrawQuad* quad);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/render_pass_draw_quad.h b/cc/quads/render_pass_draw_quad.h
index 40540d2..587c7ec 100644
--- a/cc/quads/render_pass_draw_quad.h
+++ b/cc/quads/render_pass_draw_quad.h
@@ -60,12 +60,12 @@
   FilterOperations background_filters;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const RenderPassDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/render_pass_unittest.cc b/cc/quads/render_pass_unittest.cc
index 36e57d0..81a3d31 100644
--- a/cc/quads/render_pass_unittest.cc
+++ b/cc/quads/render_pass_unittest.cc
@@ -52,9 +52,9 @@
               actual->shared_quad_state_list.size());
     EXPECT_EQ(expected->quad_list.size(), actual->quad_list.size());
 
-    for (QuadList::Iterator exp_iter = expected->quad_list.begin(),
-                            act_iter = actual->quad_list.begin();
-         exp_iter != expected->quad_list.end();
+    for (auto exp_iter = expected->quad_list.cbegin(),
+              act_iter = actual->quad_list.cbegin();
+         exp_iter != expected->quad_list.cend();
          ++exp_iter, ++act_iter) {
       EXPECT_EQ(exp_iter->rect.ToString(), act_iter->rect.ToString());
       EXPECT_EQ(exp_iter->shared_quad_state->content_bounds.ToString(),
diff --git a/cc/quads/solid_color_draw_quad.h b/cc/quads/solid_color_draw_quad.h
index bfb6022..256cc52 100644
--- a/cc/quads/solid_color_draw_quad.h
+++ b/cc/quads/solid_color_draw_quad.h
@@ -34,12 +34,12 @@
   bool force_anti_aliasing_off;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const SolidColorDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/stream_video_draw_quad.h b/cc/quads/stream_video_draw_quad.h
index 5db7c3b..f4cb0f5 100644
--- a/cc/quads/stream_video_draw_quad.h
+++ b/cc/quads/stream_video_draw_quad.h
@@ -35,12 +35,12 @@
   gfx::Transform matrix;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const StreamVideoDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/surface_draw_quad.h b/cc/quads/surface_draw_quad.h
index 91e5668..2fa35f1 100644
--- a/cc/quads/surface_draw_quad.h
+++ b/cc/quads/surface_draw_quad.h
@@ -31,12 +31,12 @@
   SurfaceId surface_id;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const SurfaceDrawQuad* MaterialCast(const DrawQuad* quad);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/texture_draw_quad.h b/cc/quads/texture_draw_quad.h
index ef8090c..3a3bb54 100644
--- a/cc/quads/texture_draw_quad.h
+++ b/cc/quads/texture_draw_quad.h
@@ -50,12 +50,12 @@
   bool flipped;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const TextureDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/tile_draw_quad.h b/cc/quads/tile_draw_quad.h
index 72e6bba..e8941d5 100644
--- a/cc/quads/tile_draw_quad.h
+++ b/cc/quads/tile_draw_quad.h
@@ -36,12 +36,12 @@
   unsigned resource_id;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const TileDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/quads/yuv_video_draw_quad.h b/cc/quads/yuv_video_draw_quad.h
index fa77562..e0fc758 100644
--- a/cc/quads/yuv_video_draw_quad.h
+++ b/cc/quads/yuv_video_draw_quad.h
@@ -8,6 +8,7 @@
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
 #include "cc/base/cc_export.h"
+#include "cc/layers/video_layer_impl.h"
 #include "cc/quads/draw_quad.h"
 
 namespace cc {
@@ -55,12 +56,12 @@
   ColorSpace color_space;
 
   virtual void IterateResources(const ResourceIteratorCallback& callback)
-      OVERRIDE;
+      override;
 
   static const YUVVideoDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
-  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void ExtendValue(base::debug::TracedValue* value) const override;
 };
 
 }  // namespace cc
diff --git a/cc/resources/bitmap_content_layer_updater.h b/cc/resources/bitmap_content_layer_updater.h
index ca3f445..0010c41 100644
--- a/cc/resources/bitmap_content_layer_updater.h
+++ b/cc/resources/bitmap_content_layer_updater.h
@@ -32,7 +32,7 @@
     virtual void Update(ResourceUpdateQueue* queue,
                         const gfx::Rect& source_rect,
                         const gfx::Vector2d& dest_offset,
-                        bool partial_update) OVERRIDE;
+                        bool partial_update) override;
 
    private:
     BitmapContentLayerUpdater* updater_;
@@ -46,19 +46,19 @@
       int layer_id);
 
   virtual scoped_ptr<LayerUpdater::Resource> CreateResource(
-      PrioritizedResourceManager* manager) OVERRIDE;
+      PrioritizedResourceManager* manager) override;
   virtual void PrepareToUpdate(const gfx::Size& content_size,
                                const gfx::Rect& paint_rect,
                                const gfx::Size& tile_size,
                                float contents_width_scale,
-                               float contents_height_scale) OVERRIDE;
+                               float contents_height_scale) override;
   void UpdateTexture(ResourceUpdateQueue* queue,
                      PrioritizedResource* resource,
                      const gfx::Rect& source_rect,
                      const gfx::Vector2d& dest_offset,
                      bool partial_update);
-  virtual void SetOpaque(bool opaque) OVERRIDE;
-  virtual void ReduceMemoryUsage() OVERRIDE;
+  virtual void SetOpaque(bool opaque) override;
+  virtual void ReduceMemoryUsage() override;
 
  protected:
   BitmapContentLayerUpdater(
diff --git a/cc/resources/bitmap_raster_worker_pool.cc b/cc/resources/bitmap_raster_worker_pool.cc
index 959a0f3..404f67f 100644
--- a/cc/resources/bitmap_raster_worker_pool.cc
+++ b/cc/resources/bitmap_raster_worker_pool.cc
@@ -23,10 +23,10 @@
       : lock_(resource_provider, resource->id()) {}
 
   // Overridden from RasterBuffer:
-  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() OVERRIDE {
+  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() override {
     return skia::SharePtr(lock_.sk_canvas());
   }
-  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) OVERRIDE {}
+  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) override {}
 
  private:
   ResourceProvider::ScopedWriteLockSoftware lock_;
diff --git a/cc/resources/bitmap_raster_worker_pool.h b/cc/resources/bitmap_raster_worker_pool.h
index 39c4237..876bf36 100644
--- a/cc/resources/bitmap_raster_worker_pool.h
+++ b/cc/resources/bitmap_raster_worker_pool.h
@@ -31,18 +31,18 @@
       ResourceProvider* resource_provider);
 
   // Overridden from RasterWorkerPool:
-  virtual Rasterizer* AsRasterizer() OVERRIDE;
+  virtual Rasterizer* AsRasterizer() override;
 
   // Overridden from Rasterizer:
-  virtual void SetClient(RasterizerClient* client) OVERRIDE;
-  virtual void Shutdown() OVERRIDE;
-  virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
-  virtual void CheckForCompletedTasks() OVERRIDE;
+  virtual void SetClient(RasterizerClient* client) override;
+  virtual void Shutdown() override;
+  virtual void ScheduleTasks(RasterTaskQueue* queue) override;
+  virtual void CheckForCompletedTasks() override;
 
   // Overridden from RasterizerTaskClient:
   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
-      const Resource* resource) OVERRIDE;
-  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
+      const Resource* resource) override;
+  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
 
  protected:
   BitmapRasterWorkerPool(base::SequencedTaskRunner* task_runner,
diff --git a/cc/resources/bitmap_skpicture_content_layer_updater.h b/cc/resources/bitmap_skpicture_content_layer_updater.h
index e20e3c3..030db6e 100644
--- a/cc/resources/bitmap_skpicture_content_layer_updater.h
+++ b/cc/resources/bitmap_skpicture_content_layer_updater.h
@@ -23,7 +23,7 @@
     virtual void Update(ResourceUpdateQueue* queue,
                         const gfx::Rect& source_rect,
                         const gfx::Vector2d& dest_offset,
-                        bool partial_update) OVERRIDE;
+                        bool partial_update) override;
 
    private:
     SkBitmap bitmap_;
@@ -38,7 +38,7 @@
       int layer_id);
 
   virtual scoped_ptr<LayerUpdater::Resource> CreateResource(
-      PrioritizedResourceManager* manager) OVERRIDE;
+      PrioritizedResourceManager* manager) override;
   void PaintContentsRect(SkCanvas* canvas,
                          const gfx::Rect& source_rect);
 
diff --git a/cc/resources/content_layer_updater.h b/cc/resources/content_layer_updater.h
index b11281e..33d3ee5 100644
--- a/cc/resources/content_layer_updater.h
+++ b/cc/resources/content_layer_updater.h
@@ -22,9 +22,9 @@
 class CC_EXPORT ContentLayerUpdater : public LayerUpdater {
  public:
   void set_rendering_stats_instrumentation(RenderingStatsInstrumentation* rsi);
-  virtual void SetOpaque(bool opaque) OVERRIDE;
-  virtual void SetFillsBoundsCompletely(bool fills_bounds) OVERRIDE;
-  virtual void SetBackgroundColor(SkColor background_color) OVERRIDE;
+  virtual void SetOpaque(bool opaque) override;
+  virtual void SetFillsBoundsCompletely(bool fills_bounds) override;
+  virtual void SetBackgroundColor(SkColor background_color) override;
 
  protected:
   ContentLayerUpdater(scoped_ptr<LayerPainter> painter,
diff --git a/cc/resources/gpu_raster_worker_pool.cc b/cc/resources/gpu_raster_worker_pool.cc
index cee01fe..229a3f7 100644
--- a/cc/resources/gpu_raster_worker_pool.cc
+++ b/cc/resources/gpu_raster_worker_pool.cc
@@ -27,17 +27,13 @@
   RasterBufferImpl(ResourceProvider* resource_provider,
                    const Resource* resource,
                    SkMultiPictureDraw* multi_picture_draw)
-      : resource_provider_(resource_provider),
+      : lock_(resource_provider, resource->id()),
         resource_(resource),
-        surface_(resource_provider->LockForWriteToSkSurface(resource->id())),
         multi_picture_draw_(multi_picture_draw) {}
-  virtual ~RasterBufferImpl() {
-    resource_provider_->UnlockForWriteToSkSurface(resource_->id());
-  }
 
   // Overridden from RasterBuffer:
-  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() OVERRIDE {
-    if (!surface_)
+  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() override {
+    if (!lock_.sk_surface())
       return skia::AdoptRef(SkCreateNullCanvas());
 
     skia::RefPtr<SkCanvas> canvas = skia::SharePtr(recorder_.beginRecording(
@@ -48,8 +44,8 @@
     canvas->save();
     return canvas;
   }
-  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) OVERRIDE {
-    if (!surface_)
+  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) override {
+    if (!lock_.sk_surface())
       return;
 
     // Balanced with save() call in AcquireSkCanvas.
@@ -57,13 +53,12 @@
 
     // Add the canvas and recorded picture to |multi_picture_draw_|.
     skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder_.endRecording());
-    multi_picture_draw_->add(surface_->getCanvas(), picture.get());
+    multi_picture_draw_->add(lock_.sk_surface()->getCanvas(), picture.get());
   }
 
  private:
-  ResourceProvider* resource_provider_;
+  ResourceProvider::ScopedWriteLockGr lock_;
   const Resource* resource_;
-  SkSurface* surface_;
   SkMultiPictureDraw* multi_picture_draw_;
   SkPictureRecorder recorder_;
 
@@ -198,10 +193,6 @@
 
 scoped_ptr<RasterBuffer> GpuRasterWorkerPool::AcquireBufferForRaster(
     const Resource* resource) {
-  // RasterBuffer implementation depends on a SkSurface having been acquired for
-  // the resource.
-  resource_provider_->AcquireSkSurface(resource->id());
-
   return make_scoped_ptr<RasterBuffer>(
       new RasterBufferImpl(resource_provider_, resource, &multi_picture_draw_));
 }
diff --git a/cc/resources/gpu_raster_worker_pool.h b/cc/resources/gpu_raster_worker_pool.h
index 2149400..48c17b1 100644
--- a/cc/resources/gpu_raster_worker_pool.h
+++ b/cc/resources/gpu_raster_worker_pool.h
@@ -26,18 +26,18 @@
       ResourceProvider* resource_provider);
 
   // Overridden from RasterWorkerPool:
-  virtual Rasterizer* AsRasterizer() OVERRIDE;
+  virtual Rasterizer* AsRasterizer() override;
 
   // Overridden from Rasterizer:
-  virtual void SetClient(RasterizerClient* client) OVERRIDE;
-  virtual void Shutdown() OVERRIDE;
-  virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
-  virtual void CheckForCompletedTasks() OVERRIDE;
+  virtual void SetClient(RasterizerClient* client) override;
+  virtual void Shutdown() override;
+  virtual void ScheduleTasks(RasterTaskQueue* queue) override;
+  virtual void CheckForCompletedTasks() override;
 
   // Overridden from RasterizerTaskClient:
   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
-      const Resource* resource) OVERRIDE;
-  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
+      const Resource* resource) override;
+  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
 
  private:
   GpuRasterWorkerPool(base::SequencedTaskRunner* task_runner,
diff --git a/cc/resources/image_layer_updater.h b/cc/resources/image_layer_updater.h
index b2235b1..55fdfe5 100644
--- a/cc/resources/image_layer_updater.h
+++ b/cc/resources/image_layer_updater.h
@@ -24,7 +24,7 @@
     virtual void Update(ResourceUpdateQueue* queue,
                         const gfx::Rect& source_rect,
                         const gfx::Vector2d& dest_offset,
-                        bool partial_update) OVERRIDE;
+                        bool partial_update) override;
 
    private:
     ImageLayerUpdater* updater_;
@@ -35,7 +35,7 @@
   static scoped_refptr<ImageLayerUpdater> Create();
 
   virtual scoped_ptr<LayerUpdater::Resource> CreateResource(
-      PrioritizedResourceManager*) OVERRIDE;
+      PrioritizedResourceManager*) override;
 
   void UpdateTexture(ResourceUpdateQueue* queue,
                      PrioritizedResource* texture,
diff --git a/cc/resources/one_copy_raster_worker_pool.cc b/cc/resources/one_copy_raster_worker_pool.cc
index a86d498..fba320f 100644
--- a/cc/resources/one_copy_raster_worker_pool.cc
+++ b/cc/resources/one_copy_raster_worker_pool.cc
@@ -28,40 +28,37 @@
         resource_pool_(resource_pool),
         resource_(resource),
         raster_resource_(resource_pool->AcquireResource(resource->size())),
-        buffer_(NULL),
-        stride_(0) {
-    // Acquire and map image for raster resource.
-    resource_provider_->AcquireImage(raster_resource_->id());
-    buffer_ = resource_provider_->MapImage(raster_resource_->id(), &stride_);
-  }
+        lock_(new ResourceProvider::ScopedWriteLockGpuMemoryBuffer(
+            resource_provider_,
+            raster_resource_->id())),
+        buffer_(NULL) {}
 
   virtual ~RasterBufferImpl() {
-    // First unmap image for raster resource.
-    resource_provider_->UnmapImage(raster_resource_->id());
+    // First unlock raster resource.
+    lock_.reset();
 
     // Copy contents of raster resource to |resource_|.
     resource_provider_->CopyResource(raster_resource_->id(), resource_->id());
 
-    // This RasterBuffer implementation provides direct access to the memory
-    // used by the GPU. Read lock fences are required to ensure that we're not
-    // trying to map a resource that is currently in-use by the GPU.
-    resource_provider_->EnableReadLockFences(raster_resource_->id());
-
     // Return raster resource to pool so it can be used by another RasterBuffer
     // instance.
     resource_pool_->ReleaseResource(raster_resource_.Pass());
   }
 
   // Overridden from RasterBuffer:
-  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() OVERRIDE {
+  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() override {
+    buffer_ = lock_->gpu_memory_buffer();
     if (!buffer_)
       return skia::AdoptRef(SkCreateNullCanvas());
 
-    RasterWorkerPool::AcquireBitmapForBuffer(
-        &bitmap_, buffer_, resource_->format(), resource_->size(), stride_);
+    RasterWorkerPool::AcquireBitmapForBuffer(&bitmap_,
+                                             buffer_,
+                                             resource_->format(),
+                                             resource_->size(),
+                                             lock_->stride());
     return skia::AdoptRef(new SkCanvas(bitmap_));
   }
-  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) OVERRIDE {
+  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) override {
     if (!buffer_)
       return;
 
@@ -74,8 +71,8 @@
   ResourcePool* resource_pool_;
   const Resource* resource_;
   scoped_ptr<ScopedResource> raster_resource_;
-  uint8_t* buffer_;
-  int stride_;
+  scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> lock_;
+  void* buffer_;
   SkBitmap bitmap_;
 
   DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl);
diff --git a/cc/resources/one_copy_raster_worker_pool.h b/cc/resources/one_copy_raster_worker_pool.h
index 1943868..c240999 100644
--- a/cc/resources/one_copy_raster_worker_pool.h
+++ b/cc/resources/one_copy_raster_worker_pool.h
@@ -37,18 +37,18 @@
       ResourcePool* resource_pool);
 
   // Overridden from RasterWorkerPool:
-  virtual Rasterizer* AsRasterizer() OVERRIDE;
+  virtual Rasterizer* AsRasterizer() override;
 
   // Overridden from Rasterizer:
-  virtual void SetClient(RasterizerClient* client) OVERRIDE;
-  virtual void Shutdown() OVERRIDE;
-  virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
-  virtual void CheckForCompletedTasks() OVERRIDE;
+  virtual void SetClient(RasterizerClient* client) override;
+  virtual void Shutdown() override;
+  virtual void ScheduleTasks(RasterTaskQueue* queue) override;
+  virtual void CheckForCompletedTasks() override;
 
   // Overridden from RasterizerTaskClient:
   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
-      const Resource* resource) OVERRIDE;
-  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
+      const Resource* resource) override;
+  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
 
  protected:
   OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner,
diff --git a/cc/resources/picture_layer_tiling_perftest.cc b/cc/resources/picture_layer_tiling_perftest.cc
index 78a6a08..32cc9bb 100644
--- a/cc/resources/picture_layer_tiling_perftest.cc
+++ b/cc/resources/picture_layer_tiling_perftest.cc
@@ -43,7 +43,7 @@
                                                   false).Pass();
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     picture_layer_tiling_client_.SetTileSize(gfx::Size(256, 256));
     picture_layer_tiling_client_.set_max_tiles_for_interest_area(250);
     picture_layer_tiling_client_.set_tree(PENDING_TREE);
@@ -52,7 +52,7 @@
     picture_layer_tiling_->CreateAllTilesForTesting();
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     picture_layer_tiling_.reset(NULL);
   }
 
diff --git a/cc/resources/picture_pile_unittest.cc b/cc/resources/picture_pile_unittest.cc
index 87938fa..15cb3d3 100644
--- a/cc/resources/picture_pile_unittest.cc
+++ b/cc/resources/picture_pile_unittest.cc
@@ -96,7 +96,7 @@
 
 class PicturePileTest : public PicturePileTestBase, public testing::Test {
  public:
-  virtual void SetUp() OVERRIDE { InitializeData(); }
+  virtual void SetUp() override { InitializeData(); }
 };
 
 TEST_F(PicturePileTest, SmallInvalidateInflated) {
@@ -402,7 +402,7 @@
 class PicturePileResizeCornerTest : public PicturePileTestBase,
                                     public testing::TestWithParam<Corner> {
  protected:
-  virtual void SetUp() OVERRIDE { InitializeData(); }
+  virtual void SetUp() override { InitializeData(); }
 
   static gfx::Rect CornerSinglePixelRect(Corner corner, const gfx::Size& s) {
     switch (corner) {
diff --git a/cc/resources/pixel_buffer_raster_worker_pool.cc b/cc/resources/pixel_buffer_raster_worker_pool.cc
index b1011fc..693f643 100644
--- a/cc/resources/pixel_buffer_raster_worker_pool.cc
+++ b/cc/resources/pixel_buffer_raster_worker_pool.cc
@@ -36,7 +36,7 @@
   }
 
   // Overridden from RasterBuffer:
-  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() OVERRIDE {
+  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() override {
     if (!buffer_)
       return skia::AdoptRef(SkCreateNullCanvas());
 
@@ -44,7 +44,7 @@
         &bitmap_, buffer_, resource_->format(), resource_->size(), stride_);
     return skia::AdoptRef(new SkCanvas(bitmap_));
   }
-  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) OVERRIDE {
+  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) override {
     if (!buffer_)
       return;
 
@@ -449,11 +449,6 @@
     task->CompleteOnOriginThread(this);
     task->DidComplete();
 
-    // Async set pixels commands are not necessarily processed in-sequence with
-    // drawing commands. Read lock fences are required to ensure that async
-    // commands don't access the resource while used for drawing.
-    resource_provider_->EnableReadLockFences(task->resource()->id());
-
     DCHECK(std::find(completed_raster_tasks_.begin(),
                      completed_raster_tasks_.end(),
                      task) == completed_raster_tasks_.end());
diff --git a/cc/resources/pixel_buffer_raster_worker_pool.h b/cc/resources/pixel_buffer_raster_worker_pool.h
index a2bed33..65fcdad 100644
--- a/cc/resources/pixel_buffer_raster_worker_pool.h
+++ b/cc/resources/pixel_buffer_raster_worker_pool.h
@@ -39,18 +39,18 @@
       size_t max_transfer_buffer_usage_bytes);
 
   // Overridden from RasterWorkerPool:
-  virtual Rasterizer* AsRasterizer() OVERRIDE;
+  virtual Rasterizer* AsRasterizer() override;
 
   // Overridden from Rasterizer:
-  virtual void SetClient(RasterizerClient* client) OVERRIDE;
-  virtual void Shutdown() OVERRIDE;
-  virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
-  virtual void CheckForCompletedTasks() OVERRIDE;
+  virtual void SetClient(RasterizerClient* client) override;
+  virtual void Shutdown() override;
+  virtual void ScheduleTasks(RasterTaskQueue* queue) override;
+  virtual void CheckForCompletedTasks() override;
 
   // Overridden from RasterizerTaskClient:
   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
-      const Resource* resource) OVERRIDE;
-  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
+      const Resource* resource) override;
+  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
 
  private:
   struct RasterTaskState {
diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc
index a720543..65b3767 100644
--- a/cc/resources/raster_worker_pool.cc
+++ b/cc/resources/raster_worker_pool.cc
@@ -39,7 +39,7 @@
 
  private:
   // Overridden from base::DelegateSimpleThread::Delegate:
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     TaskGraphRunner::Run();
   }
 
@@ -62,15 +62,15 @@
         on_raster_finished_callback_(on_raster_finished_callback) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {
+  virtual void RunOnWorkerThread() override {
     TRACE_EVENT0("cc", "RasterFinishedTaskImpl::RunOnWorkerThread");
     RasterFinished();
   }
 
   // Overridden from RasterizerTask:
-  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void RunReplyOnOriginThread() OVERRIDE {}
+  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {}
+  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {}
+  virtual void RunReplyOnOriginThread() override {}
 
  protected:
   virtual ~RasterFinishedTaskImpl() {}
@@ -196,7 +196,7 @@
 
 // static
 void RasterWorkerPool::AcquireBitmapForBuffer(SkBitmap* bitmap,
-                                              uint8_t* buffer,
+                                              void* buffer,
                                               ResourceFormat buffer_format,
                                               const gfx::Size& size,
                                               int stride) {
@@ -224,7 +224,7 @@
 
 // static
 void RasterWorkerPool::ReleaseBitmapForBuffer(SkBitmap* bitmap,
-                                              uint8_t* buffer,
+                                              void* buffer,
                                               ResourceFormat buffer_format) {
   SkColorType buffer_color_type = ResourceFormatToSkColorType(buffer_format);
   if (buffer_color_type != bitmap->colorType()) {
diff --git a/cc/resources/raster_worker_pool.h b/cc/resources/raster_worker_pool.h
index e57fe06..1863ce4 100644
--- a/cc/resources/raster_worker_pool.h
+++ b/cc/resources/raster_worker_pool.h
@@ -64,12 +64,12 @@
   // Utility functions that transparently create a temporary bitmap and copy
   // pixels to buffer when necessary.
   static void AcquireBitmapForBuffer(SkBitmap* bitmap,
-                                     uint8_t* buffer,
+                                     void* buffer,
                                      ResourceFormat format,
                                      const gfx::Size& size,
                                      int stride);
   static void ReleaseBitmapForBuffer(SkBitmap* bitmap,
-                                     uint8_t* buffer,
+                                     void* buffer,
                                      ResourceFormat format);
 
   // Type-checking downcast routine.
diff --git a/cc/resources/raster_worker_pool_perftest.cc b/cc/resources/raster_worker_pool_perftest.cc
index 3ae1c20..e84e8af 100644
--- a/cc/resources/raster_worker_pool_perftest.cc
+++ b/cc/resources/raster_worker_pool_perftest.cc
@@ -35,28 +35,28 @@
   virtual GLuint CreateImageCHROMIUM(GLsizei width,
                                      GLsizei height,
                                      GLenum internalformat,
-                                     GLenum usage) OVERRIDE {
+                                     GLenum usage) override {
     return 1u;
   }
-  virtual void GenBuffers(GLsizei n, GLuint* buffers) OVERRIDE {
+  virtual void GenBuffers(GLsizei n, GLuint* buffers) override {
     for (GLsizei i = 0; i < n; ++i)
       buffers[i] = 1u;
   }
-  virtual void GenTextures(GLsizei n, GLuint* textures) OVERRIDE {
+  virtual void GenTextures(GLsizei n, GLuint* textures) override {
     for (GLsizei i = 0; i < n; ++i)
       textures[i] = 1u;
   }
-  virtual void GetIntegerv(GLenum pname, GLint* params) OVERRIDE {
+  virtual void GetIntegerv(GLenum pname, GLint* params) override {
     if (pname == GL_MAX_TEXTURE_SIZE)
       *params = INT_MAX;
   }
-  virtual void GenQueriesEXT(GLsizei n, GLuint* queries) OVERRIDE {
+  virtual void GenQueriesEXT(GLsizei n, GLuint* queries) override {
     for (GLsizei i = 0; i < n; ++i)
       queries[i] = 1u;
   }
   virtual void GetQueryObjectuivEXT(GLuint query,
                                     GLenum pname,
-                                    GLuint* params) OVERRIDE {
+                                    GLuint* params) override {
     if (pname == GL_QUERY_RESULT_AVAILABLE_EXT)
       *params = 1;
   }
@@ -66,25 +66,25 @@
  public:
   PerfContextProvider() : context_gl_(new PerfGLES2Interface) {}
 
-  virtual bool BindToCurrentThread() OVERRIDE { return true; }
-  virtual Capabilities ContextCapabilities() OVERRIDE {
+  virtual bool BindToCurrentThread() override { return true; }
+  virtual Capabilities ContextCapabilities() override {
     Capabilities capabilities;
     capabilities.gpu.image = true;
     capabilities.gpu.sync_query = true;
     return capabilities;
   }
-  virtual gpu::gles2::GLES2Interface* ContextGL() OVERRIDE {
+  virtual gpu::gles2::GLES2Interface* ContextGL() override {
     return context_gl_.get();
   }
-  virtual gpu::ContextSupport* ContextSupport() OVERRIDE { return &support_; }
-  virtual class GrContext* GrContext() OVERRIDE { return NULL; }
-  virtual bool IsContextLost() OVERRIDE { return false; }
-  virtual void VerifyContexts() OVERRIDE {}
-  virtual void DeleteCachedResources() OVERRIDE {}
-  virtual bool DestroyedOnMainThread() OVERRIDE { return false; }
-  virtual void SetLostContextCallback(const LostContextCallback& cb) OVERRIDE {}
+  virtual gpu::ContextSupport* ContextSupport() override { return &support_; }
+  virtual class GrContext* GrContext() override { return NULL; }
+  virtual bool IsContextLost() override { return false; }
+  virtual void VerifyContexts() override {}
+  virtual void DeleteCachedResources() override {}
+  virtual bool DestroyedOnMainThread() override { return false; }
+  virtual void SetLostContextCallback(const LostContextCallback& cb) override {}
   virtual void SetMemoryPolicyChangedCallback(
-      const MemoryPolicyChangedCallback& cb) OVERRIDE {}
+      const MemoryPolicyChangedCallback& cb) override {}
 
  private:
   virtual ~PerfContextProvider() {}
@@ -110,12 +110,12 @@
   PerfImageDecodeTaskImpl() {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {}
+  virtual void RunOnWorkerThread() override {}
 
   // Overridden from RasterizerTask:
-  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); }
+  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {}
+  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {}
+  virtual void RunReplyOnOriginThread() override { Reset(); }
 
   void Reset() {
     did_run_ = false;
@@ -136,16 +136,16 @@
       : RasterTask(resource.get(), dependencies), resource_(resource.Pass()) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {}
+  virtual void RunOnWorkerThread() override {}
 
   // Overridden from RasterizerTask:
-  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
+  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {
     raster_buffer_ = client->AcquireBufferForRaster(resource());
   }
-  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
+  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {
     client->ReleaseBufferForRaster(raster_buffer_.Pass());
   }
-  virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); }
+  virtual void RunReplyOnOriginThread() override { Reset(); }
 
   void Reset() {
     did_run_ = false;
@@ -227,7 +227,7 @@
       public RasterizerClient {
  public:
   // Overridden from testing::Test:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     switch (GetParam()) {
       case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
         Create3dOutputSurfaceAndResourceProvider();
@@ -275,16 +275,16 @@
     DCHECK(raster_worker_pool_);
     raster_worker_pool_->AsRasterizer()->SetClient(this);
   }
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     raster_worker_pool_->AsRasterizer()->Shutdown();
     raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
   }
 
   // Overriden from RasterizerClient:
-  virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE {
+  virtual void DidFinishRunningTasks(TaskSet task_set) override {
     raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
   }
-  virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const OVERRIDE {
+  virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const override {
     return TaskSetCollection();
   }
 
@@ -478,7 +478,7 @@
                                        public testing::Test {
  public:
   // Overridden from testing::Test:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
     CHECK(output_surface_->BindToClient(&output_surface_client_));
     resource_provider_ =
diff --git a/cc/resources/raster_worker_pool_unittest.cc b/cc/resources/raster_worker_pool_unittest.cc
index 86755f8..3c39c05 100644
--- a/cc/resources/raster_worker_pool_unittest.cc
+++ b/cc/resources/raster_worker_pool_unittest.cc
@@ -53,7 +53,7 @@
       : RasterTask(resource, dependencies), reply_(reply) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {
+  virtual void RunOnWorkerThread() override {
     skia::RefPtr<SkCanvas> canvas = raster_buffer_->AcquireSkCanvas();
     DCHECK(canvas);
     canvas->drawColor(SK_ColorWHITE);
@@ -61,13 +61,13 @@
   }
 
   // Overridden from RasterizerTask:
-  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
+  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {
     raster_buffer_ = client->AcquireBufferForRaster(resource());
   }
-  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
+  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {
     client->ReleaseBufferForRaster(raster_buffer_.Pass());
   }
-  virtual void RunReplyOnOriginThread() OVERRIDE {
+  virtual void RunReplyOnOriginThread() override {
     reply_.Run(PicturePileImpl::Analysis(), !HasFinishedRunning());
   }
 
@@ -90,13 +90,13 @@
       : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {
+  virtual void RunOnWorkerThread() override {
     base::AutoLock lock(*lock_);
     TestRasterTaskImpl::RunOnWorkerThread();
   }
 
   // Overridden from RasterizerTask:
-  virtual void RunReplyOnOriginThread() OVERRIDE {}
+  virtual void RunReplyOnOriginThread() override {}
 
  protected:
   virtual ~BlockingTestRasterTaskImpl() {}
@@ -126,7 +126,7 @@
         timed_out_(false) {}
 
   // Overridden from testing::Test:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     switch (GetParam()) {
       case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
         Create3dOutputSurfaceAndResourceProvider();
@@ -175,19 +175,19 @@
     raster_worker_pool_->AsRasterizer()->SetClient(this);
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     raster_worker_pool_->AsRasterizer()->Shutdown();
     raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
   }
 
   // Overriden from RasterWorkerPoolClient:
-  virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE {
+  virtual void DidFinishRunningTasks(TaskSet task_set) override {
     if (task_set == ALL) {
       raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
       base::MessageLoop::current()->Quit();
     }
   }
-  virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const OVERRIDE {
+  virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const override {
     return TaskSetCollection();
   }
 
diff --git a/cc/resources/rasterizer.h b/cc/resources/rasterizer.h
index 72b50f2..5d2eeee 100644
--- a/cc/resources/rasterizer.h
+++ b/cc/resources/rasterizer.h
@@ -61,7 +61,7 @@
   typedef std::vector<scoped_refptr<ImageDecodeTask> > Vector;
 
   // Overridden from RasterizerTask:
-  virtual ImageDecodeTask* AsImageDecodeTask() OVERRIDE;
+  virtual ImageDecodeTask* AsImageDecodeTask() override;
 
  protected:
   ImageDecodeTask();
@@ -73,7 +73,7 @@
   typedef std::vector<scoped_refptr<RasterTask> > Vector;
 
   // Overridden from RasterizerTask:
-  virtual RasterTask* AsRasterTask() OVERRIDE;
+  virtual RasterTask* AsRasterTask() override;
 
   const Resource* resource() const { return resource_; }
   const ImageDecodeTask::Vector& dependencies() const { return dependencies_; }
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 0e7c938..abb8541 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -143,7 +143,7 @@
   }
 
   // Overridden from IdAllocator:
-  virtual GLuint NextId() OVERRIDE {
+  virtual GLuint NextId() override {
     if (next_id_index_ == id_allocation_chunk_size_) {
       gl_->GenTextures(id_allocation_chunk_size_, ids_.get());
       next_id_index_ = 0;
@@ -166,7 +166,7 @@
   }
 
   // Overridden from IdAllocator:
-  virtual GLuint NextId() OVERRIDE {
+  virtual GLuint NextId() override {
     if (next_id_index_ == id_allocation_chunk_size_) {
       gl_->GenBuffers(id_allocation_chunk_size_, ids_.get());
       next_id_index_ = 0;
@@ -187,8 +187,8 @@
       : gl_(gl), query_id_(query_id) {}
 
   // Overridden from ResourceProvider::Fence:
-  virtual void Set() OVERRIDE {}
-  virtual bool HasPassed() OVERRIDE {
+  virtual void Set() override {}
+  virtual bool HasPassed() override {
     unsigned available = 1;
     gl_->GetQueryObjectuivEXT(
         query_id_, GL_QUERY_RESULT_AVAILABLE_EXT, &available);
@@ -896,12 +896,7 @@
 const ResourceProvider::Resource* ResourceProvider::LockForWrite(
     ResourceId id) {
   Resource* resource = GetResource(id);
-  DCHECK(!resource->locked_for_write);
-  DCHECK(!resource->lock_for_read_count);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK(!resource->lost);
-  DCHECK(ReadLockFenceHasPassed(resource));
+  DCHECK(CanLockForWrite(id));
   LazyAllocate(resource);
 
   resource->locked_for_write = true;
@@ -923,6 +918,87 @@
   resource->locked_for_write = false;
 }
 
+const ResourceProvider::Resource*
+ResourceProvider::LockForWriteToGpuMemoryBuffer(ResourceId id) {
+  Resource* resource = GetResource(id);
+  DCHECK_EQ(GLTexture, resource->type);
+  DCHECK(CanLockForWrite(id));
+
+  if (!resource->image_id) {
+    resource->allocated = true;
+    GLES2Interface* gl = ContextGL();
+    DCHECK(gl);
+    resource->image_id =
+        gl->CreateImageCHROMIUM(resource->size.width(),
+                                resource->size.height(),
+                                TextureToStorageFormat(resource->format),
+                                GL_IMAGE_MAP_CHROMIUM);
+    DCHECK(resource->image_id);
+  }
+
+  resource->locked_for_write = true;
+  return resource;
+}
+
+void ResourceProvider::UnlockForWriteToGpuMemoryBuffer(ResourceId id) {
+  Resource* resource = GetResource(id);
+  DCHECK(resource->locked_for_write);
+  DCHECK_EQ(resource->exported_count, 0);
+  DCHECK(resource->origin == Resource::Internal);
+  DCHECK_EQ(GLTexture, resource->type);
+
+  resource->locked_for_write = false;
+  resource->dirty_image = true;
+
+  // GpuMemoryBuffer provides direct access to the memory used by the GPU.
+  // Read lock fences are required to ensure that we're not trying to map a
+  // buffer that is currently in-use by the GPU.
+  resource->read_lock_fences_enabled = true;
+}
+
+const ResourceProvider::Resource* ResourceProvider::LockForWriteToSkSurface(
+    ResourceId id) {
+  Resource* resource = GetResource(id);
+  DCHECK_EQ(GLTexture, resource->type);
+  DCHECK(CanLockForWrite(id));
+
+  resource->locked_for_write = true;
+  if (!resource->sk_surface) {
+    class GrContext* gr_context = GrContext();
+    // TODO(alokp): Implement TestContextProvider::GrContext().
+    if (!gr_context)
+      return resource;
+
+    LazyAllocate(resource);
+
+    GrBackendTextureDesc desc;
+    desc.fFlags = kRenderTarget_GrBackendTextureFlag;
+    desc.fWidth = resource->size.width();
+    desc.fHeight = resource->size.height();
+    desc.fConfig = ToGrPixelConfig(resource->format);
+    desc.fOrigin = kTopLeft_GrSurfaceOrigin;
+    desc.fTextureHandle = resource->gl_id;
+    skia::RefPtr<GrTexture> gr_texture =
+        skia::AdoptRef(gr_context->wrapBackendTexture(desc));
+    SkSurface::TextRenderMode text_render_mode =
+        use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode
+                                 : SkSurface::kStandard_TextRenderMode;
+    resource->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
+        gr_texture->asRenderTarget(), text_render_mode));
+  }
+
+  return resource;
+}
+
+void ResourceProvider::UnlockForWriteToSkSurface(ResourceId id) {
+  Resource* resource = GetResource(id);
+  DCHECK(resource->locked_for_write);
+  DCHECK_EQ(resource->exported_count, 0);
+  DCHECK(resource->origin == Resource::Internal);
+  DCHECK_EQ(GLTexture, resource->type);
+  resource->locked_for_write = false;
+}
+
 ResourceProvider::ScopedReadLockGL::ScopedReadLockGL(
     ResourceProvider* resource_provider,
     ResourceProvider::ResourceId resource_id)
@@ -1008,6 +1084,38 @@
   resource_provider_->UnlockForWrite(resource_id_);
 }
 
+ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
+    ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider,
+                                   ResourceProvider::ResourceId resource_id)
+    : resource_provider_(resource_provider),
+      resource_id_(resource_id),
+      image_id_(resource_provider->LockForWriteToGpuMemoryBuffer(resource_id)
+                    ->image_id),
+      gpu_memory_buffer_(
+          resource_provider->ContextGL()->MapImageCHROMIUM(image_id_)) {
+  resource_provider->ContextGL()->GetImageParameterivCHROMIUM(
+      image_id_, GL_IMAGE_ROWBYTES_CHROMIUM, &stride_);
+}
+
+ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
+    ~ScopedWriteLockGpuMemoryBuffer() {
+  resource_provider_->ContextGL()->UnmapImageCHROMIUM(image_id_);
+  resource_provider_->UnlockForWriteToGpuMemoryBuffer(resource_id_);
+}
+
+ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
+    ResourceProvider* resource_provider,
+    ResourceProvider::ResourceId resource_id)
+    : resource_provider_(resource_provider),
+      resource_id_(resource_id),
+      sk_surface_(resource_provider->LockForWriteToSkSurface(resource_id)
+                      ->sk_surface.get()) {
+}
+
+ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() {
+  resource_provider_->UnlockForWriteToSkSurface(resource_id_);
+}
+
 ResourceProvider::ResourceProvider(
     OutputSurface* output_surface,
     SharedBitmapManager* shared_bitmap_manager,
@@ -1761,6 +1869,11 @@
   resource->pending_set_pixels = false;
   UnlockForWrite(id);
 
+  // Async set pixels commands are not necessarily processed in-sequence with
+  // drawing commands. Read lock fences are required to ensure that async
+  // commands don't access the resource while used for drawing.
+  resource->read_lock_fences_enabled = true;
+
   return true;
 }
 
@@ -1867,138 +1980,6 @@
   resource->dirty_image = false;
 }
 
-void ResourceProvider::EnableReadLockFences(ResourceId id) {
-  Resource* resource = GetResource(id);
-  resource->read_lock_fences_enabled = true;
-}
-
-void ResourceProvider::AcquireImage(ResourceId id) {
-  Resource* resource = GetResource(id);
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK_EQ(GLTexture, resource->type);
-
-  if (resource->image_id)
-    return;
-
-  resource->allocated = true;
-  GLES2Interface* gl = ContextGL();
-  DCHECK(gl);
-  resource->image_id =
-      gl->CreateImageCHROMIUM(resource->size.width(),
-                              resource->size.height(),
-                              TextureToStorageFormat(resource->format),
-                              GL_IMAGE_MAP_CHROMIUM);
-  DCHECK(resource->image_id);
-}
-
-void ResourceProvider::ReleaseImage(ResourceId id) {
-  Resource* resource = GetResource(id);
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK_EQ(GLTexture, resource->type);
-
-  if (!resource->image_id)
-    return;
-
-  GLES2Interface* gl = ContextGL();
-  DCHECK(gl);
-  gl->DestroyImageCHROMIUM(resource->image_id);
-  resource->image_id = 0;
-  resource->bound_image_id = 0;
-  resource->dirty_image = false;
-  resource->allocated = false;
-}
-
-uint8_t* ResourceProvider::MapImage(ResourceId id, int* stride) {
-  Resource* resource = GetResource(id);
-  DCHECK(ReadLockFenceHasPassed(resource));
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK(resource->image_id);
-
-  LockForWrite(id);
-
-  GLES2Interface* gl = ContextGL();
-  DCHECK(gl);
-  // MapImageCHROMIUM should be called prior to GetImageParameterivCHROMIUM.
-  uint8_t* pixels =
-      static_cast<uint8_t*>(gl->MapImageCHROMIUM(resource->image_id));
-  gl->GetImageParameterivCHROMIUM(
-      resource->image_id, GL_IMAGE_ROWBYTES_CHROMIUM, stride);
-  return pixels;
-}
-
-void ResourceProvider::UnmapImage(ResourceId id) {
-  Resource* resource = GetResource(id);
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK(resource->image_id);
-  DCHECK(resource->locked_for_write);
-
-  GLES2Interface* gl = ContextGL();
-  DCHECK(gl);
-  gl->UnmapImageCHROMIUM(resource->image_id);
-  resource->dirty_image = true;
-
-  UnlockForWrite(id);
-}
-
-void ResourceProvider::AcquireSkSurface(ResourceId id) {
-  Resource* resource = GetResource(id);
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK_EQ(GLTexture, resource->type);
-
-  if (resource->sk_surface)
-    return;
-
-  class GrContext* gr_context = GrContext();
-  // TODO(alokp): Implement TestContextProvider::GrContext().
-  if (!gr_context)
-    return;
-
-  LazyAllocate(resource);
-
-  GrBackendTextureDesc desc;
-  desc.fFlags = kRenderTarget_GrBackendTextureFlag;
-  desc.fWidth = resource->size.width();
-  desc.fHeight = resource->size.height();
-  desc.fConfig = ToGrPixelConfig(resource->format);
-  desc.fOrigin = kTopLeft_GrSurfaceOrigin;
-  desc.fTextureHandle = resource->gl_id;
-  skia::RefPtr<GrTexture> gr_texture =
-      skia::AdoptRef(gr_context->wrapBackendTexture(desc));
-  SkSurface::TextRenderMode text_render_mode =
-      use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode
-                               : SkSurface::kStandard_TextRenderMode;
-  resource->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
-      gr_texture->asRenderTarget(), text_render_mode));
-}
-
-void ResourceProvider::ReleaseSkSurface(ResourceId id) {
-  Resource* resource = GetResource(id);
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK_EQ(GLTexture, resource->type);
-
-  resource->sk_surface.clear();
-}
-
-SkSurface* ResourceProvider::LockForWriteToSkSurface(ResourceId id) {
-  Resource* resource = GetResource(id);
-  DCHECK(resource->origin == Resource::Internal);
-  DCHECK_EQ(resource->exported_count, 0);
-  DCHECK_EQ(GLTexture, resource->type);
-
-  LockForWrite(id);
-  return resource->sk_surface.get();
-}
-
-void ResourceProvider::UnlockForWriteToSkSurface(ResourceId id) {
-  UnlockForWrite(id);
-}
-
 void ResourceProvider::CopyResource(ResourceId source_id, ResourceId dest_id) {
   TRACE_EVENT0("cc", "ResourceProvider::CopyResource");
 
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h
index fc2fc5a..c548866 100644
--- a/cc/resources/resource_provider.h
+++ b/cc/resources/resource_provider.h
@@ -303,6 +303,41 @@
     DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockSoftware);
   };
 
+  class CC_EXPORT ScopedWriteLockGpuMemoryBuffer {
+   public:
+    ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider,
+                                   ResourceProvider::ResourceId resource_id);
+    ~ScopedWriteLockGpuMemoryBuffer();
+
+    void* gpu_memory_buffer() { return gpu_memory_buffer_; }
+    int stride() const { return stride_; }
+
+   private:
+    ResourceProvider* resource_provider_;
+    ResourceProvider::ResourceId resource_id_;
+    unsigned image_id_;
+    void* gpu_memory_buffer_;
+    int stride_;
+
+    DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGpuMemoryBuffer);
+  };
+
+  class CC_EXPORT ScopedWriteLockGr {
+   public:
+    ScopedWriteLockGr(ResourceProvider* resource_provider,
+                      ResourceProvider::ResourceId resource_id);
+    ~ScopedWriteLockGr();
+
+    SkSurface* sk_surface() { return sk_surface_; }
+
+   private:
+    ResourceProvider* resource_provider_;
+    ResourceProvider::ResourceId resource_id_;
+    SkSurface* sk_surface_;
+
+    DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGr);
+  };
+
   class Fence : public base::RefCounted<Fence> {
    public:
     Fence() {}
@@ -330,22 +365,6 @@
   void ForceSetPixelsToComplete(ResourceId id);
   bool DidSetPixelsComplete(ResourceId id);
 
-  // Acquire and release an image. The image allows direct
-  // manipulation of texture memory.
-  void AcquireImage(ResourceId id);
-  void ReleaseImage(ResourceId id);
-  // Maps the acquired image so that its pixels could be modified.
-  // Unmap is called when all pixels are set.
-  uint8_t* MapImage(ResourceId id, int* stride);
-  void UnmapImage(ResourceId id);
-
-  // Acquire and release a SkSurface.
-  void AcquireSkSurface(ResourceId id);
-  void ReleaseSkSurface(ResourceId id);
-  // Lock/unlock resource for writing to SkSurface.
-  SkSurface* LockForWriteToSkSurface(ResourceId id);
-  void UnlockForWriteToSkSurface(ResourceId id);
-
   // For tests only! This prevents detecting uninitialized reads.
   // Use SetPixels or LockForWrite to allocate implicitly.
   void AllocateForTesting(ResourceId id);
@@ -360,9 +379,6 @@
   // until this fence has passed.
   void SetReadLockFence(Fence* fence) { current_read_lock_fence_ = fence; }
 
-  // Enable read lock fences for a specific resource.
-  void EnableReadLockFences(ResourceId id);
-
   // Indicates if we can currently lock this resource for write.
   bool CanLockForWrite(ResourceId id);
 
@@ -480,6 +496,11 @@
   void UnlockForRead(ResourceId id);
   const Resource* LockForWrite(ResourceId id);
   void UnlockForWrite(ResourceId id);
+  const Resource* LockForWriteToGpuMemoryBuffer(ResourceId id);
+  void UnlockForWriteToGpuMemoryBuffer(ResourceId id);
+  const Resource* LockForWriteToSkSurface(ResourceId id);
+  void UnlockForWriteToSkSurface(ResourceId id);
+
   static void PopulateSkBitmapWithResource(SkBitmap* sk_bitmap,
                                            const Resource* resource);
 
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
index 04d88c6..6dac574 100644
--- a/cc/resources/resource_provider_unittest.cc
+++ b/cc/resources/resource_provider_unittest.cc
@@ -101,11 +101,11 @@
 
   // Force all textures to be consecutive numbers starting at "1",
   // so we easily can test for them.
-  virtual GLuint NextTextureId() OVERRIDE {
+  virtual GLuint NextTextureId() override {
     base::AutoLock lock(namespace_->lock);
     return namespace_->next_texture_id++;
   }
-  virtual void RetireTextureId(GLuint) OVERRIDE {}
+  virtual void RetireTextureId(GLuint) override {}
 };
 
 // Shared data between multiple ResourceProviderContext. This contains mailbox
@@ -168,7 +168,7 @@
     return make_scoped_ptr(new ResourceProviderContext(shared_data));
   }
 
-  virtual GLuint insertSyncPoint() OVERRIDE {
+  virtual GLuint insertSyncPoint() override {
     uint32 sync_point = shared_data_->InsertSyncPoint();
     // Commit the produceTextureCHROMIUM calls at this point, so that
     // they're associated with the sync point.
@@ -183,7 +183,7 @@
     return sync_point;
   }
 
-  virtual void waitSyncPoint(GLuint sync_point) OVERRIDE {
+  virtual void waitSyncPoint(GLuint sync_point) override {
     last_waited_sync_point_ = std::max(sync_point, last_waited_sync_point_);
   }
 
@@ -193,7 +193,7 @@
                                GLint levels,
                                GLuint internalformat,
                                GLint width,
-                               GLint height) OVERRIDE {
+                               GLint height) override {
     CheckTextureIsBound(target);
     ASSERT_EQ(static_cast<unsigned>(GL_TEXTURE_2D), target);
     ASSERT_EQ(1, levels);
@@ -218,7 +218,7 @@
                           GLint border,
                           GLenum format,
                           GLenum type,
-                          const void* pixels) OVERRIDE {
+                          const void* pixels) override {
     CheckTextureIsBound(target);
     ASSERT_EQ(static_cast<unsigned>(GL_TEXTURE_2D), target);
     ASSERT_FALSE(level);
@@ -238,7 +238,7 @@
                              GLsizei height,
                              GLenum format,
                              GLenum type,
-                             const void* pixels) OVERRIDE {
+                             const void* pixels) override {
     CheckTextureIsBound(target);
     ASSERT_EQ(static_cast<unsigned>(GL_TEXTURE_2D), target);
     ASSERT_FALSE(level);
@@ -251,12 +251,12 @@
     SetPixels(xoffset, yoffset, width, height, pixels);
   }
 
-  virtual void genMailboxCHROMIUM(GLbyte* mailbox) OVERRIDE {
+  virtual void genMailboxCHROMIUM(GLbyte* mailbox) override {
     return shared_data_->GenMailbox(mailbox);
   }
 
   virtual void produceTextureCHROMIUM(GLenum target,
-                                      const GLbyte* mailbox) OVERRIDE {
+                                      const GLbyte* mailbox) override {
     CheckTextureIsBound(target);
 
     // Delay moving the texture into the mailbox until the next
@@ -270,7 +270,7 @@
   }
 
   virtual void consumeTextureCHROMIUM(GLenum target,
-                                      const GLbyte* mailbox) OVERRIDE {
+                                      const GLbyte* mailbox) override {
     CheckTextureIsBound(target);
     base::AutoLock lock_for_texture_access(namespace_->lock);
     scoped_refptr<TestTexture> texture =
@@ -632,10 +632,11 @@
 
   ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource(
       size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format);
-  child_resource_provider_->AcquireImage(id3);
-  int stride;
-  child_resource_provider_->MapImage(id3, &stride);
-  child_resource_provider_->UnmapImage(id3);
+  {
+    ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
+        child_resource_provider_.get(), id3);
+    EXPECT_TRUE(!!lock.gpu_memory_buffer());
+  }
 
   GLuint external_texture_id = child_context_->createExternalTexture();
   child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id);
@@ -3311,30 +3312,29 @@
   id = resource_provider->CreateResource(
       size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format);
 
-  const int kStride = 4;
-  void* dummy_mapped_buffer_address = NULL;
+  const int kStride = 8;
+  uint8 buffer_data[kStride * kHeight];
   EXPECT_CALL(
       *context,
       createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM))
       .WillOnce(Return(kImageId))
       .RetiresOnSaturation();
-  resource_provider->AcquireImage(id);
-
+  EXPECT_CALL(*context, mapImageCHROMIUM(kImageId))
+      .WillOnce(Return(buffer_data))
+      .RetiresOnSaturation();
   EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId,
                                                     GL_IMAGE_ROWBYTES_CHROMIUM,
                                                     _))
       .WillOnce(SetArgPointee<2>(kStride))
       .RetiresOnSaturation();
-  EXPECT_CALL(*context, mapImageCHROMIUM(kImageId))
-      .WillOnce(Return(dummy_mapped_buffer_address))
-      .RetiresOnSaturation();
-  int stride;
-  resource_provider->MapImage(id, &stride);
-
   EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
       .Times(1)
       .RetiresOnSaturation();
-  resource_provider->UnmapImage(id);
+  {
+    ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
+        resource_provider.get(), id);
+    EXPECT_TRUE(!!lock.gpu_memory_buffer());
+  }
 
   EXPECT_CALL(*context, NextTextureId())
       .WillOnce(Return(kTextureId))
@@ -3351,20 +3351,22 @@
     EXPECT_EQ(kTextureId, lock_gl.texture_id());
   }
 
+  EXPECT_CALL(*context, mapImageCHROMIUM(kImageId))
+      .WillOnce(Return(buffer_data))
+      .RetiresOnSaturation();
   EXPECT_CALL(
       *context,
       getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _))
       .WillOnce(SetArgPointee<2>(kStride))
       .RetiresOnSaturation();
-  EXPECT_CALL(*context, mapImageCHROMIUM(kImageId))
-      .WillOnce(Return(dummy_mapped_buffer_address))
-      .RetiresOnSaturation();
-  resource_provider->MapImage(id, &stride);
-
   EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
       .Times(1)
       .RetiresOnSaturation();
-  resource_provider->UnmapImage(id);
+  {
+    ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
+        resource_provider.get(), id);
+    EXPECT_TRUE(!!lock.gpu_memory_buffer());
+  }
 
   EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1)
       .RetiresOnSaturation();
@@ -3423,28 +3425,29 @@
   source_id = resource_provider->CreateResource(
       size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format);
 
-  const int kStride = 4;
-  void* dummy_mapped_buffer_address = NULL;
+  const int kStride = 8;
+  uint8 buffer_data[kStride * kHeight];
   EXPECT_CALL(
       *context,
       createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM))
       .WillOnce(Return(kImageId))
       .RetiresOnSaturation();
+  EXPECT_CALL(*context, mapImageCHROMIUM(kImageId))
+      .WillOnce(Return(buffer_data))
+      .RetiresOnSaturation();
   EXPECT_CALL(
       *context,
       getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _))
       .WillOnce(SetArgPointee<2>(kStride))
       .RetiresOnSaturation();
-  EXPECT_CALL(*context, mapImageCHROMIUM(kImageId))
-      .WillOnce(Return(dummy_mapped_buffer_address))
-      .RetiresOnSaturation();
-  resource_provider->AcquireImage(source_id);
-  int stride;
-  resource_provider->MapImage(source_id, &stride);
   EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
       .Times(1)
       .RetiresOnSaturation();
-  resource_provider->UnmapImage(source_id);
+  {
+    ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
+        resource_provider.get(), source_id);
+    EXPECT_TRUE(!!lock.gpu_memory_buffer());
+  }
   Mock::VerifyAndClearExpectations(context);
 
   dest_id = resource_provider->CreateResource(
@@ -3615,11 +3618,11 @@
 
 class TextureIdAllocationTrackingContext : public TestWebGraphicsContext3D {
  public:
-  virtual GLuint NextTextureId() OVERRIDE {
+  virtual GLuint NextTextureId() override {
     base::AutoLock lock(namespace_->lock);
     return namespace_->next_texture_id++;
   }
-  virtual void RetireTextureId(GLuint) OVERRIDE {}
+  virtual void RetireTextureId(GLuint) override {}
   GLuint PeekTextureId() {
     base::AutoLock lock(namespace_->lock);
     return namespace_->next_texture_id;
diff --git a/cc/resources/resource_update_controller_unittest.cc b/cc/resources/resource_update_controller_unittest.cc
index 58df016..18ad507 100644
--- a/cc/resources/resource_update_controller_unittest.cc
+++ b/cc/resources/resource_update_controller_unittest.cc
@@ -32,8 +32,8 @@
   explicit WebGraphicsContext3DForUploadTest(ResourceUpdateControllerTest* test)
       : test_(test) {}
 
-  virtual void flush() OVERRIDE;
-  virtual void shallowFlushCHROMIUM() OVERRIDE;
+  virtual void flush() override;
+  virtual void shallowFlushCHROMIUM() override;
   virtual void texSubImage2D(GLenum target,
                              GLint level,
                              GLint xoffset,
@@ -42,10 +42,10 @@
                              GLsizei height,
                              GLenum format,
                              GLenum type,
-                             const void* pixels) OVERRIDE;
+                             const void* pixels) override;
 
   virtual void getQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* value)
-      OVERRIDE;
+      override;
 
  private:
   ResourceUpdateControllerTest* test_;
@@ -328,7 +328,7 @@
   void Reset() { ready_to_finalize_called_ = false; }
   bool ReadyToFinalizeCalled() const { return ready_to_finalize_called_; }
 
-  virtual void ReadyToFinalizeTextureUpdates() OVERRIDE {
+  virtual void ReadyToFinalizeTextureUpdates() override {
     ready_to_finalize_called_ = true;
   }
 
@@ -352,7 +352,7 @@
   void SetUpdateTextureTime(base::TimeDelta time) {
     update_textures_time_ = time;
   }
-  virtual base::TimeTicks UpdateMoreTexturesCompletionTime() OVERRIDE {
+  virtual base::TimeTicks UpdateMoreTexturesCompletionTime() override {
     size_t total_updates =
         resource_provider_->NumBlockingUploads() + update_more_textures_size_;
     return now_ + total_updates * update_textures_time_;
@@ -360,7 +360,7 @@
   void SetUpdateMoreTexturesSize(size_t size) {
     update_more_textures_size_ = size;
   }
-  virtual size_t UpdateMoreTexturesSize() const OVERRIDE {
+  virtual size_t UpdateMoreTexturesSize() const override {
     return update_more_textures_size_;
   }
 
diff --git a/cc/resources/scoped_ui_resource.h b/cc/resources/scoped_ui_resource.h
index c257e1e..9d4b937 100644
--- a/cc/resources/scoped_ui_resource.h
+++ b/cc/resources/scoped_ui_resource.h
@@ -29,7 +29,7 @@
 
   // UIResourceClient implementation.
   virtual UIResourceBitmap GetBitmap(UIResourceId uid,
-                                     bool resource_lost) OVERRIDE;
+                                     bool resource_lost) override;
   UIResourceId id() { return id_; }
 
  protected:
diff --git a/cc/resources/skpicture_content_layer_updater.h b/cc/resources/skpicture_content_layer_updater.h
index 9c79c74..55edade 100644
--- a/cc/resources/skpicture_content_layer_updater.h
+++ b/cc/resources/skpicture_content_layer_updater.h
@@ -29,7 +29,7 @@
                                const gfx::Rect& paint_rect,
                                const gfx::Size& tile_size,
                                float contents_width_scale,
-                               float contents_height_scale) OVERRIDE;
+                               float contents_height_scale) override;
   void DrawPicture(SkCanvas* canvas);
 
  private:
diff --git a/cc/resources/task_graph_runner_perftest.cc b/cc/resources/task_graph_runner_perftest.cc
index 533ea4b..999043f 100644
--- a/cc/resources/task_graph_runner_perftest.cc
+++ b/cc/resources/task_graph_runner_perftest.cc
@@ -27,7 +27,7 @@
   PerfTaskImpl() {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {}
+  virtual void RunOnWorkerThread() override {}
 
   void Reset() { did_run_ = false; }
 
@@ -45,11 +45,11 @@
                kTimeCheckInterval) {}
 
   // Overridden from testing::Test:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     task_graph_runner_ = make_scoped_ptr(new TaskGraphRunner);
     namespace_token_ = task_graph_runner_->GetNamespaceToken();
   }
-  virtual void TearDown() OVERRIDE { task_graph_runner_ = nullptr; }
+  virtual void TearDown() override { task_graph_runner_ = nullptr; }
 
   void AfterTest(const std::string& test_name) {
     // Format matches chrome/test/perf/perf_test.h:PrintResult
diff --git a/cc/resources/task_graph_runner_unittest.cc b/cc/resources/task_graph_runner_unittest.cc
index 1a6256c..6e5a785 100644
--- a/cc/resources/task_graph_runner_unittest.cc
+++ b/cc/resources/task_graph_runner_unittest.cc
@@ -118,7 +118,7 @@
         : test_(test), namespace_index_(namespace_index), id_(id) {}
 
     // Overridden from Task:
-    virtual void RunOnWorkerThread() OVERRIDE {
+    virtual void RunOnWorkerThread() override {
       test_->RunTaskOnWorkerThread(namespace_index_, id_);
     }
 
@@ -145,7 +145,7 @@
         : FakeTaskImpl(test, namespace_index, id) {}
 
     // Overridden from FakeTaskImpl:
-    virtual void CompleteOnOriginThread() OVERRIDE {}
+    virtual void CompleteOnOriginThread() override {}
 
    private:
     virtual ~FakeDependentTaskImpl() {}
@@ -167,7 +167,7 @@
                             public base::DelegateSimpleThread::Delegate {
  public:
   // Overridden from testing::Test:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     const size_t num_threads = GetParam();
     while (workers_.size() < num_threads) {
       scoped_ptr<base::DelegateSimpleThread> worker =
@@ -179,7 +179,7 @@
     for (int i = 0; i < kNamespaceCount; ++i)
       namespace_token_[i] = task_graph_runner_->GetNamespaceToken();
   }
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     task_graph_runner_->Shutdown();
     while (workers_.size()) {
       scoped_ptr<base::DelegateSimpleThread> worker = workers_.take_front();
@@ -189,7 +189,7 @@
 
  private:
   // Overridden from base::DelegateSimpleThread::Delegate:
-  virtual void Run() OVERRIDE { task_graph_runner_->Run(); }
+  virtual void Run() override { task_graph_runner_->Run(); }
 
   ScopedPtrDeque<base::DelegateSimpleThread> workers_;
 };
@@ -285,21 +285,21 @@
       public base::DelegateSimpleThread::Delegate {
  public:
   // Overridden from testing::Test:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     worker_.reset(new base::DelegateSimpleThread(this, "TestWorker"));
     worker_->Start();
 
     for (int i = 0; i < kNamespaceCount; ++i)
       namespace_token_[i] = task_graph_runner_->GetNamespaceToken();
   }
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     task_graph_runner_->Shutdown();
     worker_->Join();
   }
 
  private:
   // Overridden from base::DelegateSimpleThread::Delegate:
-  virtual void Run() OVERRIDE { task_graph_runner_->Run(); }
+  virtual void Run() override { task_graph_runner_->Run(); }
 
   scoped_ptr<base::DelegateSimpleThread> worker_;
 };
diff --git a/cc/resources/texture_uploader_unittest.cc b/cc/resources/texture_uploader_unittest.cc
index bf94065..335908d 100644
--- a/cc/resources/texture_uploader_unittest.cc
+++ b/cc/resources/texture_uploader_unittest.cc
@@ -19,7 +19,7 @@
  public:
   TextureUploadTestContext() : result_available_(0), unpack_alignment_(4) {}
 
-  virtual void PixelStorei(GLenum pname, GLint param) OVERRIDE {
+  virtual void PixelStorei(GLenum pname, GLint param) override {
     switch (pname) {
       case GL_UNPACK_ALIGNMENT:
         // Param should be a power of two <= 8.
@@ -43,7 +43,7 @@
 
   virtual void GetQueryObjectuivEXT(GLuint,
                                     GLenum type,
-                                    GLuint* value) OVERRIDE {
+                                    GLuint* value) override {
     switch (type) {
       case GL_QUERY_RESULT_AVAILABLE_EXT:
         *value = result_available_;
@@ -62,7 +62,7 @@
                              GLsizei height,
                              GLenum format,
                              GLenum type,
-                             const void* pixels) OVERRIDE {
+                             const void* pixels) override {
     EXPECT_EQ(static_cast<unsigned>(GL_TEXTURE_2D), target);
     EXPECT_EQ(0, level);
     EXPECT_LE(0, width);
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
index 218faca..d121840 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -59,7 +59,7 @@
         reply_(reply) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {
+  virtual void RunOnWorkerThread() override {
     TRACE_EVENT0("cc", "RasterizerTaskImpl::RunOnWorkerThread");
 
     DCHECK(picture_pile_.get());
@@ -75,14 +75,14 @@
   }
 
   // Overridden from RasterizerTask:
-  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
+  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {
     DCHECK(!raster_buffer_);
     raster_buffer_ = client->AcquireBufferForRaster(resource());
   }
-  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
+  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {
     client->ReleaseBufferForRaster(raster_buffer_.Pass());
   }
-  virtual void RunReplyOnOriginThread() OVERRIDE {
+  virtual void RunReplyOnOriginThread() override {
     DCHECK(!raster_buffer_);
     reply_.Run(analysis_, !HasFinishedRunning());
   }
@@ -172,7 +172,7 @@
         reply_(reply) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {
+  virtual void RunOnWorkerThread() override {
     TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread");
 
     devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
@@ -183,9 +183,9 @@
   }
 
   // Overridden from RasterizerTask:
-  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void RunReplyOnOriginThread() OVERRIDE {
+  virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {}
+  virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {}
+  virtual void RunReplyOnOriginThread() override {
     reply_.Run(!HasFinishedRunning());
   }
 
diff --git a/cc/resources/tile_manager.h b/cc/resources/tile_manager.h
index a9118a7..d8d219b 100644
--- a/cc/resources/tile_manager.h
+++ b/cc/resources/tile_manager.h
@@ -183,11 +183,11 @@
   void CleanUpReleasedTiles();
 
   // Overriden from RefCountedManager<Tile>:
-  virtual void Release(Tile* tile) OVERRIDE;
+  virtual void Release(Tile* tile) override;
 
   // Overriden from RasterizerClient:
-  virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE;
-  virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const OVERRIDE;
+  virtual void DidFinishRunningTasks(TaskSet task_set) override;
+  virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const override;
 
   typedef std::vector<Tile*> TileVector;
   typedef std::set<Tile*> TileSet;
diff --git a/cc/resources/tile_manager_perftest.cc b/cc/resources/tile_manager_perftest.cc
index 5ff4fa2..9766df6 100644
--- a/cc/resources/tile_manager_perftest.cc
+++ b/cc/resources/tile_manager_perftest.cc
@@ -37,9 +37,9 @@
 class FakeRasterizerImpl : public Rasterizer, public RasterizerTaskClient {
  public:
   // Overridden from Rasterizer:
-  virtual void SetClient(RasterizerClient* client) OVERRIDE {}
-  virtual void Shutdown() OVERRIDE {}
-  virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE {
+  virtual void SetClient(RasterizerClient* client) override {}
+  virtual void Shutdown() override {}
+  virtual void ScheduleTasks(RasterTaskQueue* queue) override {
     for (RasterTaskQueue::Item::Vector::const_iterator it =
              queue->items.begin();
          it != queue->items.end();
@@ -53,7 +53,7 @@
       completed_tasks_.push_back(task);
     }
   }
-  virtual void CheckForCompletedTasks() OVERRIDE {
+  virtual void CheckForCompletedTasks() override {
     for (RasterTask::Vector::iterator it = completed_tasks_.begin();
          it != completed_tasks_.end();
          ++it) {
@@ -70,11 +70,11 @@
 
   // Overridden from RasterizerTaskClient:
   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
-      const Resource* resource) OVERRIDE {
+      const Resource* resource) override {
     return nullptr;
   }
   virtual void ReleaseBufferForRaster(
-      scoped_ptr<RasterBuffer> buffer) OVERRIDE {}
+      scoped_ptr<RasterBuffer> buffer) override {}
 
  private:
   RasterTask::Vector completed_tasks_;
@@ -112,7 +112,7 @@
     host_impl_.tile_manager()->SetGlobalStateForTesting(state);
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     picture_pile_ = FakePicturePileImpl::CreateInfiniteFilledPile();
     InitializeRenderer();
     SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
diff --git a/cc/resources/tile_manager_unittest.cc b/cc/resources/tile_manager_unittest.cc
index 3fb5b13..b0d57e6 100644
--- a/cc/resources/tile_manager_unittest.cc
+++ b/cc/resources/tile_manager_unittest.cc
@@ -81,7 +81,7 @@
     tile_manager_->SetGlobalStateForTesting(state);
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     tile_manager_.reset(NULL);
     picture_pile_ = NULL;
 
@@ -90,15 +90,15 @@
 
   // TileManagerClient implementation.
   virtual const std::vector<PictureLayerImpl*>& GetPictureLayers()
-      const OVERRIDE {
+      const override {
     return picture_layers_;
   }
-  virtual void NotifyReadyToActivate() OVERRIDE { ready_to_activate_ = true; }
-  virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE {}
+  virtual void NotifyReadyToActivate() override { ready_to_activate_ = true; }
+  virtual void NotifyTileStateChanged(const Tile* tile) override {}
   virtual void BuildRasterQueue(RasterTilePriorityQueue* queue,
-                                TreePriority priority) OVERRIDE {}
+                                TreePriority priority) override {}
   virtual void BuildEvictionQueue(EvictionTilePriorityQueue* queue,
-                                  TreePriority priority) OVERRIDE {}
+                                  TreePriority priority) override {}
 
   TileVector CreateTilesWithSize(int count,
                                  TilePriority active_priority,
@@ -514,7 +514,7 @@
     host_impl_.tile_manager()->SetGlobalStateForTesting(state);
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     InitializeRenderer();
     SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
   }
diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc
index 75edccb..f62b6e6 100644
--- a/cc/resources/video_resource_updater.cc
+++ b/cc/resources/video_resource_updater.cc
@@ -27,10 +27,10 @@
  public:
   explicit SyncPointClientImpl(gpu::gles2::GLES2Interface* gl) : gl_(gl) {}
   virtual ~SyncPointClientImpl() {}
-  virtual uint32 InsertSyncPoint() OVERRIDE {
+  virtual uint32 InsertSyncPoint() override {
     return GLC(gl_, gl_->InsertSyncPointCHROMIUM());
   }
-  virtual void WaitSyncPoint(uint32 sync_point) OVERRIDE {
+  virtual void WaitSyncPoint(uint32 sync_point) override {
     GLC(gl_, gl_->WaitSyncPointCHROMIUM(sync_point));
   }
 
diff --git a/cc/resources/zero_copy_raster_worker_pool.cc b/cc/resources/zero_copy_raster_worker_pool.cc
index f463406..0d9c21a 100644
--- a/cc/resources/zero_copy_raster_worker_pool.cc
+++ b/cc/resources/zero_copy_raster_worker_pool.cc
@@ -21,30 +21,24 @@
  public:
   RasterBufferImpl(ResourceProvider* resource_provider,
                    const Resource* resource)
-      : resource_provider_(resource_provider),
+      : lock_(resource_provider, resource->id()),
         resource_(resource),
-        stride_(0),
-        buffer_(resource_provider->MapImage(resource->id(), &stride_)) {}
-
-  virtual ~RasterBufferImpl() {
-    resource_provider_->UnmapImage(resource_->id());
-
-    // This RasterBuffer implementation provides direct access to the memory
-    // used by the GPU. Read lock fences are required to ensure that we're not
-    // trying to map a resource that is currently in-use by the GPU.
-    resource_provider_->EnableReadLockFences(resource_->id());
-  }
+        buffer_(NULL) {}
 
   // Overridden from RasterBuffer:
-  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() OVERRIDE {
+  virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() override {
+    buffer_ = lock_.gpu_memory_buffer();
     if (!buffer_)
       return skia::AdoptRef(SkCreateNullCanvas());
 
-    RasterWorkerPool::AcquireBitmapForBuffer(
-        &bitmap_, buffer_, resource_->format(), resource_->size(), stride_);
+    RasterWorkerPool::AcquireBitmapForBuffer(&bitmap_,
+                                             buffer_,
+                                             resource_->format(),
+                                             resource_->size(),
+                                             lock_.stride());
     return skia::AdoptRef(new SkCanvas(bitmap_));
   }
-  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) OVERRIDE {
+  virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) override {
     if (!buffer_)
       return;
 
@@ -53,10 +47,9 @@
   }
 
  private:
-  ResourceProvider* resource_provider_;
+  ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock_;
   const Resource* resource_;
-  int stride_;
-  uint8_t* buffer_;
+  void* buffer_;
   SkBitmap bitmap_;
 
   DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl);
@@ -190,10 +183,6 @@
 
 scoped_ptr<RasterBuffer> ZeroCopyRasterWorkerPool::AcquireBufferForRaster(
     const Resource* resource) {
-  // RasterBuffer implementation depends on an image having been acquired for
-  // the resource.
-  resource_provider_->AcquireImage(resource->id());
-
   return make_scoped_ptr<RasterBuffer>(
       new RasterBufferImpl(resource_provider_, resource));
 }
diff --git a/cc/resources/zero_copy_raster_worker_pool.h b/cc/resources/zero_copy_raster_worker_pool.h
index 4e4280e..b94713d 100644
--- a/cc/resources/zero_copy_raster_worker_pool.h
+++ b/cc/resources/zero_copy_raster_worker_pool.h
@@ -31,18 +31,18 @@
       ResourceProvider* resource_provider);
 
   // Overridden from RasterWorkerPool:
-  virtual Rasterizer* AsRasterizer() OVERRIDE;
+  virtual Rasterizer* AsRasterizer() override;
 
   // Overridden from Rasterizer:
-  virtual void SetClient(RasterizerClient* client) OVERRIDE;
-  virtual void Shutdown() OVERRIDE;
-  virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
-  virtual void CheckForCompletedTasks() OVERRIDE;
+  virtual void SetClient(RasterizerClient* client) override;
+  virtual void Shutdown() override;
+  virtual void ScheduleTasks(RasterTaskQueue* queue) override;
+  virtual void CheckForCompletedTasks() override;
 
   // Overridden from RasterizerTaskClient:
   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
-      const Resource* resource) OVERRIDE;
-  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
+      const Resource* resource) override;
+  virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
 
  protected:
   ZeroCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner,
diff --git a/cc/scheduler/begin_frame_source.h b/cc/scheduler/begin_frame_source.h
index e0c78be..3b8a576 100644
--- a/cc/scheduler/begin_frame_source.h
+++ b/cc/scheduler/begin_frame_source.h
@@ -71,11 +71,11 @@
   // Traces |args| and DCHECK |args| satisfies pre-conditions then calls
   // OnBeginFrameMixInDelegate and updates the last_begin_frame_args_ value on
   // true.
-  virtual void OnBeginFrame(const BeginFrameArgs& args) OVERRIDE;
-  virtual const BeginFrameArgs LastUsedBeginFrameArgs() const OVERRIDE;
+  virtual void OnBeginFrame(const BeginFrameArgs& args) override;
+  virtual const BeginFrameArgs LastUsedBeginFrameArgs() const override;
 
   // Outputs last_begin_frame_args_
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
  protected:
   // Subclasses should override this method!
@@ -134,15 +134,15 @@
   virtual ~BeginFrameSourceMixIn() {}
 
   // BeginFrameSource
-  virtual bool NeedsBeginFrames() const OVERRIDE;
-  virtual void SetNeedsBeginFrames(bool needs_begin_frames) OVERRIDE;
-  virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE {}
-  virtual void AddObserver(BeginFrameObserver* obs) OVERRIDE;
-  virtual void RemoveObserver(BeginFrameObserver* obs) OVERRIDE;
+  virtual bool NeedsBeginFrames() const override;
+  virtual void SetNeedsBeginFrames(bool needs_begin_frames) override;
+  virtual void DidFinishFrame(size_t remaining_frames) override {}
+  virtual void AddObserver(BeginFrameObserver* obs) override;
+  virtual void RemoveObserver(BeginFrameObserver* obs) override;
 
   // Tracing support - Recommend (but not required) to call this implementation
   // in any override.
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
  protected:
   BeginFrameSourceMixIn();
@@ -171,10 +171,10 @@
   virtual ~BackToBackBeginFrameSource();
 
   // BeginFrameSource
-  virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE;
+  virtual void DidFinishFrame(size_t remaining_frames) override;
 
   // Tracing
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
  protected:
   explicit BackToBackBeginFrameSource(
@@ -187,7 +187,7 @@
   bool send_begin_frame_posted_;
 
   // BeginFrameSourceMixIn
-  virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) OVERRIDE;
+  virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override;
 
   void BeginFrame();
 };
@@ -205,18 +205,18 @@
   virtual ~SyntheticBeginFrameSource();
 
   // BeginFrameSource
-  virtual bool NeedsBeginFrames() const OVERRIDE;
+  virtual bool NeedsBeginFrames() const override;
 
   // Tracing
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
   // VSyncParameterObserver
   virtual void OnUpdateVSyncParameters(
       base::TimeTicks new_vsync_timebase,
-      base::TimeDelta new_vsync_interval) OVERRIDE;
+      base::TimeDelta new_vsync_interval) override;
 
   // TimeSourceClient
-  virtual void OnTimerTick() OVERRIDE;
+  virtual void OnTimerTick() override;
 
  protected:
   explicit SyntheticBeginFrameSource(
@@ -226,7 +226,7 @@
                                       BeginFrameArgs::BeginFrameArgsType type);
 
   // BeginFrameSourceMixIn
-  virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) OVERRIDE;
+  virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override;
 
   scoped_refptr<DelayBasedTimeSource> time_source_;
 };
@@ -251,16 +251,16 @@
   // The mux is an BeginFrameObserver as it needs to proxy the OnBeginFrame
   // calls to preserve the monotonicity of the BeginFrameArgs when switching
   // sources.
-  virtual void OnBeginFrame(const BeginFrameArgs& args) OVERRIDE;
-  virtual const BeginFrameArgs LastUsedBeginFrameArgs() const OVERRIDE;
+  virtual void OnBeginFrame(const BeginFrameArgs& args) override;
+  virtual const BeginFrameArgs LastUsedBeginFrameArgs() const override;
 
   // BeginFrameSource
-  virtual bool NeedsBeginFrames() const OVERRIDE;
-  virtual void SetNeedsBeginFrames(bool needs_begin_frames) OVERRIDE;
-  virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE;
+  virtual bool NeedsBeginFrames() const override;
+  virtual void SetNeedsBeginFrames(bool needs_begin_frames) override;
+  virtual void DidFinishFrame(size_t remaining_frames) override;
 
   // Tracing
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
  protected:
   BeginFrameSourceMultiplexer();
diff --git a/cc/scheduler/begin_frame_source_unittest.cc b/cc/scheduler/begin_frame_source_unittest.cc
index 20a4878..8abf1a9 100644
--- a/cc/scheduler/begin_frame_source_unittest.cc
+++ b/cc/scheduler/begin_frame_source_unittest.cc
@@ -256,7 +256,7 @@
  public:
   BeginFrameSource* source_;
 
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE {
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override {
     dict->SetString("type", "LoopingBeginFrameObserver");
     dict->BeginDictionary("source");
     source_->AsValueInto(dict);
@@ -265,7 +265,7 @@
 
  protected:
   // BeginFrameObserverMixIn
-  virtual bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) OVERRIDE {
+  virtual bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) override {
     return true;
   }
 };
@@ -297,7 +297,7 @@
                                  base::SingleThreadTaskRunner* task_runner)
       : BackToBackBeginFrameSource(task_runner), now_src_(now_src) {}
 
-  virtual base::TimeTicks Now() OVERRIDE { return now_src_->Now(); }
+  virtual base::TimeTicks Now() override { return now_src_->Now(); }
 
   scoped_refptr<TestNowSource> now_src_;
 };
@@ -312,7 +312,7 @@
   scoped_ptr<TestBackToBackBeginFrameSource> source_;
   scoped_ptr<MockBeginFrameObserver> obs_;
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     now_src_ = TestNowSource::Create(1000);
     task_runner_ =
         make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_, false));
@@ -323,7 +323,7 @@
     source_->AddObserver(obs_.get());
   }
 
-  virtual void TearDown() OVERRIDE { obs_.reset(); }
+  virtual void TearDown() override { obs_.reset(); }
 };
 
 const int64_t BackToBackBeginFrameSourceTest::kDeadline =
@@ -478,7 +478,7 @@
   scoped_ptr<TestSyntheticBeginFrameSource> source_;
   scoped_ptr<MockBeginFrameObserver> obs_;
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     now_src_ = TestNowSource::Create(1000);
     task_runner_ =
         make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_, false));
@@ -488,7 +488,7 @@
     source_->AddObserver(obs_.get());
   }
 
-  virtual void TearDown() OVERRIDE { obs_.reset(); }
+  virtual void TearDown() override { obs_.reset(); }
 };
 
 TEST_F(SyntheticBeginFrameSourceTest,
@@ -547,7 +547,7 @@
 // BeginFrameSourceMultiplexer testing -----------------------------------
 class BeginFrameSourceMultiplexerTest : public ::testing::Test {
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     mux_ = BeginFrameSourceMultiplexer::Create();
 
     source1_store_ = make_scoped_ptr(new FakeBeginFrameSource());
@@ -559,7 +559,7 @@
     source3_ = source3_store_.get();
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     // Make sure the mux is torn down before the sources.
     mux_.reset();
   }
diff --git a/cc/scheduler/delay_based_time_source.h b/cc/scheduler/delay_based_time_source.h
index c5cc47d..270102b 100644
--- a/cc/scheduler/delay_based_time_source.h
+++ b/cc/scheduler/delay_based_time_source.h
@@ -101,14 +101,14 @@
   static scoped_refptr<DelayBasedTimeSourceHighRes> Create(
         base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner);
 
-  virtual base::TimeTicks Now() const OVERRIDE;
+  virtual base::TimeTicks Now() const override;
 
  protected:
   DelayBasedTimeSourceHighRes(base::TimeDelta interval,
                               base::SingleThreadTaskRunner* task_runner);
   virtual ~DelayBasedTimeSourceHighRes();
 
-  virtual std::string TypeString() const OVERRIDE;
+  virtual std::string TypeString() const override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(DelayBasedTimeSourceHighRes);
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h
index 3f00421..2ef10a4 100644
--- a/cc/scheduler/scheduler.h
+++ b/cc/scheduler/scheduler.h
@@ -150,14 +150,14 @@
   base::TimeTicks LastBeginImplFrameTime();
 
   scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
-  virtual void AsValueInto(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* value) const override;
 
   void SetContinuousPainting(bool continuous_painting) {
     state_machine_.SetContinuousPainting(continuous_painting);
   }
 
   // BeginFrameObserverMixin
-  virtual bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) OVERRIDE;
+  virtual bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) override;
 
  protected:
   Scheduler(SchedulerClient* client,
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index a6904ae..74a4f06 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -43,6 +43,7 @@
       has_pending_tree_(false),
       pending_tree_is_ready_for_activation_(false),
       active_tree_needs_first_draw_(false),
+      did_commit_after_animating_(false),
       did_create_and_initialize_first_output_surface_(false),
       impl_latency_takes_priority_(false),
       skip_next_begin_main_frame_to_reduce_latency_(false),
@@ -225,6 +226,7 @@
                     pending_tree_is_ready_for_activation_);
   state->SetBoolean("active_tree_needs_first_draw",
                     active_tree_needs_first_draw_);
+  state->SetBoolean("did_commit_after_animating", did_commit_after_animating_);
   state->SetBoolean("did_create_and_initialize_first_output_surface",
                     did_create_and_initialize_first_output_surface_);
   state->SetBoolean("impl_latency_takes_priority",
@@ -251,6 +253,10 @@
   skip_next_begin_main_frame_to_reduce_latency_ = false;
 }
 
+bool SchedulerStateMachine::HasAnimatedThisFrame() const {
+  return last_frame_number_animate_performed_ == current_frame_number_;
+}
+
 bool SchedulerStateMachine::HasSentBeginMainFrameThisFrame() const {
   return current_frame_number_ ==
          last_frame_number_begin_main_frame_sent_;
@@ -320,7 +326,7 @@
   if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_IDLE)
     return false;
 
-  // We want to clear the pipline of any pending draws and activations
+  // We want to clear the pipeline of any pending draws and activations
   // before starting output surface initialization. This allows us to avoid
   // weird corner cases where we abort draws or force activation while we
   // are initializing the output surface.
@@ -335,12 +341,17 @@
 bool SchedulerStateMachine::ShouldDraw() const {
   // If we need to abort draws, we should do so ASAP since the draw could
   // be blocking other important actions (like output surface initialization),
-  // from occuring. If we are waiting for the first draw, then perfom the
+  // from occurring. If we are waiting for the first draw, then perform the
   // aborted draw to keep things moving. If we are not waiting for the first
   // draw however, we don't want to abort for no reason.
   if (PendingDrawsShouldBeAborted())
     return active_tree_needs_first_draw_;
 
+  // If a commit has occurred after the animate call, we need to call animate
+  // again before we should draw.
+  if (did_commit_after_animating_)
+    return false;
+
   // After this line, we only want to send a swap request once per frame.
   if (HasRequestedSwapThisFrame())
     return false;
@@ -412,7 +423,8 @@
   if (!can_draw_)
     return false;
 
-  if (last_frame_number_animate_performed_ == current_frame_number_)
+  // If a commit occurred after our last call, we need to do animation again.
+  if (HasAnimatedThisFrame() && !did_commit_after_animating_)
     return false;
 
   if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING &&
@@ -474,14 +486,6 @@
   if (!HasInitializedOutputSurface())
     return false;
 
-  // SwapAck throttle the BeginMainFrames unless we just swapped.
-  // TODO(brianderson): Remove this restriction to improve throughput.
-  bool just_swapped_in_deadline =
-      begin_impl_frame_state_ == BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE &&
-      HasSwappedThisFrame();
-  if (pending_swaps_ >= max_pending_swaps_ && !just_swapped_in_deadline)
-    return false;
-
   if (skip_begin_main_frame_to_reduce_latency_)
     return false;
 
@@ -564,6 +568,7 @@
     case ACTION_ANIMATE:
       last_frame_number_animate_performed_ = current_frame_number_;
       needs_animate_ = false;
+      did_commit_after_animating_ = false;
       // TODO(skyostil): Instead of assuming this, require the client to tell
       // us.
       SetNeedsRedraw();
@@ -619,6 +624,9 @@
 void SchedulerStateMachine::UpdateStateOnCommit(bool commit_was_aborted) {
   commit_count_++;
 
+  if (!commit_was_aborted && HasAnimatedThisFrame())
+    did_commit_after_animating_ = true;
+
   if (commit_was_aborted || settings_.main_frame_before_activation_enabled) {
     commit_state_ = COMMIT_STATE_IDLE;
   } else {
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
index 018f10e..887e4c7 100644
--- a/cc/scheduler/scheduler_state_machine.h
+++ b/cc/scheduler/scheduler_state_machine.h
@@ -260,6 +260,7 @@
   bool ShouldManageTiles() const;
 
   void AdvanceCurrentFrameNumber();
+  bool HasAnimatedThisFrame() const;
   bool HasSentBeginMainFrameThisFrame() const;
   bool HasUpdatedVisibleTilesThisFrame() const;
   bool HasRequestedSwapThisFrame() const;
@@ -307,6 +308,7 @@
   bool has_pending_tree_;
   bool pending_tree_is_ready_for_activation_;
   bool active_tree_needs_first_draw_;
+  bool did_commit_after_animating_;
   bool did_create_and_initialize_first_output_surface_;
   bool impl_latency_takes_priority_;
   bool skip_next_begin_main_frame_to_reduce_latency_;
diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc
index 0f66a73..e19678d 100644
--- a/cc/scheduler/scheduler_state_machine_unittest.cc
+++ b/cc/scheduler/scheduler_state_machine_unittest.cc
@@ -1671,16 +1671,9 @@
 
   // Finish the previous commit and draw it.
   FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
-  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
-
-  // Verify we do not send another BeginMainFrame if was are swap throttled
-  // and did not just swap.
   state.SetNeedsCommit();
-  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
-  state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
-  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
-  EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
-  state.OnBeginImplFrameDeadline();
+  EXPECT_ACTION_UPDATE_STATE(
+      SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
 }
 
@@ -1759,6 +1752,39 @@
       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
 }
 
+TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) {
+  SchedulerSettings settings;
+  settings.impl_side_painting = true;
+  StateMachine state(settings);
+  state.SetCanStart();
+  state.UpdateState(state.NextAction());
+  state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
+  state.SetVisible(true);
+  state.SetCanDraw(true);
+
+  // Check that animations are updated before we start a commit.
+  state.SetNeedsAnimate();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+  state.SetNeedsCommit();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+  EXPECT_TRUE(state.BeginFrameNeeded());
+
+  state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
+  EXPECT_ACTION_UPDATE_STATE(
+      SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
+
+  state.NotifyBeginMainFrameStarted();
+  state.NotifyReadyToCommit();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
+
+  state.OnBeginImplFrameDeadlinePending();
+  state.OnBeginImplFrameDeadline();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
+  EXPECT_ACTION_UPDATE_STATE(
+      SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
+}
+
 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) {
   SchedulerSettings settings;
   settings.impl_side_painting = true;
@@ -1786,5 +1812,46 @@
       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
 }
 
+TEST(SchedulerStateMachineTest, TestBeginMainFrameNotSwapThrottled) {
+  SchedulerSettings settings;
+  settings.impl_side_painting = true;
+  StateMachine state(settings);
+  state.SetCanStart();
+  state.UpdateState(state.NextAction());
+  state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
+  state.SetVisible(true);
+  state.SetCanDraw(true);
+  state.SetNeedsCommit();
+
+  // Begin frame and finish without interruption;
+  state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
+  EXPECT_ACTION_UPDATE_STATE(
+      SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+  state.NotifyBeginMainFrameStarted();
+  state.NotifyReadyToCommit();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+  state.NotifyReadyToActivate();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+  state.OnBeginImplFrameDeadline();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
+  EXPECT_ACTION_UPDATE_STATE(
+      SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+
+  // Make sure we're not swap throttled
+  state.DidSwapBuffers();
+  state.DidSwapBuffersComplete();
+
+  // Verify we send another begin frame
+  state.SetNeedsCommit();
+  state.OnBeginImplFrame(CreateBeginFrameArgsForTesting());
+  EXPECT_ACTION_UPDATE_STATE(
+      SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index 514899b..9c459b5 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -53,7 +53,7 @@
         FakeSchedulerClient* client)
         : client_(client) {}
 
-    virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) OVERRIDE {
+    virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override {
       if (needs_begin_frames) {
         client_->actions_.push_back("SetNeedsBeginFrames(true)");
       } else {
@@ -107,7 +107,7 @@
     return scheduler_->settings().begin_frame_scheduling_enabled &&
            scheduler_->settings().throttle_frame_production;
   }
-  virtual FakeBeginFrameSource* ExternalBeginFrameSource() OVERRIDE {
+  virtual FakeBeginFrameSource* ExternalBeginFrameSource() override {
     return &fake_frame_source_;
   }
 
@@ -159,19 +159,19 @@
     redraw_will_happen_if_update_visible_tiles_happens_ = redraw;
   }
   // SchedulerClient implementation.
-  virtual void WillBeginImplFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void WillBeginImplFrame(const BeginFrameArgs& args) override {
     actions_.push_back("WillBeginImplFrame");
     states_.push_back(scheduler_->AsValue());
   }
-  virtual void ScheduledActionSendBeginMainFrame() OVERRIDE {
+  virtual void ScheduledActionSendBeginMainFrame() override {
     actions_.push_back("ScheduledActionSendBeginMainFrame");
     states_.push_back(scheduler_->AsValue());
   }
-  virtual void ScheduledActionAnimate() OVERRIDE {
+  virtual void ScheduledActionAnimate() override {
     actions_.push_back("ScheduledActionAnimate");
     states_.push_back(scheduler_->AsValue());
   }
-  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() OVERRIDE {
+  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() override {
     actions_.push_back("ScheduledActionDrawAndSwapIfPossible");
     states_.push_back(scheduler_->AsValue());
     num_draws_++;
@@ -193,48 +193,48 @@
     }
     return result;
   }
-  virtual DrawResult ScheduledActionDrawAndSwapForced() OVERRIDE {
+  virtual DrawResult ScheduledActionDrawAndSwapForced() override {
     actions_.push_back("ScheduledActionDrawAndSwapForced");
     states_.push_back(scheduler_->AsValue());
     return DRAW_SUCCESS;
   }
-  virtual void ScheduledActionCommit() OVERRIDE {
+  virtual void ScheduledActionCommit() override {
     actions_.push_back("ScheduledActionCommit");
     states_.push_back(scheduler_->AsValue());
   }
-  virtual void ScheduledActionUpdateVisibleTiles() OVERRIDE {
+  virtual void ScheduledActionUpdateVisibleTiles() override {
     actions_.push_back("ScheduledActionUpdateVisibleTiles");
     states_.push_back(scheduler_->AsValue());
     if (redraw_will_happen_if_update_visible_tiles_happens_)
       scheduler_->SetNeedsRedraw();
   }
-  virtual void ScheduledActionActivateSyncTree() OVERRIDE {
+  virtual void ScheduledActionActivateSyncTree() override {
     actions_.push_back("ScheduledActionActivateSyncTree");
     states_.push_back(scheduler_->AsValue());
   }
-  virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {
+  virtual void ScheduledActionBeginOutputSurfaceCreation() override {
     actions_.push_back("ScheduledActionBeginOutputSurfaceCreation");
     states_.push_back(scheduler_->AsValue());
   }
-  virtual void ScheduledActionManageTiles() OVERRIDE {
+  virtual void ScheduledActionManageTiles() override {
     actions_.push_back("ScheduledActionManageTiles");
     states_.push_back(scheduler_->AsValue());
   }
-  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE {
+  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) override {
     if (log_anticipated_draw_time_change_)
       actions_.push_back("DidAnticipatedDrawTimeChange");
   }
-  virtual base::TimeDelta DrawDurationEstimate() OVERRIDE {
+  virtual base::TimeDelta DrawDurationEstimate() override {
     return base::TimeDelta();
   }
-  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() OVERRIDE {
+  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() override {
     return base::TimeDelta();
   }
-  virtual base::TimeDelta CommitToActivateDurationEstimate() OVERRIDE {
+  virtual base::TimeDelta CommitToActivateDurationEstimate() override {
     return base::TimeDelta();
   }
 
-  virtual void DidBeginImplFrameDeadline() OVERRIDE {}
+  virtual void DidBeginImplFrameDeadline() override {}
 
   base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) {
     return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback,
@@ -455,23 +455,23 @@
 
 class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient {
  public:
-  virtual void ScheduledActionSendBeginMainFrame() OVERRIDE {}
+  virtual void ScheduledActionSendBeginMainFrame() override {}
   virtual DrawResult ScheduledActionDrawAndSwapIfPossible()
-      OVERRIDE {
+      override {
     // Only SetNeedsRedraw the first time this is called
     if (!num_draws_)
       scheduler_->SetNeedsRedraw();
     return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible();
   }
 
-  virtual DrawResult ScheduledActionDrawAndSwapForced() OVERRIDE {
+  virtual DrawResult ScheduledActionDrawAndSwapForced() override {
     NOTREACHED();
     return DRAW_SUCCESS;
   }
 
-  virtual void ScheduledActionCommit() OVERRIDE {}
-  virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {}
-  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE {}
+  virtual void ScheduledActionCommit() override {}
+  virtual void ScheduledActionBeginOutputSurfaceCreation() override {}
+  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) override {}
 };
 
 // Tests for two different situations:
@@ -566,9 +566,9 @@
   SchedulerClientThatSetNeedsCommitInsideDraw()
       : set_needs_commit_on_next_draw_(false) {}
 
-  virtual void ScheduledActionSendBeginMainFrame() OVERRIDE {}
+  virtual void ScheduledActionSendBeginMainFrame() override {}
   virtual DrawResult ScheduledActionDrawAndSwapIfPossible()
-      OVERRIDE {
+      override {
     // Only SetNeedsCommit the first time this is called
     if (set_needs_commit_on_next_draw_) {
       scheduler_->SetNeedsCommit();
@@ -577,14 +577,14 @@
     return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible();
   }
 
-  virtual DrawResult ScheduledActionDrawAndSwapForced() OVERRIDE {
+  virtual DrawResult ScheduledActionDrawAndSwapForced() override {
     NOTREACHED();
     return DRAW_SUCCESS;
   }
 
-  virtual void ScheduledActionCommit() OVERRIDE {}
-  virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {}
-  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE {}
+  virtual void ScheduledActionCommit() override {}
+  virtual void ScheduledActionBeginOutputSurfaceCreation() override {}
+  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) override {}
 
   void SetNeedsCommitOnNextDraw() { set_needs_commit_on_next_draw_ = true; }
 
@@ -722,7 +722,7 @@
 class SchedulerClientNeedsManageTilesInDraw : public FakeSchedulerClient {
  public:
   virtual DrawResult ScheduledActionDrawAndSwapIfPossible()
-      OVERRIDE {
+      override {
     scheduler_->SetNeedsManageTiles();
     return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible();
   }
@@ -1043,13 +1043,13 @@
             begin_main_frame_to_commit_duration),
         commit_to_activate_duration_(commit_to_activate_duration) {}
 
-  virtual base::TimeDelta DrawDurationEstimate() OVERRIDE {
+  virtual base::TimeDelta DrawDurationEstimate() override {
     return draw_duration_;
   }
-  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() OVERRIDE {
+  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() override {
     return begin_main_frame_to_commit_duration_;
   }
-  virtual base::TimeDelta CommitToActivateDurationEstimate() OVERRIDE {
+  virtual base::TimeDelta CommitToActivateDurationEstimate() override {
     return commit_to_activate_duration_;
   }
 
@@ -1331,11 +1331,12 @@
   EXPECT_TRUE(client.needs_begin_frames());
   client.Reset();
 
-  // While swap throttled, BeginRetroFrames should trigger BeginImplFrames
-  // but not a BeginMainFrame or draw.
+  // While swap throttled, BeginRetroFrames should trigger BeginImplFrames and
+  // BeginMainFrame, but not draw.
   scheduler->SetNeedsCommit();
   client.task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 1);
+  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
   EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
   EXPECT_TRUE(client.needs_begin_frames());
   client.Reset();
@@ -1350,7 +1351,7 @@
 
   // Take us out of a swap throttled state.
   scheduler->DidSwapBuffersComplete();
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 0, 1);
+  EXPECT_EQ(0, client.num_actions_());
   EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
   EXPECT_TRUE(client.needs_begin_frames());
   client.Reset();
@@ -1510,18 +1511,19 @@
   EXPECT_FALSE(client.needs_begin_frames());
   client.Reset();
 
-  // While swap throttled, BeginFrames should trigger BeginImplFrames,
-  // but not a BeginMainFrame or draw.
+  // While swap throttled, BeginFrames should trigger BeginImplFrames and
+  // BeginMainFrame, but not draw.
   scheduler->SetNeedsCommit();
   client.task_runner().RunPendingTasks();  // Run posted BeginFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 1);
+  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
   EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
   EXPECT_FALSE(client.needs_begin_frames());
   client.Reset();
 
   // Take us out of a swap throttled state.
   scheduler->DidSwapBuffersComplete();
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 0, 1);
+  EXPECT_EQ(0, client.num_actions_());
   EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
   EXPECT_FALSE(client.needs_begin_frames());
   client.Reset();
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc
index e206eb8..cf317b4 100644
--- a/cc/surfaces/display.cc
+++ b/cc/surfaces/display.cc
@@ -6,6 +6,7 @@
 
 #include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop.h"
+#include "cc/debug/benchmark_instrumentation.h"
 #include "cc/output/compositor_frame.h"
 #include "cc/output/compositor_frame_ack.h"
 #include "cc/output/direct_renderer.h"
@@ -110,6 +111,7 @@
     return false;
 
   TRACE_EVENT0("cc", "Display::Draw");
+  benchmark_instrumentation::IssueDisplayRenderingStatsEvent();
   DelegatedFrameData* frame_data = frame->delegated_frame_data.get();
 
   // Only reshape when we know we are going to draw. Otherwise, the reshape
diff --git a/cc/surfaces/display.h b/cc/surfaces/display.h
index d12d956..16bdd98 100644
--- a/cc/surfaces/display.h
+++ b/cc/surfaces/display.h
@@ -52,32 +52,32 @@
   int GetMaxFramesPending();
 
   // OutputSurfaceClient implementation.
-  virtual void DeferredInitialize() OVERRIDE {}
-  virtual void ReleaseGL() OVERRIDE {}
+  virtual void DeferredInitialize() override {}
+  virtual void ReleaseGL() override {}
   virtual void CommitVSyncParameters(base::TimeTicks timebase,
-                                     base::TimeDelta interval) OVERRIDE;
-  virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) OVERRIDE {}
-  virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {}
-  virtual void DidSwapBuffers() OVERRIDE;
-  virtual void DidSwapBuffersComplete() OVERRIDE;
-  virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE {}
-  virtual void DidLoseOutputSurface() OVERRIDE;
+                                     base::TimeDelta interval) override;
+  virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) override {}
+  virtual void BeginFrame(const BeginFrameArgs& args) override {}
+  virtual void DidSwapBuffers() override;
+  virtual void DidSwapBuffersComplete() override;
+  virtual void ReclaimResources(const CompositorFrameAck* ack) override {}
+  virtual void DidLoseOutputSurface() override;
   virtual void SetExternalDrawConstraints(
       const gfx::Transform& transform,
       const gfx::Rect& viewport,
       const gfx::Rect& clip,
       const gfx::Rect& viewport_rect_for_tile_priority,
       const gfx::Transform& transform_for_tile_priority,
-      bool resourceless_software_draw) OVERRIDE {}
-  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE;
+      bool resourceless_software_draw) override {}
+  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override;
   virtual void SetTreeActivationCallback(
-      const base::Closure& callback) OVERRIDE {}
+      const base::Closure& callback) override {}
 
   // RendererClient implementation.
-  virtual void SetFullRootLayerDamage() OVERRIDE {}
+  virtual void SetFullRootLayerDamage() override {}
 
   // SurfaceDamageObserver implementation.
-  virtual void OnSurfaceDamaged(SurfaceId surface) OVERRIDE;
+  virtual void OnSurfaceDamaged(SurfaceId surface) override;
 
  private:
   void InitializeRenderer();
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc
index ea547a0..620ada7 100644
--- a/cc/surfaces/surface_aggregator.cc
+++ b/cc/surfaces/surface_aggregator.cc
@@ -124,16 +124,11 @@
                  &invalid_frame,
                  provider_->GetChildToParentMap(child_id),
                  &referenced_resources);
-  for (RenderPassList::iterator it = render_pass_list->begin();
-       it != render_pass_list->end();
-       ++it) {
-    QuadList& quad_list = (*it)->quad_list;
-    for (QuadList::Iterator quad_it = quad_list.begin();
-         quad_it != quad_list.end();
-         ++quad_it) {
-      quad_it->IterateResources(remap);
-    }
+  for (auto* render_pass : *render_pass_list) {
+    for (auto& quad : render_pass->quad_list)
+      quad.IterateResources(remap);
   }
+
   if (!invalid_frame)
     provider_->DeclareUsedResourcesFromChild(child_id, referenced_resources);
 
diff --git a/cc/surfaces/surface_aggregator_test_helpers.cc b/cc/surfaces/surface_aggregator_test_helpers.cc
index 8afead1..c6a7aa0 100644
--- a/cc/surfaces/surface_aggregator_test_helpers.cc
+++ b/cc/surfaces/surface_aggregator_test_helpers.cc
@@ -134,8 +134,7 @@
 
 void TestPassMatchesExpectations(Pass expected_pass, const RenderPass* pass) {
   ASSERT_EQ(expected_pass.quad_count, pass->quad_list.size());
-  for (QuadList::ConstIterator iter = pass->quad_list.begin();
-       iter != pass->quad_list.end();
+  for (auto iter = pass->quad_list.cbegin(); iter != pass->quad_list.cend();
        ++iter) {
     SCOPED_TRACE(base::StringPrintf("Quad number %" PRIuS, iter.index()));
     TestQuadMatchesExpectations(expected_pass.quads[iter.index()], &*iter);
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc
index cde8b8f..ff1aeba 100644
--- a/cc/surfaces/surface_aggregator_unittest.cc
+++ b/cc/surfaces/surface_aggregator_unittest.cc
@@ -43,7 +43,7 @@
 class EmptySurfaceFactoryClient : public SurfaceFactoryClient {
  public:
   virtual void ReturnResources(
-      const ReturnedResourceArray& resources) OVERRIDE {}
+      const ReturnedResourceArray& resources) override {}
 };
 
 class SurfaceAggregatorTest : public testing::Test {
@@ -698,8 +698,8 @@
 
   ASSERT_EQ(7u, aggregated_quad_list.size());
 
-  for (QuadList::ConstIterator iter = aggregated_quad_list.begin();
-       iter != aggregated_quad_list.end();
+  for (auto iter = aggregated_quad_list.cbegin();
+       iter != aggregated_quad_list.cend();
        ++iter) {
     EXPECT_EQ(blend_modes[iter.index()], iter->shared_quad_state->blend_mode)
         << iter.index();
@@ -837,8 +837,8 @@
   // and the child surface draw quad's translation (8, 0).
   expected_root_pass_quad_transforms[1].Translate(8, 10);
 
-  for (QuadList::Iterator iter = aggregated_pass_list[1]->quad_list.begin();
-       iter != aggregated_pass_list[1]->quad_list.end();
+  for (auto iter = aggregated_pass_list[1]->quad_list.cbegin();
+       iter != aggregated_pass_list[1]->quad_list.cend();
        ++iter) {
     EXPECT_EQ(expected_root_pass_quad_transforms[iter.index()].ToString(),
               iter->quadTransform().ToString())
@@ -1061,7 +1061,7 @@
   virtual ~ResourceTrackingSurfaceFactoryClient() {}
 
   virtual void ReturnResources(
-      const ReturnedResourceArray& resources) OVERRIDE {
+      const ReturnedResourceArray& resources) override {
     returned_resources_ = resources;
   }
 
diff --git a/cc/surfaces/surface_factory_unittest.cc b/cc/surfaces/surface_factory_unittest.cc
index a4aecf8..5cb83fe 100644
--- a/cc/surfaces/surface_factory_unittest.cc
+++ b/cc/surfaces/surface_factory_unittest.cc
@@ -20,7 +20,7 @@
   virtual ~TestSurfaceFactoryClient() {}
 
   virtual void ReturnResources(
-      const ReturnedResourceArray& resources) OVERRIDE {
+      const ReturnedResourceArray& resources) override {
     returned_resources_.insert(
         returned_resources_.end(), resources.begin(), resources.end());
   }
diff --git a/cc/surfaces/surface_id_allocator.h b/cc/surfaces/surface_id_allocator.h
index 57deffa..d410f06 100644
--- a/cc/surfaces/surface_id_allocator.h
+++ b/cc/surfaces/surface_id_allocator.h
@@ -22,7 +22,7 @@
   static uint32_t NamespaceForId(SurfaceId id);
 
  private:
-  uint32_t id_namespace_;
+  const uint32_t id_namespace_;
   uint32_t next_id_;
 
   DISALLOW_COPY_AND_ASSIGN(SurfaceIdAllocator);
diff --git a/cc/surfaces/surfaces_pixeltest.cc b/cc/surfaces/surfaces_pixeltest.cc
index 1e8166f..171d74e 100644
--- a/cc/surfaces/surfaces_pixeltest.cc
+++ b/cc/surfaces/surfaces_pixeltest.cc
@@ -24,7 +24,7 @@
 class EmptySurfaceFactoryClient : public SurfaceFactoryClient {
  public:
   virtual void ReturnResources(
-      const ReturnedResourceArray& resources) OVERRIDE {}
+      const ReturnedResourceArray& resources) override {}
 };
 
 class SurfacesPixelTest : public RendererPixelTest<GLRenderer> {
diff --git a/cc/test/animation_test_common.h b/cc/test/animation_test_common.h
index bd680d6..1ee89da 100644
--- a/cc/test/animation_test_common.h
+++ b/cc/test/animation_test_common.h
@@ -26,9 +26,9 @@
   explicit FakeFloatAnimationCurve(double duration);
   virtual ~FakeFloatAnimationCurve();
 
-  virtual double Duration() const OVERRIDE;
-  virtual float GetValue(double now) const OVERRIDE;
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual double Duration() const override;
+  virtual float GetValue(double now) const override;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
  private:
   double duration_;
@@ -39,15 +39,15 @@
   explicit FakeTransformTransition(double duration);
   virtual ~FakeTransformTransition();
 
-  virtual double Duration() const OVERRIDE;
-  virtual gfx::Transform GetValue(double time) const OVERRIDE;
+  virtual double Duration() const override;
+  virtual gfx::Transform GetValue(double time) const override;
   virtual bool AnimatedBoundsForBox(const gfx::BoxF& box,
-                                    gfx::BoxF* bounds) const OVERRIDE;
-  virtual bool AffectsScale() const OVERRIDE;
-  virtual bool IsTranslation() const OVERRIDE;
-  virtual bool MaximumScale(float* max_scale) const OVERRIDE;
+                                    gfx::BoxF* bounds) const override;
+  virtual bool AffectsScale() const override;
+  virtual bool IsTranslation() const override;
+  virtual bool MaximumScale(float* max_scale) const override;
 
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
  private:
   double duration_;
@@ -58,10 +58,10 @@
   FakeFloatTransition(double duration, float from, float to);
   virtual ~FakeFloatTransition();
 
-  virtual double Duration() const OVERRIDE;
-  virtual float GetValue(double time) const OVERRIDE;
+  virtual double Duration() const override;
+  virtual float GetValue(double time) const override;
 
-  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
+  virtual scoped_ptr<AnimationCurve> Clone() const override;
 
  private:
   double duration_;
@@ -75,13 +75,13 @@
   virtual ~FakeLayerAnimationValueObserver();
 
   // LayerAnimationValueObserver implementation
-  virtual void OnFilterAnimated(const FilterOperations& filters) OVERRIDE;
-  virtual void OnOpacityAnimated(float opacity) OVERRIDE;
-  virtual void OnTransformAnimated(const gfx::Transform& transform) OVERRIDE;
+  virtual void OnFilterAnimated(const FilterOperations& filters) override;
+  virtual void OnOpacityAnimated(float opacity) override;
+  virtual void OnTransformAnimated(const gfx::Transform& transform) override;
   virtual void OnScrollOffsetAnimated(
-      const gfx::ScrollOffset& scroll_offset) OVERRIDE;
-  virtual void OnAnimationWaitingForDeletion() OVERRIDE;
-  virtual bool IsActive() const OVERRIDE;
+      const gfx::ScrollOffset& scroll_offset) override;
+  virtual void OnAnimationWaitingForDeletion() override;
+  virtual bool IsActive() const override;
 
   const FilterOperations& filters() const { return filters_; }
   float opacity() const  { return opacity_; }
@@ -103,12 +103,12 @@
 class FakeInactiveLayerAnimationValueObserver
     : public FakeLayerAnimationValueObserver {
  public:
-  virtual bool IsActive() const OVERRIDE;
+  virtual bool IsActive() const override;
 };
 
 class FakeLayerAnimationValueProvider : public LayerAnimationValueProvider {
  public:
-  virtual gfx::ScrollOffset ScrollOffsetForAnimation() const OVERRIDE;
+  virtual gfx::ScrollOffset ScrollOffsetForAnimation() const override;
 
   void set_scroll_offset(const gfx::ScrollOffset& scroll_offset) {
     scroll_offset_ = scroll_offset;
diff --git a/cc/test/cc_test_suite.h b/cc/test/cc_test_suite.h
index 5f749e7..6edcd6a 100644
--- a/cc/test/cc_test_suite.h
+++ b/cc/test/cc_test_suite.h
@@ -22,8 +22,8 @@
 
  protected:
   // Overridden from base::TestSuite:
-  virtual void Initialize() OVERRIDE;
-  virtual void Shutdown() OVERRIDE;
+  virtual void Initialize() override;
+  virtual void Shutdown() override;
 
  private:
   scoped_ptr<base::MessageLoop> message_loop_;
diff --git a/cc/test/fake_content_layer.h b/cc/test/fake_content_layer.h
index ee6cfb4..1debe85 100644
--- a/cc/test/fake_content_layer.h
+++ b/cc/test/fake_content_layer.h
@@ -17,7 +17,7 @@
   }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   size_t update_count() const { return update_count_; }
   void reset_update_count() { update_count_ = 0; }
@@ -26,7 +26,7 @@
   void reset_push_properties_count() { push_properties_count_ = 0; }
 
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
 
   gfx::Rect LastPaintRect() const;
 
@@ -34,9 +34,9 @@
     always_update_resources_ = always_update_resources;
   }
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
-  virtual void OnOutputSurfaceCreated() OVERRIDE;
+  virtual void OnOutputSurfaceCreated() override;
   size_t output_surface_created_count() const {
     return output_surface_created_count_;
   }
diff --git a/cc/test/fake_content_layer_client.h b/cc/test/fake_content_layer_client.h
index ae0ebdd..3ae031a 100644
--- a/cc/test/fake_content_layer_client.h
+++ b/cc/test/fake_content_layer_client.h
@@ -30,9 +30,9 @@
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& rect,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE;
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
-  virtual bool FillsBoundsCompletely() const OVERRIDE;
+      ContentLayerClient::GraphicsContextStatus gc_status) override;
+  virtual void DidChangeLayerCanUseLCDText() override {}
+  virtual bool FillsBoundsCompletely() const override;
 
   void set_fill_with_nonsolid_color(bool nonsolid) {
     fill_with_nonsolid_color_ = nonsolid;
diff --git a/cc/test/fake_content_layer_impl.h b/cc/test/fake_content_layer_impl.h
index 4313cad..f4c8f54 100644
--- a/cc/test/fake_content_layer_impl.h
+++ b/cc/test/fake_content_layer_impl.h
@@ -19,7 +19,7 @@
   virtual ~FakeContentLayerImpl();
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   bool HaveResourceForTileAt(int i, int j);
 
@@ -28,7 +28,7 @@
   }
   void reset_lost_output_surface_count() { lost_output_surface_count_ = 0; }
 
-  virtual void ReleaseResources() OVERRIDE;
+  virtual void ReleaseResources() override;
 
  private:
   explicit FakeContentLayerImpl(LayerTreeImpl* tree_impl, int id);
diff --git a/cc/test/fake_delegated_renderer_layer.h b/cc/test/fake_delegated_renderer_layer.h
index f162473..a5fca87 100644
--- a/cc/test/fake_delegated_renderer_layer.h
+++ b/cc/test/fake_delegated_renderer_layer.h
@@ -18,7 +18,7 @@
   }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
  protected:
   explicit FakeDelegatedRendererLayer(DelegatedFrameProvider* frame_provider);
diff --git a/cc/test/fake_delegated_renderer_layer_impl.cc b/cc/test/fake_delegated_renderer_layer_impl.cc
index 8925bdb..8548843 100644
--- a/cc/test/fake_delegated_renderer_layer_impl.cc
+++ b/cc/test/fake_delegated_renderer_layer_impl.cc
@@ -62,13 +62,9 @@
 
   DrawQuad::ResourceIteratorCallback add_resource_to_frame_callback =
       base::Bind(&AddResourceToFrame, resource_provider, delegated_frame.get());
-  for (size_t i = 0; i < delegated_frame->render_pass_list.size(); ++i) {
-    RenderPass* pass = delegated_frame->render_pass_list[i];
-    for (QuadList::Iterator iter = pass->quad_list.begin();
-         iter != pass->quad_list.end();
-         ++iter) {
-      iter->IterateResources(add_resource_to_frame_callback);
-    }
+  for (auto* pass : delegated_frame->render_pass_list) {
+    for (auto& quad : pass->quad_list)
+      quad.IterateResources(add_resource_to_frame_callback);
   }
 
   CreateChildIdIfNeeded(base::Bind(&NoopReturnCallback));
diff --git a/cc/test/fake_delegated_renderer_layer_impl.h b/cc/test/fake_delegated_renderer_layer_impl.h
index f909d24..dc3fee7 100644
--- a/cc/test/fake_delegated_renderer_layer_impl.h
+++ b/cc/test/fake_delegated_renderer_layer_impl.h
@@ -18,7 +18,7 @@
   virtual ~FakeDelegatedRendererLayerImpl();
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   int ChildId() const { return ChildIdForTesting(); }
   const RenderPassList& RenderPassesInDrawOrder() const {
diff --git a/cc/test/fake_layer_tree_host.h b/cc/test/fake_layer_tree_host.h
index c99edb3..c288046 100644
--- a/cc/test/fake_layer_tree_host.h
+++ b/cc/test/fake_layer_tree_host.h
@@ -25,8 +25,8 @@
 
   virtual ~FakeLayerTreeHost();
 
-  virtual void SetNeedsCommit() OVERRIDE;
-  virtual void SetNeedsFullTreeSync() OVERRIDE {}
+  virtual void SetNeedsCommit() override;
+  virtual void SetNeedsFullTreeSync() override {}
 
   using LayerTreeHost::SetRootLayer;
   using LayerTreeHost::root_layer;
diff --git a/cc/test/fake_layer_tree_host_client.h b/cc/test/fake_layer_tree_host_client.h
index 6ad53d6..9371e32 100644
--- a/cc/test/fake_layer_tree_host_client.h
+++ b/cc/test/fake_layer_tree_host_client.h
@@ -30,28 +30,28 @@
   void SetLayerTreeHost(LayerTreeHost* host) { host_ = host; }
 
   // LayerTreeHostClient implementation.
-  virtual void WillBeginMainFrame(int frame_id) OVERRIDE {}
-  virtual void DidBeginMainFrame() OVERRIDE {}
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {}
-  virtual void Layout() OVERRIDE {}
+  virtual void WillBeginMainFrame(int frame_id) override {}
+  virtual void DidBeginMainFrame() override {}
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {}
+  virtual void Layout() override {}
   virtual void ApplyViewportDeltas(const gfx::Vector2d& inner_delta,
                                    const gfx::Vector2d& outer_delta,
                                    float page_scale,
-                                   float top_controls_delta) OVERRIDE {}
+                                   float top_controls_delta) override {}
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float page_scale,
-                                   float top_controls_delta) OVERRIDE {}
+                                   float top_controls_delta) override {}
 
-  virtual void RequestNewOutputSurface(bool fallback) OVERRIDE;
-  virtual void DidInitializeOutputSurface() OVERRIDE {}
-  virtual void WillCommit() OVERRIDE {}
-  virtual void DidCommit() OVERRIDE {}
-  virtual void DidCommitAndDrawFrame() OVERRIDE {}
-  virtual void DidCompleteSwapBuffers() OVERRIDE {}
+  virtual void RequestNewOutputSurface(bool fallback) override;
+  virtual void DidInitializeOutputSurface() override {}
+  virtual void WillCommit() override {}
+  virtual void DidCommit() override {}
+  virtual void DidCommitAndDrawFrame() override {}
+  virtual void DidCompleteSwapBuffers() override {}
 
   // LayerTreeHostSingleThreadClient implementation.
-  virtual void DidPostSwapBuffers() OVERRIDE {}
-  virtual void DidAbortSwapBuffers() OVERRIDE {}
+  virtual void DidPostSwapBuffers() override {}
+  virtual void DidAbortSwapBuffers() override {}
 
  private:
   bool use_software_rendering_;
diff --git a/cc/test/fake_layer_tree_host_impl.h b/cc/test/fake_layer_tree_host_impl.h
index 6d31c51..558007e 100644
--- a/cc/test/fake_layer_tree_host_impl.h
+++ b/cc/test/fake_layer_tree_host_impl.h
@@ -26,9 +26,9 @@
     DidDrawAllLayers(frame_data);
   }
 
-  virtual void CreatePendingTree() OVERRIDE;
+  virtual void CreatePendingTree() override;
 
-  virtual BeginFrameArgs CurrentBeginFrameArgs() const OVERRIDE;
+  virtual BeginFrameArgs CurrentBeginFrameArgs() const override;
   void SetCurrentBeginFrameArgs(const BeginFrameArgs& args);
   void UpdateNumChildrenAndDrawPropertiesForActiveTree();
   static void UpdateNumChildrenAndDrawProperties(LayerTreeImpl* layerTree);
diff --git a/cc/test/fake_layer_tree_host_impl_client.h b/cc/test/fake_layer_tree_host_impl_client.h
index ec86f7b..c73e023 100644
--- a/cc/test/fake_layer_tree_host_impl_client.h
+++ b/cc/test/fake_layer_tree_host_impl_client.h
@@ -13,35 +13,35 @@
 class FakeLayerTreeHostImplClient : public LayerTreeHostImplClient {
  public:
   // LayerTreeHostImplClient implementation.
-  virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE {}
-  virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE {}
+  virtual void UpdateRendererCapabilitiesOnImplThread() override {}
+  virtual void DidLoseOutputSurfaceOnImplThread() override {}
   virtual void CommitVSyncParameters(base::TimeTicks timebase,
-                                     base::TimeDelta interval) OVERRIDE {}
-  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) OVERRIDE {}
-  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE {}
-  virtual void DidSwapBuffersOnImplThread() OVERRIDE {}
-  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE {}
-  virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE {}
-  virtual void NotifyReadyToActivate() OVERRIDE {}
-  virtual void SetNeedsRedrawOnImplThread() OVERRIDE {}
+                                     base::TimeDelta interval) override {}
+  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {}
+  virtual void SetMaxSwapsPendingOnImplThread(int max) override {}
+  virtual void DidSwapBuffersOnImplThread() override {}
+  virtual void DidSwapBuffersCompleteOnImplThread() override {}
+  virtual void OnCanDrawStateChanged(bool can_draw) override {}
+  virtual void NotifyReadyToActivate() override {}
+  virtual void SetNeedsRedrawOnImplThread() override {}
   virtual void SetNeedsRedrawRectOnImplThread(
-    const gfx::Rect& damage_rect) OVERRIDE {}
-  virtual void SetNeedsAnimateOnImplThread() OVERRIDE {}
-  virtual void DidInitializeVisibleTileOnImplThread() OVERRIDE {}
-  virtual void SetNeedsCommitOnImplThread() OVERRIDE {}
-  virtual void SetNeedsManageTilesOnImplThread() OVERRIDE {}
+    const gfx::Rect& damage_rect) override {}
+  virtual void SetNeedsAnimateOnImplThread() override {}
+  virtual void DidInitializeVisibleTileOnImplThread() override {}
+  virtual void SetNeedsCommitOnImplThread() override {}
+  virtual void SetNeedsManageTilesOnImplThread() override {}
   virtual void PostAnimationEventsToMainThreadOnImplThread(
-      scoped_ptr<AnimationEventsVector> events) OVERRIDE {}
+      scoped_ptr<AnimationEventsVector> events) override {}
   virtual bool ReduceContentsTextureMemoryOnImplThread(
       size_t limit_bytes,
-      int priority_cutoff) OVERRIDE;
-  virtual bool IsInsideDraw() OVERRIDE;
-  virtual void RenewTreePriority() OVERRIDE {}
+      int priority_cutoff) override;
+  virtual bool IsInsideDraw() override;
+  virtual void RenewTreePriority() override {}
   virtual void PostDelayedScrollbarFadeOnImplThread(
       const base::Closure& start_fade,
-      base::TimeDelta delay) OVERRIDE {}
-  virtual void DidActivateSyncTree() OVERRIDE {}
-  virtual void DidManageTiles() OVERRIDE {}
+      base::TimeDelta delay) override {}
+  virtual void DidActivateSyncTree() override {}
+  virtual void DidManageTiles() override {}
 };
 
 }  // namespace cc
diff --git a/cc/test/fake_output_surface.h b/cc/test/fake_output_surface.h
index 193d03c..306879b 100644
--- a/cc/test/fake_output_surface.h
+++ b/cc/test/fake_output_surface.h
@@ -92,12 +92,12 @@
   CompositorFrame& last_sent_frame() { return last_sent_frame_; }
   size_t num_sent_frames() { return num_sent_frames_; }
 
-  virtual void SwapBuffers(CompositorFrame* frame) OVERRIDE;
+  virtual void SwapBuffers(CompositorFrame* frame) override;
 
-  virtual void SetNeedsBeginFrame(bool enable) OVERRIDE;
+  virtual void SetNeedsBeginFrame(bool enable) override;
   bool needs_begin_frame() const { return needs_begin_frame_; }
 
-  virtual bool BindToClient(OutputSurfaceClient* client) OVERRIDE;
+  virtual bool BindToClient(OutputSurfaceClient* client) override;
 
   using OutputSurface::ReleaseGL;
   using OutputSurface::InitializeAndSetContext3d;
@@ -110,7 +110,7 @@
 
   void ReturnResource(unsigned id, CompositorFrameAck* ack);
 
-  virtual bool HasExternalStencilTest() const OVERRIDE;
+  virtual bool HasExternalStencilTest() const override;
 
   void set_has_external_stencil_test(bool has_test) {
     has_external_stencil_test_ = has_test;
diff --git a/cc/test/fake_output_surface_client.h b/cc/test/fake_output_surface_client.h
index 7ecb6cf..258ad87 100644
--- a/cc/test/fake_output_surface_client.h
+++ b/cc/test/fake_output_surface_client.h
@@ -28,25 +28,25 @@
         did_lose_output_surface_called_(false),
         memory_policy_(0) {}
 
-  virtual void DeferredInitialize() OVERRIDE;
-  virtual void ReleaseGL() OVERRIDE;
+  virtual void DeferredInitialize() override;
+  virtual void ReleaseGL() override;
   virtual void CommitVSyncParameters(base::TimeTicks timebase,
-                                     base::TimeDelta interval) OVERRIDE {}
-  virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) OVERRIDE {}
-  virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE;
-  virtual void DidSwapBuffers() OVERRIDE {}
-  virtual void DidSwapBuffersComplete() OVERRIDE {}
-  virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE {}
-  virtual void DidLoseOutputSurface() OVERRIDE;
+                                     base::TimeDelta interval) override {}
+  virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) override {}
+  virtual void BeginFrame(const BeginFrameArgs& args) override;
+  virtual void DidSwapBuffers() override {}
+  virtual void DidSwapBuffersComplete() override {}
+  virtual void ReclaimResources(const CompositorFrameAck* ack) override {}
+  virtual void DidLoseOutputSurface() override;
   virtual void SetExternalDrawConstraints(
       const gfx::Transform& transform,
       const gfx::Rect& viewport,
       const gfx::Rect& clip,
       const gfx::Rect& viewport_rect_for_tile_priority,
       const gfx::Transform& transform_for_tile_priority,
-      bool resourceless_software_draw) OVERRIDE {}
-  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE;
-  virtual void SetTreeActivationCallback(const base::Closure&) OVERRIDE {}
+      bool resourceless_software_draw) override {}
+  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override;
+  virtual void SetTreeActivationCallback(const base::Closure&) override {}
 
   int begin_frame_count() { return begin_frame_count_; }
 
diff --git a/cc/test/fake_painted_scrollbar_layer.h b/cc/test/fake_painted_scrollbar_layer.h
index 5e2fa18..f531299 100644
--- a/cc/test/fake_painted_scrollbar_layer.h
+++ b/cc/test/fake_painted_scrollbar_layer.h
@@ -21,9 +21,9 @@
   void reset_update_count() { update_count_ = 0; }
 
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
   scoped_ptr<base::AutoReset<bool> > IgnoreSetNeedsCommit();
 
diff --git a/cc/test/fake_picture_layer.h b/cc/test/fake_picture_layer.h
index 10f9a9c..332e63f 100644
--- a/cc/test/fake_picture_layer.h
+++ b/cc/test/fake_picture_layer.h
@@ -18,7 +18,7 @@
   }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
 
   size_t update_count() const { return update_count_; }
   void reset_update_count() { update_count_ = 0; }
@@ -31,11 +31,11 @@
   }
 
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
+                      const OcclusionTracker<Layer>* occlusion) override;
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
+  virtual void PushPropertiesTo(LayerImpl* layer) override;
 
-  virtual void OnOutputSurfaceCreated() OVERRIDE;
+  virtual void OnOutputSurfaceCreated() override;
   size_t output_surface_created_count() const {
     return output_surface_created_count_;
   }
diff --git a/cc/test/fake_picture_layer_impl.cc b/cc/test/fake_picture_layer_impl.cc
index ce0a813..8082685 100644
--- a/cc/test/fake_picture_layer_impl.cc
+++ b/cc/test/fake_picture_layer_impl.cc
@@ -55,10 +55,10 @@
 
 void FakePictureLayerImpl::AppendQuads(
     RenderPass* render_pass,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
   PictureLayerImpl::AppendQuads(
-      render_pass, occlusion_tracker, append_quads_data);
+      render_pass, occlusion_in_content_space, append_quads_data);
   ++append_quads_count_;
 }
 
diff --git a/cc/test/fake_picture_layer_impl.h b/cc/test/fake_picture_layer_impl.h
index a06805c..cbdba24 100644
--- a/cc/test/fake_picture_layer_impl.h
+++ b/cc/test/fake_picture_layer_impl.h
@@ -34,19 +34,19 @@
   }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
+      override;
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE;
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override;
   virtual gfx::Size CalculateTileSize(
-      const gfx::Size& content_bounds) const OVERRIDE;
+      const gfx::Size& content_bounds) const override;
 
-  virtual void DidBecomeActive() OVERRIDE;
+  virtual void DidBecomeActive() override;
   size_t did_become_active_call_count() {
     return did_become_active_call_count_;
   }
 
-  virtual bool HasValidTilePriorities() const OVERRIDE;
+  virtual bool HasValidTilePriorities() const override;
   void set_has_valid_tile_priorities(bool has_valid_priorities) {
     has_valid_tile_priorities_ = has_valid_priorities;
     use_set_valid_tile_priorities_flag_ = true;
@@ -95,12 +95,6 @@
   gfx::Rect visible_rect_for_tile_priority() {
     return visible_rect_for_tile_priority_;
   }
-  gfx::Rect viewport_rect_for_tile_priority() {
-    return viewport_rect_for_tile_priority_;
-  }
-  gfx::Transform screen_space_transform_for_tile_priority() {
-    return screen_space_transform_for_tile_priority_;
-  }
 
   void set_fixed_tile_size(const gfx::Size& size) { fixed_tile_size_ = size; }
 
@@ -115,7 +109,7 @@
   size_t release_resources_count() const { return release_resources_count_; }
   void reset_release_resources_count() { release_resources_count_ = 0; }
 
-  virtual void ReleaseResources() OVERRIDE;
+  virtual void ReleaseResources() override;
 
  protected:
   FakePictureLayerImpl(
diff --git a/cc/test/fake_picture_layer_tiling_client.h b/cc/test/fake_picture_layer_tiling_client.h
index edd2a61..e3b2659 100644
--- a/cc/test/fake_picture_layer_tiling_client.h
+++ b/cc/test/fake_picture_layer_tiling_client.h
@@ -22,23 +22,23 @@
 
   // PictureLayerTilingClient implementation.
   virtual scoped_refptr<Tile> CreateTile(
-      PictureLayerTiling* tiling, const gfx::Rect& rect) OVERRIDE;
-  virtual PicturePileImpl* GetPile() OVERRIDE;
+      PictureLayerTiling* tiling, const gfx::Rect& rect) override;
+  virtual PicturePileImpl* GetPile() override;
   virtual gfx::Size CalculateTileSize(
-      const gfx::Size& content_bounds) const OVERRIDE;
-  virtual size_t GetMaxTilesForInterestArea() const OVERRIDE;
-  virtual float GetSkewportTargetTimeInSeconds() const OVERRIDE;
-  virtual int GetSkewportExtrapolationLimitInContentPixels() const OVERRIDE;
+      const gfx::Size& content_bounds) const override;
+  virtual size_t GetMaxTilesForInterestArea() const override;
+  virtual float GetSkewportTargetTimeInSeconds() const override;
+  virtual int GetSkewportExtrapolationLimitInContentPixels() const override;
 
   void SetTileSize(const gfx::Size& tile_size);
   gfx::Size TileSize() const { return tile_size_; }
 
-  virtual const Region* GetInvalidation() OVERRIDE;
+  virtual const Region* GetInvalidation() override;
   virtual const PictureLayerTiling* GetTwinTiling(
-      const PictureLayerTiling* tiling) const OVERRIDE;
+      const PictureLayerTiling* tiling) const override;
   virtual PictureLayerTiling* GetRecycledTwinTiling(
-      const PictureLayerTiling* tiling) OVERRIDE;
-  virtual WhichTree GetTree() const OVERRIDE;
+      const PictureLayerTiling* tiling) override;
+  virtual WhichTree GetTree() const override;
 
   void set_twin_tiling(PictureLayerTiling* tiling) { twin_tiling_ = tiling; }
   void set_recycled_twin_tiling(PictureLayerTiling* tiling) {
diff --git a/cc/test/fake_proxy.h b/cc/test/fake_proxy.h
index 03eafb1..21324c1 100644
--- a/cc/test/fake_proxy.h
+++ b/cc/test/fake_proxy.h
@@ -21,30 +21,30 @@
 
   void SetLayerTreeHost(LayerTreeHost* host);
 
-  virtual void FinishAllRendering() OVERRIDE {}
-  virtual bool IsStarted() const OVERRIDE;
-  virtual void SetOutputSurface(scoped_ptr<OutputSurface>) OVERRIDE {}
-  virtual void SetLayerTreeHostClientReady() OVERRIDE {}
-  virtual void SetVisible(bool visible) OVERRIDE {}
-  virtual const RendererCapabilities& GetRendererCapabilities() const OVERRIDE;
-  virtual void SetNeedsAnimate() OVERRIDE {}
-  virtual void SetNeedsUpdateLayers() OVERRIDE {}
-  virtual void SetNeedsCommit() OVERRIDE {}
-  virtual void SetNeedsRedraw(const gfx::Rect& damage_rect) OVERRIDE {}
-  virtual void SetNextCommitWaitsForActivation() OVERRIDE {}
-  virtual void NotifyInputThrottledUntilCommit() OVERRIDE {}
-  virtual void SetDeferCommits(bool defer_commits) OVERRIDE {}
-  virtual void MainThreadHasStoppedFlinging() OVERRIDE {}
-  virtual bool BeginMainFrameRequested() const OVERRIDE;
-  virtual bool CommitRequested() const OVERRIDE;
-  virtual void Start() OVERRIDE {}
-  virtual void Stop() OVERRIDE {}
-  virtual void ForceSerializeOnSwapBuffers() OVERRIDE {}
-  virtual size_t MaxPartialTextureUpdates() const OVERRIDE;
-  virtual bool SupportsImplScrolling() const OVERRIDE;
-  virtual void SetDebugState(const LayerTreeDebugState& debug_state) OVERRIDE {}
-  virtual bool MainFrameWillHappenForTesting() OVERRIDE;
-  virtual void AsValueInto(base::debug::TracedValue* state) const OVERRIDE;
+  virtual void FinishAllRendering() override {}
+  virtual bool IsStarted() const override;
+  virtual void SetOutputSurface(scoped_ptr<OutputSurface>) override {}
+  virtual void SetLayerTreeHostClientReady() override {}
+  virtual void SetVisible(bool visible) override {}
+  virtual const RendererCapabilities& GetRendererCapabilities() const override;
+  virtual void SetNeedsAnimate() override {}
+  virtual void SetNeedsUpdateLayers() override {}
+  virtual void SetNeedsCommit() override {}
+  virtual void SetNeedsRedraw(const gfx::Rect& damage_rect) override {}
+  virtual void SetNextCommitWaitsForActivation() override {}
+  virtual void NotifyInputThrottledUntilCommit() override {}
+  virtual void SetDeferCommits(bool defer_commits) override {}
+  virtual void MainThreadHasStoppedFlinging() override {}
+  virtual bool BeginMainFrameRequested() const override;
+  virtual bool CommitRequested() const override;
+  virtual void Start() override {}
+  virtual void Stop() override {}
+  virtual void ForceSerializeOnSwapBuffers() override {}
+  virtual size_t MaxPartialTextureUpdates() const override;
+  virtual bool SupportsImplScrolling() const override;
+  virtual void SetDebugState(const LayerTreeDebugState& debug_state) override {}
+  virtual bool MainFrameWillHappenForTesting() override;
+  virtual void AsValueInto(base::debug::TracedValue* state) const override;
 
   virtual RendererCapabilities& GetRendererCapabilities();
   void SetMaxPartialTextureUpdates(size_t max);
diff --git a/cc/test/fake_renderer_client.h b/cc/test/fake_renderer_client.h
index 9854b01..0248249 100644
--- a/cc/test/fake_renderer_client.h
+++ b/cc/test/fake_renderer_client.h
@@ -14,7 +14,7 @@
   FakeRendererClient();
 
   // RendererClient methods.
-  virtual void SetFullRootLayerDamage() OVERRIDE;
+  virtual void SetFullRootLayerDamage() override;
 
   // Methods added for test.
   int set_full_root_layer_damage_count() const {
diff --git a/cc/test/fake_scoped_ui_resource.h b/cc/test/fake_scoped_ui_resource.h
index 970d7b0..3de9af2 100644
--- a/cc/test/fake_scoped_ui_resource.h
+++ b/cc/test/fake_scoped_ui_resource.h
@@ -17,7 +17,7 @@
   static scoped_ptr<FakeScopedUIResource> Create(LayerTreeHost* host);
 
   virtual UIResourceBitmap GetBitmap(UIResourceId uid,
-                                     bool resource_lost) OVERRIDE;
+                                     bool resource_lost) override;
   void ResetCounters();
 
   int resource_create_count;
diff --git a/cc/test/fake_scrollbar.h b/cc/test/fake_scrollbar.h
index 8e6d454..638735d 100644
--- a/cc/test/fake_scrollbar.h
+++ b/cc/test/fake_scrollbar.h
@@ -18,17 +18,17 @@
   virtual ~FakeScrollbar();
 
   // Scrollbar implementation.
-  virtual ScrollbarOrientation Orientation() const OVERRIDE;
-  virtual bool IsLeftSideVerticalScrollbar() const OVERRIDE;
-  virtual gfx::Point Location() const OVERRIDE;
-  virtual bool IsOverlay() const OVERRIDE;
-  virtual bool HasThumb() const OVERRIDE;
-  virtual int ThumbThickness() const OVERRIDE;
-  virtual int ThumbLength() const OVERRIDE;
-  virtual gfx::Rect TrackRect() const OVERRIDE;
+  virtual ScrollbarOrientation Orientation() const override;
+  virtual bool IsLeftSideVerticalScrollbar() const override;
+  virtual gfx::Point Location() const override;
+  virtual bool IsOverlay() const override;
+  virtual bool HasThumb() const override;
+  virtual int ThumbThickness() const override;
+  virtual int ThumbLength() const override;
+  virtual gfx::Rect TrackRect() const override;
   virtual void PaintPart(SkCanvas* canvas,
                          ScrollbarPart part,
-                         const gfx::Rect& content_rect) OVERRIDE;
+                         const gfx::Rect& content_rect) override;
 
   void set_location(const gfx::Point& location) { location_ = location; }
   void set_track_rect(const gfx::Rect& track_rect) { track_rect_ = track_rect; }
diff --git a/cc/test/fake_tile_manager.cc b/cc/test/fake_tile_manager.cc
index 6243ae2..6767c9f 100644
--- a/cc/test/fake_tile_manager.cc
+++ b/cc/test/fake_tile_manager.cc
@@ -17,9 +17,9 @@
 class FakeRasterizerImpl : public Rasterizer, public RasterizerTaskClient {
  public:
   // Overridden from Rasterizer:
-  virtual void SetClient(RasterizerClient* client) OVERRIDE {}
-  virtual void Shutdown() OVERRIDE {}
-  virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE {
+  virtual void SetClient(RasterizerClient* client) override {}
+  virtual void Shutdown() override {}
+  virtual void ScheduleTasks(RasterTaskQueue* queue) override {
     for (RasterTaskQueue::Item::Vector::const_iterator it =
              queue->items.begin();
          it != queue->items.end();
@@ -33,7 +33,7 @@
       completed_tasks_.push_back(task);
     }
   }
-  virtual void CheckForCompletedTasks() OVERRIDE {
+  virtual void CheckForCompletedTasks() override {
     for (RasterTask::Vector::iterator it = completed_tasks_.begin();
          it != completed_tasks_.end();
          ++it) {
@@ -50,11 +50,11 @@
 
   // Overridden from RasterizerTaskClient:
   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
-      const Resource* resource) OVERRIDE {
+      const Resource* resource) override {
     return nullptr;
   }
   virtual void ReleaseBufferForRaster(
-      scoped_ptr<RasterBuffer> buffer) OVERRIDE {}
+      scoped_ptr<RasterBuffer> buffer) override {}
 
  private:
   RasterTask::Vector completed_tasks_;
diff --git a/cc/test/fake_tile_manager.h b/cc/test/fake_tile_manager.h
index 9fdf7a7..36a0530 100644
--- a/cc/test/fake_tile_manager.h
+++ b/cc/test/fake_tile_manager.h
@@ -22,7 +22,7 @@
   void AssignMemoryToTiles(
       const GlobalStateThatImpactsTilePriority& state);
 
-  virtual void Release(Tile* tile) OVERRIDE;
+  virtual void Release(Tile* tile) override;
 
   std::vector<Tile*> tiles_for_raster;
   PrioritizedTileSet all_tiles;
diff --git a/cc/test/fake_tile_manager_client.h b/cc/test/fake_tile_manager_client.h
index 9b5bf5d..fde6c52 100644
--- a/cc/test/fake_tile_manager_client.h
+++ b/cc/test/fake_tile_manager_client.h
@@ -18,13 +18,13 @@
 
   // TileManagerClient implementation.
   virtual const std::vector<PictureLayerImpl*>& GetPictureLayers()
-      const OVERRIDE;
-  virtual void NotifyReadyToActivate() OVERRIDE {}
-  virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE {}
+      const override;
+  virtual void NotifyReadyToActivate() override {}
+  virtual void NotifyTileStateChanged(const Tile* tile) override {}
   virtual void BuildRasterQueue(RasterTilePriorityQueue* queue,
-                                TreePriority tree_priority) OVERRIDE {}
+                                TreePriority tree_priority) override {}
   virtual void BuildEvictionQueue(EvictionTilePriorityQueue* queue,
-                                  TreePriority tree_priority) OVERRIDE {}
+                                  TreePriority tree_priority) override {}
 
  private:
   std::vector<PictureLayerImpl*> picture_layers_;
diff --git a/cc/test/fake_ui_resource_layer_tree_host_impl.h b/cc/test/fake_ui_resource_layer_tree_host_impl.h
index e6cfafb..9d6eac4 100644
--- a/cc/test/fake_ui_resource_layer_tree_host_impl.h
+++ b/cc/test/fake_ui_resource_layer_tree_host_impl.h
@@ -17,14 +17,14 @@
   virtual ~FakeUIResourceLayerTreeHostImpl();
 
   virtual void CreateUIResource(UIResourceId uid,
-                                const UIResourceBitmap& bitmap) OVERRIDE;
+                                const UIResourceBitmap& bitmap) override;
 
-  virtual void DeleteUIResource(UIResourceId uid) OVERRIDE;
+  virtual void DeleteUIResource(UIResourceId uid) override;
 
   virtual ResourceProvider::ResourceId ResourceIdForUIResource(
-      UIResourceId uid) const OVERRIDE;
+      UIResourceId uid) const override;
 
-  virtual bool IsUIResourceOpaque(UIResourceId uid) const OVERRIDE;
+  virtual bool IsUIResourceOpaque(UIResourceId uid) const override;
 
  private:
   ResourceProvider::ResourceId fake_next_resource_id_;
diff --git a/cc/test/fake_video_frame_provider.h b/cc/test/fake_video_frame_provider.h
index fc462e4..f586adb 100644
--- a/cc/test/fake_video_frame_provider.h
+++ b/cc/test/fake_video_frame_provider.h
@@ -16,10 +16,10 @@
   FakeVideoFrameProvider();
   virtual ~FakeVideoFrameProvider();
 
-  virtual void SetVideoFrameProviderClient(Client* client) OVERRIDE;
-  virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() OVERRIDE;
+  virtual void SetVideoFrameProviderClient(Client* client) override;
+  virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() override;
   virtual void PutCurrentFrame(const scoped_refptr<media::VideoFrame>&)
-      OVERRIDE {}
+      override {}
 
   Client* client() { return client_; }
 
diff --git a/cc/test/layer_test_common.cc b/cc/test/layer_test_common.cc
index 9ca2aa2..4ad0aec 100644
--- a/cc/test/layer_test_common.cc
+++ b/cc/test/layer_test_common.cc
@@ -40,11 +40,9 @@
                                                   const gfx::Rect& rect) {
   Region remaining = rect;
 
-  for (QuadList::ConstIterator iter = quads.begin(); iter != quads.end();
-       ++iter) {
-    const DrawQuad* quad = &*iter;
+  for (auto iter = quads.cbegin(); iter != quads.cend(); ++iter) {
     gfx::RectF quad_rectf =
-        MathUtil::MapClippedRect(quad->quadTransform(), gfx::RectF(quad->rect));
+        MathUtil::MapClippedRect(iter->quadTransform(), gfx::RectF(iter->rect));
 
     // Before testing for exact coverage in the integer world, assert that
     // rounding will not round the rect incorrectly.
@@ -69,22 +67,19 @@
                                              const gfx::Rect& occluded,
                                              size_t* partially_occluded_count) {
   // No quad should exist if it's fully occluded.
-  for (QuadList::ConstIterator iter = quads.begin(); iter != quads.end();
-       ++iter) {
+  for (const auto& quad : quads) {
     gfx::Rect target_visible_rect = MathUtil::MapEnclosingClippedRect(
-        iter->quadTransform(), iter->visible_rect);
+        quad.quadTransform(), quad.visible_rect);
     EXPECT_FALSE(occluded.Contains(target_visible_rect));
   }
 
   // Quads that are fully occluded on one axis only should be shrunken.
-  for (QuadList::ConstIterator iter = quads.begin(); iter != quads.end();
-       ++iter) {
-    const DrawQuad* quad = &*iter;
-    DCHECK(quad->quadTransform().IsIdentityOrIntegerTranslation());
+  for (const auto& quad : quads) {
+    DCHECK(quad.quadTransform().IsIdentityOrIntegerTranslation());
     gfx::Rect target_rect =
-        MathUtil::MapEnclosingClippedRect(quad->quadTransform(), quad->rect);
+        MathUtil::MapEnclosingClippedRect(quad.quadTransform(), quad.rect);
     gfx::Rect target_visible_rect = MathUtil::MapEnclosingClippedRect(
-        quad->quadTransform(), quad->visible_rect);
+        quad.quadTransform(), quad.visible_rect);
 
     bool fully_occluded_horizontal = target_rect.x() >= occluded.x() &&
                                      target_rect.right() <= occluded.right();
@@ -94,10 +89,10 @@
         target_rect.Intersects(occluded) &&
         (fully_occluded_vertical || fully_occluded_horizontal);
     if (!should_be_occluded) {
-      EXPECT_EQ(quad->rect.ToString(), quad->visible_rect.ToString());
+      EXPECT_EQ(quad.rect.ToString(), quad.visible_rect.ToString());
     } else {
-      EXPECT_NE(quad->rect.ToString(), quad->visible_rect.ToString());
-      EXPECT_TRUE(quad->rect.Contains(quad->visible_rect));
+      EXPECT_NE(quad.rect.ToString(), quad.visible_rect.ToString());
+      EXPECT_TRUE(quad.rect.Contains(quad.visible_rect));
       ++(*partially_occluded_count);
     }
   }
@@ -129,9 +124,13 @@
 
   render_pass_->quad_list.clear();
   render_pass_->shared_quad_state_list.clear();
-  occlusion_tracker_.set_occluded_target_rect(occluded);
+
+  Occlusion occlusion(layer_impl->draw_transform(),
+                      SimpleEnclosedRegion(occluded),
+                      SimpleEnclosedRegion());
+
   layer_impl->WillDraw(DRAW_MODE_HARDWARE, resource_provider());
-  layer_impl->AppendQuads(render_pass_.get(), occlusion_tracker_, &data);
+  layer_impl->AppendQuads(render_pass_.get(), occlusion, &data);
   layer_impl->DidDraw(resource_provider());
 }
 
@@ -143,9 +142,13 @@
 
   render_pass_->quad_list.clear();
   render_pass_->shared_quad_state_list.clear();
-  occlusion_tracker_.set_occluded_target_rect(occluded);
+
+  Occlusion occlusion(layer_impl->draw_transform(),
+                      SimpleEnclosedRegion(occluded),
+                      SimpleEnclosedRegion());
+
   layer_impl->WillDraw(DRAW_MODE_HARDWARE, resource_provider());
-  layer_impl->AppendQuads(render_pass_.get(), occlusion_tracker_, &data);
+  layer_impl->AppendQuads(render_pass_.get(), occlusion, &data);
   layer_impl->DidDraw(resource_provider());
 }
 
diff --git a/cc/test/layer_tree_pixel_test.h b/cc/test/layer_tree_pixel_test.h
index 5a3685f..a29e0f1 100644
--- a/cc/test/layer_tree_pixel_test.h
+++ b/cc/test/layer_tree_pixel_test.h
@@ -34,17 +34,17 @@
   LayerTreePixelTest();
   virtual ~LayerTreePixelTest();
 
-  virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) OVERRIDE;
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE;
+  virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) override;
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override;
 
   virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest();
 
   void ReadbackResult(scoped_ptr<CopyOutputResult> result);
 
-  virtual void BeginTest() OVERRIDE;
-  virtual void SetupTree() OVERRIDE;
-  virtual void AfterTest() OVERRIDE;
-  virtual void EndTest() OVERRIDE;
+  virtual void BeginTest() override;
+  virtual void SetupTree() override;
+  virtual void AfterTest() override;
+  virtual void EndTest() override;
 
   void TryEndTest();
 
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index 9296040..9b9bae6 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -68,29 +68,29 @@
  private:
   TestHooks* test_hooks_;
 
-  virtual void ScheduledActionSendBeginMainFrame() OVERRIDE {
+  virtual void ScheduledActionSendBeginMainFrame() override {
     test_hooks_->ScheduledActionWillSendBeginMainFrame();
     ThreadProxy::ScheduledActionSendBeginMainFrame();
     test_hooks_->ScheduledActionSendBeginMainFrame();
   }
 
-  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() OVERRIDE {
+  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() override {
     DrawResult result = ThreadProxy::ScheduledActionDrawAndSwapIfPossible();
     test_hooks_->ScheduledActionDrawAndSwapIfPossible();
     return result;
   }
 
-  virtual void ScheduledActionAnimate() OVERRIDE {
+  virtual void ScheduledActionAnimate() override {
     ThreadProxy::ScheduledActionAnimate();
     test_hooks_->ScheduledActionAnimate();
   }
 
-  virtual void ScheduledActionCommit() OVERRIDE {
+  virtual void ScheduledActionCommit() override {
     ThreadProxy::ScheduledActionCommit();
     test_hooks_->ScheduledActionCommit();
   }
 
-  virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {
+  virtual void ScheduledActionBeginOutputSurfaceCreation() override {
     ThreadProxy::ScheduledActionBeginOutputSurfaceCreation();
     test_hooks_->ScheduledActionBeginOutputSurfaceCreation();
   }
@@ -141,65 +141,65 @@
         block_notify_ready_to_activate_for_testing_(false),
         notify_ready_to_activate_was_blocked_(false) {}
 
-  virtual void WillBeginImplFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void WillBeginImplFrame(const BeginFrameArgs& args) override {
     LayerTreeHostImpl::WillBeginImplFrame(args);
     test_hooks_->WillBeginImplFrameOnThread(this, args);
   }
 
-  virtual void BeginMainFrameAborted(bool did_handle) OVERRIDE {
+  virtual void BeginMainFrameAborted(bool did_handle) override {
     LayerTreeHostImpl::BeginMainFrameAborted(did_handle);
     test_hooks_->BeginMainFrameAbortedOnThread(this, did_handle);
   }
 
-  virtual void BeginCommit() OVERRIDE {
+  virtual void BeginCommit() override {
     LayerTreeHostImpl::BeginCommit();
     test_hooks_->BeginCommitOnThread(this);
   }
 
-  virtual void CommitComplete() OVERRIDE {
+  virtual void CommitComplete() override {
     LayerTreeHostImpl::CommitComplete();
     test_hooks_->CommitCompleteOnThread(this);
   }
 
-  virtual DrawResult PrepareToDraw(FrameData* frame) OVERRIDE {
+  virtual DrawResult PrepareToDraw(FrameData* frame) override {
     DrawResult draw_result = LayerTreeHostImpl::PrepareToDraw(frame);
     return test_hooks_->PrepareToDrawOnThread(this, frame, draw_result);
   }
 
   virtual void DrawLayers(FrameData* frame,
-                          base::TimeTicks frame_begin_time) OVERRIDE {
+                          base::TimeTicks frame_begin_time) override {
     LayerTreeHostImpl::DrawLayers(frame, frame_begin_time);
     test_hooks_->DrawLayersOnThread(this);
   }
 
-  virtual bool SwapBuffers(const LayerTreeHostImpl::FrameData& frame) OVERRIDE {
+  virtual bool SwapBuffers(const LayerTreeHostImpl::FrameData& frame) override {
     bool result = LayerTreeHostImpl::SwapBuffers(frame);
     test_hooks_->SwapBuffersOnThread(this, result);
     return result;
   }
 
-  virtual void DidSwapBuffersComplete() OVERRIDE {
+  virtual void DidSwapBuffersComplete() override {
     LayerTreeHostImpl::DidSwapBuffersComplete();
     test_hooks_->SwapBuffersCompleteOnThread(this);
   }
 
-  virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE {
+  virtual void ReclaimResources(const CompositorFrameAck* ack) override {
     LayerTreeHostImpl::ReclaimResources(ack);
   }
 
-  virtual void UpdateVisibleTiles() OVERRIDE {
+  virtual void UpdateVisibleTiles() override {
     LayerTreeHostImpl::UpdateVisibleTiles();
     test_hooks_->UpdateVisibleTilesOnThread(this);
   }
 
-  virtual void NotifyReadyToActivate() OVERRIDE {
+  virtual void NotifyReadyToActivate() override {
     if (block_notify_ready_to_activate_for_testing_)
       notify_ready_to_activate_was_blocked_ = true;
     else
       client_->NotifyReadyToActivate();
   }
 
-  virtual void BlockNotifyReadyToActivateForTesting(bool block) OVERRIDE {
+  virtual void BlockNotifyReadyToActivateForTesting(bool block) override {
     block_notify_ready_to_activate_for_testing_ = block;
     if (!block && notify_ready_to_activate_was_blocked_) {
       NotifyReadyToActivate();
@@ -207,7 +207,7 @@
     }
   }
 
-  virtual void ActivateSyncTree() OVERRIDE {
+  virtual void ActivateSyncTree() override {
     test_hooks_->WillActivateTreeOnThread(this);
     LayerTreeHostImpl::ActivateSyncTree();
     DCHECK(!pending_tree());
@@ -215,24 +215,24 @@
   }
 
   virtual bool InitializeRenderer(scoped_ptr<OutputSurface> output_surface)
-      OVERRIDE {
+      override {
     bool success = LayerTreeHostImpl::InitializeRenderer(output_surface.Pass());
     test_hooks_->InitializedRendererOnThread(this, success);
     return success;
   }
 
-  virtual void SetVisible(bool visible) OVERRIDE {
+  virtual void SetVisible(bool visible) override {
     LayerTreeHostImpl::SetVisible(visible);
     test_hooks_->DidSetVisibleOnImplTree(this, visible);
   }
 
-  virtual void AnimateLayers(base::TimeTicks monotonic_time) OVERRIDE {
+  virtual void AnimateLayers(base::TimeTicks monotonic_time) override {
     test_hooks_->WillAnimateLayers(this, monotonic_time);
     LayerTreeHostImpl::AnimateLayers(monotonic_time);
     test_hooks_->AnimateLayers(this, monotonic_time);
   }
 
-  virtual void UpdateAnimationState(bool start_ready_animations) OVERRIDE {
+  virtual void UpdateAnimationState(bool start_ready_animations) override {
     LayerTreeHostImpl::UpdateAnimationState(start_ready_animations);
     bool has_unfinished_animation = false;
     AnimationRegistrar::AnimationControllerMap::const_iterator iter =
@@ -246,7 +246,7 @@
     test_hooks_->UpdateAnimationState(this, has_unfinished_animation);
   }
 
-  virtual base::TimeDelta LowFrequencyAnimationInterval() const OVERRIDE {
+  virtual base::TimeDelta LowFrequencyAnimationInterval() const override {
     return test_hooks_->LowFrequencyAnimationInterval();
   }
 
@@ -266,24 +266,24 @@
   }
   virtual ~LayerTreeHostClientForTesting() {}
 
-  virtual void WillBeginMainFrame(int frame_id) OVERRIDE {
+  virtual void WillBeginMainFrame(int frame_id) override {
     test_hooks_->WillBeginMainFrame();
   }
 
-  virtual void DidBeginMainFrame() OVERRIDE {
+  virtual void DidBeginMainFrame() override {
     test_hooks_->DidBeginMainFrame();
   }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     test_hooks_->BeginMainFrame(args);
   }
 
-  virtual void Layout() OVERRIDE { test_hooks_->Layout(); }
+  virtual void Layout() override { test_hooks_->Layout(); }
 
   virtual void ApplyViewportDeltas(const gfx::Vector2d& inner_delta,
                                    const gfx::Vector2d& outer_delta,
                                    float page_scale,
-                                   float top_controls_delta) OVERRIDE {
+                                   float top_controls_delta) override {
     test_hooks_->ApplyViewportDeltas(inner_delta,
                                      outer_delta,
                                      page_scale,
@@ -291,38 +291,38 @@
   }
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float scale,
-                                   float top_controls_delta) OVERRIDE {
+                                   float top_controls_delta) override {
     test_hooks_->ApplyViewportDeltas(scroll_delta,
                                      scale,
                                      top_controls_delta);
   }
 
-  virtual void RequestNewOutputSurface(bool fallback) OVERRIDE {
+  virtual void RequestNewOutputSurface(bool fallback) override {
     test_hooks_->RequestNewOutputSurface(fallback);
   }
 
-  virtual void DidInitializeOutputSurface() OVERRIDE {
+  virtual void DidInitializeOutputSurface() override {
     test_hooks_->DidInitializeOutputSurface();
   }
 
-  virtual void DidFailToInitializeOutputSurface() OVERRIDE {
+  virtual void DidFailToInitializeOutputSurface() override {
     test_hooks_->DidFailToInitializeOutputSurface();
   }
 
-  virtual void WillCommit() OVERRIDE { test_hooks_->WillCommit(); }
+  virtual void WillCommit() override { test_hooks_->WillCommit(); }
 
-  virtual void DidCommit() OVERRIDE { test_hooks_->DidCommit(); }
+  virtual void DidCommit() override { test_hooks_->DidCommit(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     test_hooks_->DidCommitAndDrawFrame();
   }
 
-  virtual void DidCompleteSwapBuffers() OVERRIDE {
+  virtual void DidCompleteSwapBuffers() override {
     test_hooks_->DidCompleteSwapBuffers();
   }
 
-  virtual void DidPostSwapBuffers() OVERRIDE {}
-  virtual void DidAbortSwapBuffers() OVERRIDE {}
+  virtual void DidPostSwapBuffers() override {}
+  virtual void DidAbortSwapBuffers() override {}
 
  private:
   explicit LayerTreeHostClientForTesting(TestHooks* test_hooks)
@@ -356,7 +356,7 @@
   }
 
   virtual scoped_ptr<LayerTreeHostImpl> CreateLayerTreeHostImpl(
-      LayerTreeHostImplClient* host_impl_client) OVERRIDE {
+      LayerTreeHostImplClient* host_impl_client) override {
     return LayerTreeHostImplForTesting::Create(
         test_hooks_,
         settings(),
@@ -366,7 +366,7 @@
         rendering_stats_instrumentation());
   }
 
-  virtual void SetNeedsCommit() OVERRIDE {
+  virtual void SetNeedsCommit() override {
     if (!test_started_)
       return;
     LayerTreeHost::SetNeedsCommit();
@@ -374,7 +374,7 @@
 
   void set_test_started(bool started) { test_started_ = started; }
 
-  virtual void DidDeferCommit() OVERRIDE { test_hooks_->DidDeferCommit(); }
+  virtual void DidDeferCommit() override { test_hooks_->DidDeferCommit(); }
 
  private:
   LayerTreeHostForTesting(TestHooks* test_hooks,
diff --git a/cc/test/layer_tree_test.h b/cc/test/layer_tree_test.h
index 36f37ef..af0c554 100644
--- a/cc/test/layer_tree_test.h
+++ b/cc/test/layer_tree_test.h
@@ -92,10 +92,10 @@
   // Implementation of AnimationDelegate:
   virtual void NotifyAnimationStarted(base::TimeTicks monotonic_time,
                                       Animation::TargetProperty target_property)
-      OVERRIDE {}
+      override {}
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {}
+      Animation::TargetProperty target_property) override {}
 
   virtual void RequestNewOutputSurface(bool fallback) = 0;
 };
@@ -187,7 +187,7 @@
   void DestroyLayerTreeHost();
 
   // By default, output surface recreation is synchronous.
-  virtual void RequestNewOutputSurface(bool fallback) OVERRIDE;
+  virtual void RequestNewOutputSurface(bool fallback) override;
   // Override this for pixel tests, where you need a real output surface.
   virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback);
   // Override this for unit tests, which should not produce pixel output.
diff --git a/cc/test/ordered_simple_task_runner.h b/cc/test/ordered_simple_task_runner.h
index 54a2c27..68c9587 100644
--- a/cc/test/ordered_simple_task_runner.h
+++ b/cc/test/ordered_simple_task_runner.h
@@ -55,13 +55,13 @@
   // base::TestSimpleTaskRunner implementation:
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
                                const base::Closure& task,
-                               base::TimeDelta delay) OVERRIDE;
+                               base::TimeDelta delay) override;
   virtual bool PostNonNestableDelayedTask(
       const tracked_objects::Location& from_here,
       const base::Closure& task,
-      base::TimeDelta delay) OVERRIDE;
+      base::TimeDelta delay) override;
 
-  virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
+  virtual bool RunsTasksOnCurrentThread() const override;
 
   // Set a maximum number of tasks to run at once. Useful as a timeout to
   // prevent infinite task loops.
diff --git a/cc/test/pixel_comparator.h b/cc/test/pixel_comparator.h
index 0f24da0..0d418e8 100644
--- a/cc/test/pixel_comparator.h
+++ b/cc/test/pixel_comparator.h
@@ -29,7 +29,7 @@
   // and report the number of pixels with an error on LOG(ERROR). Differences
   // in the alpha channel are ignored.
   virtual bool Compare(const SkBitmap& actual_bmp,
-                       const SkBitmap& expected_bmp) const OVERRIDE;
+                       const SkBitmap& expected_bmp) const override;
 
  private:
   // Exclude alpha channel from comparison?
@@ -52,7 +52,7 @@
   // specified limits. Otherwise, returns false and reports the error metrics on
   // LOG(ERROR). Differences in the alpha channel are ignored.
   virtual bool Compare(const SkBitmap& actual_bmp,
-                       const SkBitmap& expected_bmp) const OVERRIDE;
+                       const SkBitmap& expected_bmp) const override;
 
  private:
   // Exclude alpha channel from comparison?
diff --git a/cc/test/pixel_test.h b/cc/test/pixel_test.h
index 94c6fa9..17ecffb 100644
--- a/cc/test/pixel_test.h
+++ b/cc/test/pixel_test.h
@@ -62,7 +62,7 @@
   void EnableExternalStencilTest();
 
   // RendererClient implementation.
-  virtual void SetFullRootLayerDamage() OVERRIDE {}
+  virtual void SetFullRootLayerDamage() override {}
 
  private:
   void ReadbackResult(base::Closure quit_run_loop,
@@ -85,7 +85,7 @@
   bool ExpandedViewport() const;
 
  protected:
-  virtual void SetUp() OVERRIDE;
+  virtual void SetUp() override;
 };
 
 // Wrappers to differentiate renderers where the the output surface and viewport
diff --git a/cc/test/pixel_test_output_surface.h b/cc/test/pixel_test_output_surface.h
index d3ec612..ce9d79c 100644
--- a/cc/test/pixel_test_output_surface.h
+++ b/cc/test/pixel_test_output_surface.h
@@ -16,8 +16,8 @@
   explicit PixelTestOutputSurface(
       scoped_ptr<SoftwareOutputDevice> software_device);
 
-  virtual void Reshape(const gfx::Size& size, float scale_factor) OVERRIDE;
-  virtual bool HasExternalStencilTest() const OVERRIDE;
+  virtual void Reshape(const gfx::Size& size, float scale_factor) override;
+  virtual bool HasExternalStencilTest() const override;
 
   void set_surface_expansion_size(const gfx::Size& surface_expansion_size) {
     surface_expansion_size_ = surface_expansion_size;
diff --git a/cc/test/pixel_test_software_output_device.h b/cc/test/pixel_test_software_output_device.h
index fd8f4b0..1315b4a 100644
--- a/cc/test/pixel_test_software_output_device.h
+++ b/cc/test/pixel_test_software_output_device.h
@@ -11,7 +11,7 @@
 
 class PixelTestSoftwareOutputDevice : public SoftwareOutputDevice {
  public:
-  virtual void Resize(const gfx::Size& pixel_size, float scale_factor) OVERRIDE;
+  virtual void Resize(const gfx::Size& pixel_size, float scale_factor) override;
 
   void set_surface_expansion_size(const gfx::Size& surface_expansion_size) {
     surface_expansion_size_ = surface_expansion_size;
diff --git a/cc/test/scheduler_test_common.h b/cc/test/scheduler_test_common.h
index 2c6a8be..2cb878a 100644
--- a/cc/test/scheduler_test_common.h
+++ b/cc/test/scheduler_test_common.h
@@ -24,7 +24,7 @@
   bool TickCalled() const { return tick_called_; }
 
   // TimeSourceClient implementation.
-  virtual void OnTimerTick() OVERRIDE;
+  virtual void OnTimerTick() override;
 
  protected:
   bool tick_called_;
@@ -39,7 +39,7 @@
   }
 
   void SetNow(base::TimeTicks time) { now_ = time; }
-  virtual base::TimeTicks Now() const OVERRIDE;
+  virtual base::TimeTicks Now() const override;
 
  protected:
   FakeDelayBasedTimeSource(base::TimeDelta interval,
@@ -67,8 +67,8 @@
 
   // Overridden from DelayBasedTimeSource
   virtual ~TestDelayBasedTimeSource();
-  virtual base::TimeTicks Now() const OVERRIDE;
-  virtual std::string TypeString() const OVERRIDE;
+  virtual base::TimeTicks Now() const override;
+  virtual std::string TypeString() const override;
 
   scoped_refptr<TestNowSource> now_src_;
 };
@@ -89,8 +89,8 @@
   }
 
   // BeginFrameSource
-  virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE;
-  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+  virtual void DidFinishFrame(size_t remaining_frames) override;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const override;
 
   virtual ~FakeBeginFrameSource() {}
 };
@@ -110,7 +110,7 @@
   TestBackToBackBeginFrameSource(scoped_refptr<TestNowSource> now_src,
                                  base::SingleThreadTaskRunner* task_runner);
 
-  virtual base::TimeTicks Now() OVERRIDE;
+  virtual base::TimeTicks Now() override;
 
   scoped_refptr<TestNowSource> now_src_;
 };
@@ -141,9 +141,9 @@
 
  protected:
   virtual BeginFrameSource* ConstructPrimaryFrameSource(
-      Scheduler* scheduler) OVERRIDE;
+      Scheduler* scheduler) override;
   virtual BeginFrameSource* ConstructBackgroundFrameSource(
-      Scheduler* scheduler) OVERRIDE;
+      Scheduler* scheduler) override;
 
   OrderedSimpleTaskRunner* test_task_runner_;
   TestNowSource* now_src_;
@@ -189,7 +189,7 @@
 
  protected:
   // Overridden from Scheduler.
-  virtual base::TimeTicks Now() const OVERRIDE;
+  virtual base::TimeTicks Now() const override;
 
  private:
   TestScheduler(
diff --git a/cc/test/solid_color_content_layer_client.h b/cc/test/solid_color_content_layer_client.h
index 6d4ea47..7e6ceb6 100644
--- a/cc/test/solid_color_content_layer_client.h
+++ b/cc/test/solid_color_content_layer_client.h
@@ -16,12 +16,12 @@
   explicit SolidColorContentLayerClient(SkColor color) : color_(color) {}
 
   // ContentLayerClient implementation.
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
+  virtual void DidChangeLayerCanUseLCDText() override {}
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& rect,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE;
-  virtual bool FillsBoundsCompletely() const OVERRIDE;
+      ContentLayerClient::GraphicsContextStatus gc_status) override;
+  virtual bool FillsBoundsCompletely() const override;
 
  private:
   SkColor color_;
diff --git a/cc/test/test_context_provider.h b/cc/test/test_context_provider.h
index 75c7663..cf0292d 100644
--- a/cc/test/test_context_provider.h
+++ b/cc/test/test_context_provider.h
@@ -27,18 +27,18 @@
   static scoped_refptr<TestContextProvider> Create(
       scoped_ptr<TestWebGraphicsContext3D> context);
 
-  virtual bool BindToCurrentThread() OVERRIDE;
-  virtual Capabilities ContextCapabilities() OVERRIDE;
-  virtual gpu::gles2::GLES2Interface* ContextGL() OVERRIDE;
-  virtual gpu::ContextSupport* ContextSupport() OVERRIDE;
-  virtual class GrContext* GrContext() OVERRIDE;
-  virtual bool IsContextLost() OVERRIDE;
-  virtual void VerifyContexts() OVERRIDE;
-  virtual void DeleteCachedResources() OVERRIDE;
-  virtual bool DestroyedOnMainThread() OVERRIDE;
-  virtual void SetLostContextCallback(const LostContextCallback& cb) OVERRIDE;
+  virtual bool BindToCurrentThread() override;
+  virtual Capabilities ContextCapabilities() override;
+  virtual gpu::gles2::GLES2Interface* ContextGL() override;
+  virtual gpu::ContextSupport* ContextSupport() override;
+  virtual class GrContext* GrContext() override;
+  virtual bool IsContextLost() override;
+  virtual void VerifyContexts() override;
+  virtual void DeleteCachedResources() override;
+  virtual bool DestroyedOnMainThread() override;
+  virtual void SetLostContextCallback(const LostContextCallback& cb) override;
   virtual void SetMemoryPolicyChangedCallback(
-      const MemoryPolicyChangedCallback& cb) OVERRIDE;
+      const MemoryPolicyChangedCallback& cb) override;
 
   TestWebGraphicsContext3D* TestContext3d();
 
diff --git a/cc/test/test_context_support.h b/cc/test/test_context_support.h
index 0ffc683..c9b0d14 100644
--- a/cc/test/test_context_support.h
+++ b/cc/test/test_context_support.h
@@ -19,19 +19,19 @@
 
   // gpu::ContextSupport implementation.
   virtual void SignalSyncPoint(uint32 sync_point,
-                               const base::Closure& callback) OVERRIDE;
+                               const base::Closure& callback) override;
   virtual void SignalQuery(uint32 query,
-                           const base::Closure& callback) OVERRIDE;
-  virtual void SetSurfaceVisible(bool visible) OVERRIDE;
-  virtual void Swap() OVERRIDE;
-  virtual void PartialSwapBuffers(const gfx::Rect& sub_buffer) OVERRIDE;
-  virtual uint32 InsertFutureSyncPointCHROMIUM() OVERRIDE;
-  virtual void RetireSyncPointCHROMIUM(uint32 sync_point) OVERRIDE;
+                           const base::Closure& callback) override;
+  virtual void SetSurfaceVisible(bool visible) override;
+  virtual void Swap() override;
+  virtual void PartialSwapBuffers(const gfx::Rect& sub_buffer) override;
+  virtual uint32 InsertFutureSyncPointCHROMIUM() override;
+  virtual void RetireSyncPointCHROMIUM(uint32 sync_point) override;
   virtual void ScheduleOverlayPlane(int plane_z_order,
                                     gfx::OverlayTransform plane_transform,
                                     unsigned overlay_texture_id,
                                     const gfx::Rect& display_bounds,
-                                    const gfx::RectF& uv_rect) OVERRIDE;
+                                    const gfx::RectF& uv_rect) override;
 
   void CallAllSyncPointCallbacks();
 
diff --git a/cc/test/test_gles2_interface.h b/cc/test/test_gles2_interface.h
index ad53c04..e720022 100644
--- a/cc/test/test_gles2_interface.h
+++ b/cc/test/test_gles2_interface.h
@@ -15,59 +15,59 @@
   explicit TestGLES2Interface(TestWebGraphicsContext3D* test_context);
   virtual ~TestGLES2Interface();
 
-  virtual void GenTextures(GLsizei n, GLuint* textures) OVERRIDE;
-  virtual void GenBuffers(GLsizei n, GLuint* buffers) OVERRIDE;
-  virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) OVERRIDE;
-  virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) OVERRIDE;
-  virtual void GenQueriesEXT(GLsizei n, GLuint* queries) OVERRIDE;
+  virtual void GenTextures(GLsizei n, GLuint* textures) override;
+  virtual void GenBuffers(GLsizei n, GLuint* buffers) override;
+  virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) override;
+  virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override;
+  virtual void GenQueriesEXT(GLsizei n, GLuint* queries) override;
 
-  virtual void DeleteTextures(GLsizei n, const GLuint* textures) OVERRIDE;
-  virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) OVERRIDE;
+  virtual void DeleteTextures(GLsizei n, const GLuint* textures) override;
+  virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) override;
   virtual void DeleteFramebuffers(GLsizei n,
-                                  const GLuint* framebuffers) OVERRIDE;
-  virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) OVERRIDE;
+                                  const GLuint* framebuffers) override;
+  virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) override;
 
-  virtual GLuint CreateShader(GLenum type) OVERRIDE;
-  virtual GLuint CreateProgram() OVERRIDE;
+  virtual GLuint CreateShader(GLenum type) override;
+  virtual GLuint CreateProgram() override;
 
-  virtual void BindTexture(GLenum target, GLuint texture) OVERRIDE;
+  virtual void BindTexture(GLenum target, GLuint texture) override;
 
-  virtual void GetIntegerv(GLenum pname, GLint* params) OVERRIDE;
-  virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) OVERRIDE;
+  virtual void GetIntegerv(GLenum pname, GLint* params) override;
+  virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override;
   virtual void GetProgramiv(GLuint program,
                             GLenum pname,
-                            GLint* params) OVERRIDE;
+                            GLint* params) override;
   virtual void GetShaderPrecisionFormat(GLenum shadertype,
                                         GLenum precisiontype,
                                         GLint* range,
-                                        GLint* precision) OVERRIDE;
-  virtual GLenum CheckFramebufferStatus(GLenum target) OVERRIDE;
+                                        GLint* precision) override;
+  virtual GLenum CheckFramebufferStatus(GLenum target) override;
 
-  virtual void ActiveTexture(GLenum target) OVERRIDE;
+  virtual void ActiveTexture(GLenum target) override;
   virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
-      OVERRIDE;
-  virtual void UseProgram(GLuint program) OVERRIDE;
+      override;
+  virtual void UseProgram(GLuint program) override;
   virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
-      OVERRIDE;
+      override;
   virtual void DrawElements(GLenum mode,
                             GLsizei count,
                             GLenum type,
-                            const void* indices) OVERRIDE;
+                            const void* indices) override;
   virtual void ClearColor(GLclampf red,
                           GLclampf green,
                           GLclampf blue,
-                          GLclampf alpha) OVERRIDE;
-  virtual void ClearStencil(GLint s) OVERRIDE;
-  virtual void Clear(GLbitfield mask) OVERRIDE;
-  virtual void Flush() OVERRIDE;
-  virtual void Finish() OVERRIDE;
-  virtual void ShallowFlushCHROMIUM() OVERRIDE;
-  virtual void Enable(GLenum cap) OVERRIDE;
-  virtual void Disable(GLenum cap) OVERRIDE;
+                          GLclampf alpha) override;
+  virtual void ClearStencil(GLint s) override;
+  virtual void Clear(GLbitfield mask) override;
+  virtual void Flush() override;
+  virtual void Finish() override;
+  virtual void ShallowFlushCHROMIUM() override;
+  virtual void Enable(GLenum cap) override;
+  virtual void Disable(GLenum cap) override;
 
-  virtual void BindBuffer(GLenum target, GLuint buffer) OVERRIDE;
-  virtual void BindRenderbuffer(GLenum target, GLuint buffer) OVERRIDE;
-  virtual void BindFramebuffer(GLenum target, GLuint buffer) OVERRIDE;
+  virtual void BindBuffer(GLenum target, GLuint buffer) override;
+  virtual void BindRenderbuffer(GLenum target, GLuint buffer) override;
+  virtual void BindFramebuffer(GLenum target, GLuint buffer) override;
 
   virtual void TexImage2D(GLenum target,
                           GLint level,
@@ -77,7 +77,7 @@
                           GLint border,
                           GLenum format,
                           GLenum type,
-                          const void* pixels) OVERRIDE;
+                          const void* pixels) override;
   virtual void TexSubImage2D(GLenum target,
                              GLint level,
                              GLint xoffset,
@@ -86,18 +86,18 @@
                              GLsizei height,
                              GLenum format,
                              GLenum type,
-                             const void* pixels) OVERRIDE;
+                             const void* pixels) override;
   virtual void TexStorage2DEXT(GLenum target,
                                GLsizei levels,
                                GLenum internalformat,
                                GLsizei width,
-                               GLsizei height) OVERRIDE;
+                               GLsizei height) override;
   virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
                                            GLsizei width,
                                            GLsizei height,
                                            GLuint io_surface_id,
-                                           GLuint plane) OVERRIDE;
-  virtual void TexParameteri(GLenum target, GLenum pname, GLint param) OVERRIDE;
+                                           GLuint plane) override;
+  virtual void TexParameteri(GLenum target, GLenum pname, GLint param) override;
 
   virtual void AsyncTexImage2DCHROMIUM(GLenum target,
                                        GLint level,
@@ -107,7 +107,7 @@
                                        GLint border,
                                        GLenum format,
                                        GLenum type,
-                                       const void* pixels) OVERRIDE;
+                                       const void* pixels) override;
   virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
                                           GLint level,
                                           GLint xoffset,
@@ -116,7 +116,7 @@
                                           GLsizei height,
                                           GLenum format,
                                           GLenum type,
-                                          const void* pixels) OVERRIDE;
+                                          const void* pixels) override;
   virtual void CompressedTexImage2D(GLenum target,
                                     GLint level,
                                     GLenum internalformat,
@@ -124,74 +124,74 @@
                                     GLsizei height,
                                     GLint border,
                                     GLsizei image_size,
-                                    const void* data) OVERRIDE;
-  virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) OVERRIDE;
+                                    const void* data) override;
+  virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) override;
   virtual GLuint CreateImageCHROMIUM(GLsizei width,
                                      GLsizei height,
                                      GLenum internalformat,
-                                     GLenum usage) OVERRIDE;
-  virtual void DestroyImageCHROMIUM(GLuint image_id) OVERRIDE;
-  virtual void* MapImageCHROMIUM(GLuint image_id) OVERRIDE;
+                                     GLenum usage) override;
+  virtual void DestroyImageCHROMIUM(GLuint image_id) override;
+  virtual void* MapImageCHROMIUM(GLuint image_id) override;
   virtual void GetImageParameterivCHROMIUM(GLuint image_id,
                                            GLenum pname,
-                                           GLint* params) OVERRIDE;
-  virtual void UnmapImageCHROMIUM(GLuint image_id) OVERRIDE;
+                                           GLint* params) override;
+  virtual void UnmapImageCHROMIUM(GLuint image_id) override;
   virtual GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
                                                     GLsizei height,
                                                     GLenum internalformat,
-                                                    GLenum usage) OVERRIDE;
-  virtual void BindTexImage2DCHROMIUM(GLenum target, GLint image_id) OVERRIDE;
+                                                    GLenum usage) override;
+  virtual void BindTexImage2DCHROMIUM(GLenum target, GLint image_id) override;
   virtual void ReleaseTexImage2DCHROMIUM(GLenum target,
-                                         GLint image_id) OVERRIDE;
+                                         GLint image_id) override;
   virtual void FramebufferRenderbuffer(GLenum target,
                                        GLenum attachment,
                                        GLenum renderbuffertarget,
-                                       GLuint renderbuffer) OVERRIDE;
+                                       GLuint renderbuffer) override;
   virtual void FramebufferTexture2D(GLenum target,
                                     GLenum attachment,
                                     GLenum textarget,
                                     GLuint texture,
-                                    GLint level) OVERRIDE;
+                                    GLint level) override;
   virtual void RenderbufferStorage(GLenum target,
                                    GLenum internalformat,
                                    GLsizei width,
-                                   GLsizei height) OVERRIDE;
+                                   GLsizei height) override;
 
-  virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) OVERRIDE;
-  virtual GLboolean UnmapBufferCHROMIUM(GLuint target) OVERRIDE;
+  virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) override;
+  virtual GLboolean UnmapBufferCHROMIUM(GLuint target) override;
   virtual void BufferData(GLenum target,
                           GLsizeiptr size,
                           const void* data,
-                          GLenum usage) OVERRIDE;
+                          GLenum usage) override;
 
-  virtual void WaitSyncPointCHROMIUM(GLuint sync_point) OVERRIDE;
-  virtual GLuint InsertSyncPointCHROMIUM() OVERRIDE;
+  virtual void WaitSyncPointCHROMIUM(GLuint sync_point) override;
+  virtual GLuint InsertSyncPointCHROMIUM() override;
 
-  virtual void BeginQueryEXT(GLenum target, GLuint id) OVERRIDE;
-  virtual void EndQueryEXT(GLenum target) OVERRIDE;
+  virtual void BeginQueryEXT(GLenum target, GLuint id) override;
+  virtual void EndQueryEXT(GLenum target) override;
   virtual void GetQueryObjectuivEXT(GLuint id,
                                     GLenum pname,
-                                    GLuint* params) OVERRIDE;
+                                    GLuint* params) override;
 
   virtual void DiscardFramebufferEXT(GLenum target,
                                      GLsizei count,
-                                     const GLenum* attachments) OVERRIDE;
-  virtual void GenMailboxCHROMIUM(GLbyte* mailbox) OVERRIDE;
+                                     const GLenum* attachments) override;
+  virtual void GenMailboxCHROMIUM(GLbyte* mailbox) override;
   virtual void ProduceTextureCHROMIUM(GLenum target,
-                                      const GLbyte* mailbox) OVERRIDE;
+                                      const GLbyte* mailbox) override;
   virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
                                             GLenum target,
-                                            const GLbyte* mailbox) OVERRIDE;
+                                            const GLbyte* mailbox) override;
   virtual void ConsumeTextureCHROMIUM(GLenum target,
-                                      const GLbyte* mailbox) OVERRIDE;
+                                      const GLbyte* mailbox) override;
   virtual GLuint CreateAndConsumeTextureCHROMIUM(
       GLenum target,
-      const GLbyte* mailbox) OVERRIDE;
+      const GLbyte* mailbox) override;
 
   virtual void ResizeCHROMIUM(GLuint width,
                               GLuint height,
-                              float device_scale) OVERRIDE;
-  virtual void LoseContextCHROMIUM(GLenum current, GLenum other) OVERRIDE;
+                              float device_scale) override;
+  virtual void LoseContextCHROMIUM(GLenum current, GLenum other) override;
 
  private:
   TestWebGraphicsContext3D* test_context_;
diff --git a/cc/test/test_in_process_context_provider.h b/cc/test/test_in_process_context_provider.h
index 721caba..5e6a978 100644
--- a/cc/test/test_in_process_context_provider.h
+++ b/cc/test/test_in_process_context_provider.h
@@ -22,20 +22,20 @@
  public:
   TestInProcessContextProvider();
 
-  virtual bool BindToCurrentThread() OVERRIDE;
-  virtual gpu::gles2::GLES2Interface* ContextGL() OVERRIDE;
-  virtual gpu::ContextSupport* ContextSupport() OVERRIDE;
-  virtual class GrContext* GrContext() OVERRIDE;
-  virtual Capabilities ContextCapabilities() OVERRIDE;
-  virtual bool IsContextLost() OVERRIDE;
-  virtual void VerifyContexts() OVERRIDE;
-  virtual void DeleteCachedResources() OVERRIDE;
-  virtual bool DestroyedOnMainThread() OVERRIDE;
+  virtual bool BindToCurrentThread() override;
+  virtual gpu::gles2::GLES2Interface* ContextGL() override;
+  virtual gpu::ContextSupport* ContextSupport() override;
+  virtual class GrContext* GrContext() override;
+  virtual Capabilities ContextCapabilities() override;
+  virtual bool IsContextLost() override;
+  virtual void VerifyContexts() override;
+  virtual void DeleteCachedResources() override;
+  virtual bool DestroyedOnMainThread() override;
   virtual void SetLostContextCallback(
-      const LostContextCallback& lost_context_callback) OVERRIDE;
+      const LostContextCallback& lost_context_callback) override;
   virtual void SetMemoryPolicyChangedCallback(
       const MemoryPolicyChangedCallback& memory_policy_changed_callback)
-      OVERRIDE;
+      override;
 
  protected:
   friend class base::RefCountedThreadSafe<TestInProcessContextProvider>;
diff --git a/cc/test/test_shared_bitmap_manager.h b/cc/test/test_shared_bitmap_manager.h
index 2952940..ccda52c 100644
--- a/cc/test/test_shared_bitmap_manager.h
+++ b/cc/test/test_shared_bitmap_manager.h
@@ -18,14 +18,14 @@
   virtual ~TestSharedBitmapManager();
 
   virtual scoped_ptr<SharedBitmap> AllocateSharedBitmap(const gfx::Size& size)
-      OVERRIDE;
+      override;
 
   virtual scoped_ptr<SharedBitmap> GetSharedBitmapFromId(
       const gfx::Size&,
-      const SharedBitmapId& id) OVERRIDE;
+      const SharedBitmapId& id) override;
 
   virtual scoped_ptr<SharedBitmap> GetBitmapForSharedMemory(
-      base::SharedMemory* memory) OVERRIDE;
+      base::SharedMemory* memory) override;
 
  private:
   base::Lock lock_;
diff --git a/cc/test/tiled_layer_test_common.h b/cc/test/tiled_layer_test_common.h
index 2634621..29f06a7 100644
--- a/cc/test/tiled_layer_test_common.h
+++ b/cc/test/tiled_layer_test_common.h
@@ -30,7 +30,7 @@
     virtual void Update(ResourceUpdateQueue* queue,
                         const gfx::Rect& source_rect,
                         const gfx::Vector2d& dest_offset,
-                        bool partial_update) OVERRIDE;
+                        bool partial_update) override;
 
    private:
     FakeLayerUpdater* layer_;
@@ -42,13 +42,13 @@
   FakeLayerUpdater();
 
   virtual scoped_ptr<LayerUpdater::Resource> CreateResource(
-      PrioritizedResourceManager* resource) OVERRIDE;
+      PrioritizedResourceManager* resource) override;
 
   virtual void PrepareToUpdate(const gfx::Size& content_size,
                                const gfx::Rect& paint_rect,
                                const gfx::Size& tile_size,
                                float contents_width_scale,
-                               float contents_height_scale) OVERRIDE;
+                               float contents_height_scale) override;
   // Sets the rect to invalidate during the next call to PrepareToUpdate().
   // After the next call to PrepareToUpdate() the rect is reset.
   void SetRectToInvalidate(const gfx::Rect& rect, FakeTiledLayer* layer);
@@ -102,15 +102,15 @@
   using TiledLayer::NumPaintedTiles;
   using TiledLayer::IdlePaintRect;
 
-  virtual void SetNeedsDisplayRect(const gfx::RectF& rect) OVERRIDE;
+  virtual void SetNeedsDisplayRect(const gfx::RectF& rect) override;
   const gfx::RectF& last_needs_display_rect() const {
     return last_needs_display_rect_;
   }
 
   virtual void SetTexturePriorities(
-      const PriorityCalculator& priority_calculator) OVERRIDE;
+      const PriorityCalculator& priority_calculator) override;
 
-  virtual PrioritizedResourceManager* ResourceManager() OVERRIDE;
+  virtual PrioritizedResourceManager* ResourceManager() override;
   FakeLayerUpdater* fake_layer_updater() { return fake_updater_.get(); }
   gfx::RectF update_rect() { return update_rect_; }
 
@@ -120,8 +120,8 @@
   void ResetNumDependentsNeedPushProperties();
 
  protected:
-  virtual LayerUpdater* Updater() const OVERRIDE;
-  virtual void CreateUpdaterIfNeeded() OVERRIDE {}
+  virtual LayerUpdater* Updater() const override;
+  virtual void CreateUpdaterIfNeeded() override {}
   virtual ~FakeTiledLayer();
 
  private:
@@ -141,7 +141,7 @@
   virtual void CalculateContentsScale(float ideal_contents_scale,
                                       float* contents_scale_x,
                                       float* contents_scale_y,
-                                      gfx::Size* content_bounds) OVERRIDE;
+                                      gfx::Size* content_bounds) override;
 
  protected:
   virtual ~FakeTiledLayerWithScaledBounds();
diff --git a/cc/trees/layer_tree_host_common_perftest.cc b/cc/trees/layer_tree_host_common_perftest.cc
index d334e96..e378561 100644
--- a/cc/trees/layer_tree_host_common_perftest.cc
+++ b/cc/trees/layer_tree_host_common_perftest.cc
@@ -50,7 +50,7 @@
     ASSERT_TRUE(base::ReadFileToString(json_file, &json_));
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     gfx::Size viewport = gfx::Size(720, 1038);
     layer_tree_host()->SetViewportSize(viewport);
     scoped_refptr<Layer> root =
@@ -61,7 +61,7 @@
 
   void SetTestName(const std::string& name) { test_name_ = name; }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     CHECK(!test_name_.empty()) << "Must SetTestName() before TearDown().";
     perf_test::PrintResult("calc_draw_props_time",
                            "",
@@ -84,7 +84,7 @@
     RunTest(false, false, false);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     timer_.Reset();
 
     do {
@@ -121,11 +121,11 @@
     RunTestWithImplSidePainting();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     timer_.Reset();
     LayerTreeImpl* active_tree = host_impl->active_tree();
 
@@ -169,9 +169,9 @@
  public:
   void RunSortLayers() { RunTest(false, false, false); }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     LayerTreeImpl* active_tree = host_impl->active_tree();
     // First build the tree and then we'll start running tests on layersorter
     // itself
@@ -221,9 +221,9 @@
     num_duplicates_ = num_duplicates;
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     LayerTreeImpl* active_tree = host_impl->active_tree();
     // First build the tree and then we'll start running tests on layersorter
     // itself
diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc
index 7278b33..9efcaea 100644
--- a/cc/trees/layer_tree_host_common_unittest.cc
+++ b/cc/trees/layer_tree_host_common_unittest.cc
@@ -40,7 +40,7 @@
  public:
   LayerWithForcedDrawsContent() {}
 
-  virtual bool DrawsContent() const OVERRIDE;
+  virtual bool DrawsContent() const override;
 
  private:
   virtual ~LayerWithForcedDrawsContent() {}
@@ -55,9 +55,9 @@
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& clip,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {}
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
-  virtual bool FillsBoundsCompletely() const OVERRIDE { return false; }
+      ContentLayerClient::GraphicsContextStatus gc_status) override {}
+  virtual void DidChangeLayerCanUseLCDText() override {}
+  virtual bool FillsBoundsCompletely() const override { return false; }
 };
 
 scoped_refptr<ContentLayer> CreateDrawableContentLayer(
@@ -4018,7 +4018,7 @@
   virtual void CalculateContentsScale(float ideal_contents_scale,
                                       float* contents_scale_x,
                                       float* contents_scale_y,
-                                      gfx::Size* content_bounds) OVERRIDE {
+                                      gfx::Size* content_bounds) override {
     // Skip over the ContentLayer to the base Layer class.
     Layer::CalculateContentsScale(ideal_contents_scale,
                                   contents_scale_x,
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index dd000d6..4d2f5a7 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -145,7 +145,7 @@
     time_source_->SetActive(false);
   }
 
-  virtual void OnTimerTick() OVERRIDE {
+  virtual void OnTimerTick() override {
     // In single threaded mode we attempt to simulate changing the current
     // thread by maintaining a fake thread id. When we switch from one
     // thread to another, we construct DebugScopedSetXXXThread objects that
@@ -336,6 +336,10 @@
 void LayerTreeHostImpl::CommitComplete() {
   TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete");
 
+  // Ask to be animated if there are animations
+  if (needs_animate_layers())
+    SetNeedsAnimate();
+
   if (pending_tree_)
     pending_tree_->ApplyScrollDeltasSinceBeginMainFrame();
   sync_tree()->set_needs_update_draw_properties();
@@ -546,7 +550,10 @@
     LayerImpl* layer,
     const OcclusionTracker<LayerImpl>& occlusion_tracker,
     AppendQuadsData* append_quads_data) {
-  layer->AppendQuads(target_render_pass, occlusion_tracker, append_quads_data);
+  layer->AppendQuads(
+      target_render_pass,
+      occlusion_tracker.GetCurrentOcclusionForLayer(layer->draw_transform()),
+      append_quads_data);
 }
 
 static void AppendQuadsForRenderSurfaceLayer(
@@ -861,13 +868,11 @@
     draw_result = DRAW_SUCCESS;
 
 #if DCHECK_IS_ON
-  for (size_t i = 0; i < frame->render_passes.size(); ++i) {
-    for (QuadList::Iterator iter = frame->render_passes[i]->quad_list.begin();
-         iter != frame->render_passes[i]->quad_list.end();
-         ++iter)
-      DCHECK(iter->shared_quad_state);
-    DCHECK(frame->render_passes_by_id.find(frame->render_passes[i]->id)
-           != frame->render_passes_by_id.end());
+  for (auto* render_pass : frame->render_passes) {
+    for (auto& quad : render_pass->quad_list)
+      DCHECK(quad.shared_quad_state);
+    DCHECK(frame->render_passes_by_id.find(render_pass->id) !=
+           frame->render_passes_by_id.end());
   }
 #endif
   DCHECK(frame->render_passes.back()->output_rect.origin().IsOrigin());
@@ -1478,9 +1483,7 @@
 
   fps_counter_->SaveTimeStamp(frame_begin_time,
                               !output_surface_->context_provider());
-  bool on_main_thread = false;
-  rendering_stats_instrumentation_->IncrementFrameCount(
-      1, on_main_thread);
+  rendering_stats_instrumentation_->IncrementFrameCount(1);
 
   if (tile_manager_) {
     memory_history_->SaveEntry(
@@ -2536,7 +2539,7 @@
         // Force updating of vertical adjust values if needed.
         if (applied_delta.y() != 0) {
           did_scroll_top_controls = true;
-          layer_impl->ScrollbarParametersDidChange();
+          layer_impl->ScrollbarParametersDidChange(false);
         }
       }
       // Track root layer deltas for reporting overscroll.
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index fad9f08..a987d46 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -125,44 +125,44 @@
   virtual ~LayerTreeHostImpl();
 
   // BeginFrameSourceMixIn implementation
-  virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) OVERRIDE;
+  virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override;
 
   // InputHandler implementation
-  virtual void BindToClient(InputHandlerClient* client) OVERRIDE;
+  virtual void BindToClient(InputHandlerClient* client) override;
   virtual InputHandler::ScrollStatus ScrollBegin(
       const gfx::Point& viewport_point,
-      InputHandler::ScrollInputType type) OVERRIDE;
+      InputHandler::ScrollInputType type) override;
   virtual InputHandler::ScrollStatus ScrollAnimated(
       const gfx::Point& viewport_point,
-      const gfx::Vector2dF& scroll_delta) OVERRIDE;
+      const gfx::Vector2dF& scroll_delta) override;
   virtual bool ScrollBy(const gfx::Point& viewport_point,
-                        const gfx::Vector2dF& scroll_delta) OVERRIDE;
+                        const gfx::Vector2dF& scroll_delta) override;
   virtual bool ScrollVerticallyByPage(const gfx::Point& viewport_point,
-                                      ScrollDirection direction) OVERRIDE;
+                                      ScrollDirection direction) override;
   virtual void SetRootLayerScrollOffsetDelegate(
-      LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) OVERRIDE;
-  virtual void OnRootLayerDelegatedScrollOffsetChanged() OVERRIDE;
-  virtual void ScrollEnd() OVERRIDE;
-  virtual InputHandler::ScrollStatus FlingScrollBegin() OVERRIDE;
-  virtual void MouseMoveAt(const gfx::Point& viewport_point) OVERRIDE;
-  virtual void PinchGestureBegin() OVERRIDE;
+      LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) override;
+  virtual void OnRootLayerDelegatedScrollOffsetChanged() override;
+  virtual void ScrollEnd() override;
+  virtual InputHandler::ScrollStatus FlingScrollBegin() override;
+  virtual void MouseMoveAt(const gfx::Point& viewport_point) override;
+  virtual void PinchGestureBegin() override;
   virtual void PinchGestureUpdate(float magnify_delta,
-                                  const gfx::Point& anchor) OVERRIDE;
-  virtual void PinchGestureEnd() OVERRIDE;
-  virtual void SetNeedsAnimate() OVERRIDE;
+                                  const gfx::Point& anchor) override;
+  virtual void PinchGestureEnd() override;
+  virtual void SetNeedsAnimate() override;
   virtual bool IsCurrentlyScrollingLayerAt(
       const gfx::Point& viewport_point,
-      InputHandler::ScrollInputType type) OVERRIDE;
+      InputHandler::ScrollInputType type) override;
   virtual bool HaveTouchEventHandlersAt(
-      const gfx::Point& viewport_port) OVERRIDE;
+      const gfx::Point& viewport_port) override;
   virtual scoped_ptr<SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor(
-      ui::LatencyInfo* latency) OVERRIDE;
+      ui::LatencyInfo* latency) override;
 
   // TopControlsManagerClient implementation.
-  virtual void SetControlsTopOffset(float offset) OVERRIDE;
-  virtual float ControlsTopOffset() const OVERRIDE;
-  virtual void DidChangeTopControlsPosition() OVERRIDE;
-  virtual bool HaveRootScrollLayer() const OVERRIDE;
+  virtual void SetControlsTopOffset(float offset) override;
+  virtual float ControlsTopOffset() const override;
+  virtual void DidChangeTopControlsPosition() override;
+  virtual bool HaveRootScrollLayer() const override;
 
   struct CC_EXPORT FrameData : public RenderPassSink {
     FrameData();
@@ -179,7 +179,7 @@
     bool has_no_damage;
 
     // RenderPassSink implementation.
-    virtual void AppendRenderPass(scoped_ptr<RenderPass> render_pass) OVERRIDE;
+    virtual void AppendRenderPass(scoped_ptr<RenderPass> render_pass) override;
   };
 
   virtual void BeginMainFrameAborted(bool did_handle);
@@ -231,30 +231,30 @@
   const gfx::Rect ViewportRectForTilePriority() const;
 
   // RendererClient implementation.
-  virtual void SetFullRootLayerDamage() OVERRIDE;
+  virtual void SetFullRootLayerDamage() override;
 
   // TileManagerClient implementation.
   virtual const std::vector<PictureLayerImpl*>& GetPictureLayers()
-      const OVERRIDE;
-  virtual void NotifyReadyToActivate() OVERRIDE;
-  virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE;
+      const override;
+  virtual void NotifyReadyToActivate() override;
+  virtual void NotifyTileStateChanged(const Tile* tile) override;
   virtual void BuildRasterQueue(RasterTilePriorityQueue* queue,
-                                TreePriority tree_priority) OVERRIDE;
+                                TreePriority tree_priority) override;
   virtual void BuildEvictionQueue(EvictionTilePriorityQueue* queue,
-                                  TreePriority tree_priority) OVERRIDE;
+                                  TreePriority tree_priority) override;
 
   // ScrollbarAnimationControllerClient implementation.
   virtual void PostDelayedScrollbarFade(const base::Closure& start_fade,
-                                        base::TimeDelta delay) OVERRIDE;
-  virtual void SetNeedsScrollbarAnimationFrame() OVERRIDE;
+                                        base::TimeDelta delay) override;
+  virtual void SetNeedsScrollbarAnimationFrame() override;
 
   // OutputSurfaceClient implementation.
-  virtual void DeferredInitialize() OVERRIDE;
-  virtual void ReleaseGL() OVERRIDE;
+  virtual void DeferredInitialize() override;
+  virtual void ReleaseGL() override;
   virtual void CommitVSyncParameters(base::TimeTicks timebase,
-                                     base::TimeDelta interval) OVERRIDE;
-  virtual void SetNeedsRedrawRect(const gfx::Rect& rect) OVERRIDE;
-  virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE;
+                                     base::TimeDelta interval) override;
+  virtual void SetNeedsRedrawRect(const gfx::Rect& rect) override;
+  virtual void BeginFrame(const BeginFrameArgs& args) override;
 
   virtual void SetExternalDrawConstraints(
       const gfx::Transform& transform,
@@ -262,14 +262,14 @@
       const gfx::Rect& clip,
       const gfx::Rect& viewport_rect_for_tile_priority,
       const gfx::Transform& transform_for_tile_priority,
-      bool resourceless_software_draw) OVERRIDE;
-  virtual void DidLoseOutputSurface() OVERRIDE;
-  virtual void DidSwapBuffers() OVERRIDE;
-  virtual void DidSwapBuffersComplete() OVERRIDE;
-  virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE;
-  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE;
+      bool resourceless_software_draw) override;
+  virtual void DidLoseOutputSurface() override;
+  virtual void DidSwapBuffers() override;
+  virtual void DidSwapBuffersComplete() override;
+  virtual void ReclaimResources(const CompositorFrameAck* ack) override;
+  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override;
   virtual void SetTreeActivationCallback(const base::Closure& callback)
-      OVERRIDE;
+      override;
 
   // Called from LayerTreeImpl.
   void OnCanDrawStateChangedForTree();
@@ -427,7 +427,7 @@
     return begin_impl_frame_interval_;
   }
 
-  virtual void AsValueInto(base::debug::TracedValue* value) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* value) const override;
   void AsValueWithFrameInto(FrameData* frame,
                             base::debug::TracedValue* value) const;
   scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 981e670..2972a7c 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -26,6 +26,7 @@
 #include "cc/layers/solid_color_scrollbar_layer_impl.h"
 #include "cc/layers/texture_layer_impl.h"
 #include "cc/layers/tiled_layer_impl.h"
+#include "cc/layers/video_layer_impl.h"
 #include "cc/output/begin_frame_args.h"
 #include "cc/output/compositor_frame_ack.h"
 #include "cc/output/compositor_frame_metadata.h"
@@ -46,6 +47,7 @@
 #include "cc/test/fake_picture_pile_impl.h"
 #include "cc/test/fake_proxy.h"
 #include "cc/test/fake_rendering_stats_instrumentation.h"
+#include "cc/test/fake_video_frame_provider.h"
 #include "cc/test/geometry_test_utils.h"
 #include "cc/test/layer_test_common.h"
 #include "cc/test/render_pass_test_common.h"
@@ -53,6 +55,7 @@
 #include "cc/test/test_web_graphics_context_3d.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/single_thread_proxy.h"
+#include "media/base/media.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkMallocPixelRef.h"
@@ -66,6 +69,7 @@
 using ::testing::AnyNumber;
 using ::testing::AtLeast;
 using ::testing::_;
+using media::VideoFrame;
 
 namespace cc {
 namespace {
@@ -89,6 +93,7 @@
         reduce_memory_result_(true),
         current_limit_bytes_(0),
         current_priority_cutoff_value_(0) {
+    media::InitializeMediaLibraryForTesting();
   }
 
   LayerTreeSettings DefaultSettings() {
@@ -100,64 +105,64 @@
     return settings;
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     CreateHostImpl(DefaultSettings(), CreateOutputSurface());
   }
 
-  virtual void TearDown() OVERRIDE {}
+  virtual void TearDown() override {}
 
-  virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE {}
-  virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE {}
+  virtual void UpdateRendererCapabilitiesOnImplThread() override {}
+  virtual void DidLoseOutputSurfaceOnImplThread() override {}
   virtual void CommitVSyncParameters(base::TimeTicks timebase,
-                                     base::TimeDelta interval) OVERRIDE {}
-  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) OVERRIDE {}
-  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE {}
-  virtual void DidSwapBuffersOnImplThread() OVERRIDE {}
-  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE {}
-  virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE {
+                                     base::TimeDelta interval) override {}
+  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {}
+  virtual void SetMaxSwapsPendingOnImplThread(int max) override {}
+  virtual void DidSwapBuffersOnImplThread() override {}
+  virtual void DidSwapBuffersCompleteOnImplThread() override {}
+  virtual void OnCanDrawStateChanged(bool can_draw) override {
     on_can_draw_state_changed_called_ = true;
   }
-  virtual void NotifyReadyToActivate() OVERRIDE {
+  virtual void NotifyReadyToActivate() override {
     did_notify_ready_to_activate_ = true;
     host_impl_->ActivateSyncTree();
   }
-  virtual void SetNeedsRedrawOnImplThread() OVERRIDE {
+  virtual void SetNeedsRedrawOnImplThread() override {
     did_request_redraw_ = true;
   }
   virtual void SetNeedsRedrawRectOnImplThread(
-      const gfx::Rect& damage_rect) OVERRIDE {
+      const gfx::Rect& damage_rect) override {
     did_request_redraw_ = true;
   }
-  virtual void SetNeedsAnimateOnImplThread() OVERRIDE {
+  virtual void SetNeedsAnimateOnImplThread() override {
     did_request_animate_ = true;
   }
-  virtual void SetNeedsManageTilesOnImplThread() OVERRIDE {
+  virtual void SetNeedsManageTilesOnImplThread() override {
     did_request_manage_tiles_ = true;
   }
-  virtual void DidInitializeVisibleTileOnImplThread() OVERRIDE {
+  virtual void DidInitializeVisibleTileOnImplThread() override {
     did_upload_visible_tile_ = true;
   }
-  virtual void SetNeedsCommitOnImplThread() OVERRIDE {
+  virtual void SetNeedsCommitOnImplThread() override {
     did_request_commit_ = true;
   }
   virtual void PostAnimationEventsToMainThreadOnImplThread(
-      scoped_ptr<AnimationEventsVector> events) OVERRIDE {}
+      scoped_ptr<AnimationEventsVector> events) override {}
   virtual bool ReduceContentsTextureMemoryOnImplThread(
-      size_t limit_bytes, int priority_cutoff) OVERRIDE {
+      size_t limit_bytes, int priority_cutoff) override {
     current_limit_bytes_ = limit_bytes;
     current_priority_cutoff_value_ = priority_cutoff;
     return reduce_memory_result_;
   }
-  virtual bool IsInsideDraw() OVERRIDE { return false; }
-  virtual void RenewTreePriority() OVERRIDE {}
+  virtual bool IsInsideDraw() override { return false; }
+  virtual void RenewTreePriority() override {}
   virtual void PostDelayedScrollbarFadeOnImplThread(
       const base::Closure& start_fade,
-      base::TimeDelta delay) OVERRIDE {
+      base::TimeDelta delay) override {
     scrollbar_fade_start_ = start_fade;
     requested_scrollbar_animation_delay_ = delay;
   }
-  virtual void DidActivateSyncTree() OVERRIDE {}
-  virtual void DidManageTiles() OVERRIDE {}
+  virtual void DidActivateSyncTree() override {}
+  virtual void DidManageTiles() override {}
 
   void set_reduce_memory_result(bool reduce_memory_result) {
     reduce_memory_result_ = reduce_memory_result;
@@ -1363,7 +1368,7 @@
                           manager,
                           0) {}
 
-  virtual BeginFrameArgs CurrentBeginFrameArgs() const OVERRIDE {
+  virtual BeginFrameArgs CurrentBeginFrameArgs() const override {
     return CreateBeginFrameArgsForTesting(fake_current_physical_time_);
   }
 
@@ -1703,7 +1708,7 @@
   }
 
   virtual bool WillDraw(DrawMode draw_mode, ResourceProvider* provider)
-      OVERRIDE {
+      override {
     will_draw_called_ = true;
     if (will_draw_returns_false_)
       return false;
@@ -1711,13 +1716,14 @@
   }
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE {
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override {
     append_quads_called_ = true;
-    LayerImpl::AppendQuads(render_pass, occlusion_tracker, append_quads_data);
+    LayerImpl::AppendQuads(
+        render_pass, occlusion_in_content_space, append_quads_data);
   }
 
-  virtual void DidDraw(ResourceProvider* provider) OVERRIDE {
+  virtual void DidDraw(ResourceProvider* provider) override {
     did_draw_called_ = true;
     LayerImpl::DidDraw(provider);
   }
@@ -1934,9 +1940,10 @@
   }
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE {
-    LayerImpl::AppendQuads(render_pass, occlusion_tracker, append_quads_data);
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override {
+    LayerImpl::AppendQuads(
+        render_pass, occlusion_in_content_space, append_quads_data);
     if (had_incomplete_tile_)
       append_quads_data->num_incomplete_tiles++;
     if (tile_missing_)
@@ -3278,11 +3285,11 @@
 
   virtual ~TestScrollOffsetDelegate() {}
 
-  virtual gfx::ScrollOffset GetTotalScrollOffset() OVERRIDE {
+  virtual gfx::ScrollOffset GetTotalScrollOffset() override {
     return getter_return_value_;
   }
 
-  virtual bool IsExternalFlingActive() const OVERRIDE { return false; }
+  virtual bool IsExternalFlingActive() const override { return false; }
 
   virtual void UpdateRootLayerState(
       const gfx::ScrollOffset& total_scroll_offset,
@@ -3290,7 +3297,7 @@
       const gfx::SizeF& scrollable_size,
       float page_scale_factor,
       float min_page_scale_factor,
-      float max_page_scale_factor) OVERRIDE {
+      float max_page_scale_factor) override {
     DCHECK(total_scroll_offset.x() <= max_scroll_offset.x());
     DCHECK(total_scroll_offset.y() <= max_scroll_offset.y());
     last_set_scroll_offset_ = total_scroll_offset;
@@ -3733,8 +3740,8 @@
   }
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE {
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override {
     quads_appended_ = true;
 
     gfx::Rect opaque_rect;
@@ -4144,7 +4151,7 @@
     host_impl_->DidDrawAllLayers(frame);
   }
 
-  virtual void DidActivateSyncTree() OVERRIDE {
+  virtual void DidActivateSyncTree() override {
     did_activate_pending_tree_ = true;
   }
 
@@ -4158,10 +4165,8 @@
  protected:
   size_t CountGutterQuads(const QuadList& quad_list) {
     size_t num_gutter_quads = 0;
-    for (QuadList::ConstIterator iter = quad_list.begin();
-         iter != quad_list.end();
-         ++iter) {
-      num_gutter_quads += (iter->material == gutter_quad_material_) ? 1 : 0;
+    for (const auto& quad : quad_list) {
+      num_gutter_quads += (quad.material == gutter_quad_material_) ? 1 : 0;
     }
     return num_gutter_quads;
   }
@@ -4173,22 +4178,23 @@
 
   // Make sure that the texture coordinates match their expectations.
   void ValidateTextureDrawQuads(const QuadList& quad_list) {
-    for (QuadList::ConstIterator iter = quad_list.begin();
-         iter != quad_list.end();
-         ++iter) {
-      if (iter->material != DrawQuad::TEXTURE_CONTENT)
+    for (const auto& quad : quad_list) {
+      if (quad.material != DrawQuad::TEXTURE_CONTENT)
         continue;
-      const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(&*iter);
+      const TextureDrawQuad* texture_quad =
+          TextureDrawQuad::MaterialCast(&quad);
       gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize(
           gutter_texture_size_, host_impl_->device_scale_factor());
-      EXPECT_EQ(quad->uv_top_left.x(),
-                quad->rect.x() / gutter_texture_size_pixels.width());
-      EXPECT_EQ(quad->uv_top_left.y(),
-                quad->rect.y() / gutter_texture_size_pixels.height());
-      EXPECT_EQ(quad->uv_bottom_right.x(),
-                quad->rect.right() / gutter_texture_size_pixels.width());
-      EXPECT_EQ(quad->uv_bottom_right.y(),
-                quad->rect.bottom() / gutter_texture_size_pixels.height());
+      EXPECT_EQ(texture_quad->uv_top_left.x(),
+                texture_quad->rect.x() / gutter_texture_size_pixels.width());
+      EXPECT_EQ(texture_quad->uv_top_left.y(),
+                texture_quad->rect.y() / gutter_texture_size_pixels.height());
+      EXPECT_EQ(
+          texture_quad->uv_bottom_right.x(),
+          texture_quad->rect.right() / gutter_texture_size_pixels.width());
+      EXPECT_EQ(
+          texture_quad->uv_bottom_right.y(),
+          texture_quad->rect.bottom() / gutter_texture_size_pixels.height());
     }
   }
 
@@ -4497,8 +4503,8 @@
   }
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE {
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override {
     SharedQuadState* shared_quad_state =
         render_pass->CreateAndAppendSharedQuadState();
     PopulateSharedQuadState(shared_quad_state);
@@ -4821,6 +4827,18 @@
       LayerImpl::Create(host_impl_->active_tree(), 1);
   root_layer->SetBounds(gfx::Size(10, 10));
 
+  scoped_refptr<VideoFrame> softwareFrame =
+      media::VideoFrame::CreateColorFrame(
+          gfx::Size(4, 4), 0x80, 0x80, 0x80, base::TimeDelta());
+  FakeVideoFrameProvider provider;
+  provider.set_frame(softwareFrame);
+  scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create(
+      host_impl_->active_tree(), 4, &provider, media::VIDEO_ROTATION_0);
+  video_layer->SetBounds(gfx::Size(10, 10));
+  video_layer->SetContentBounds(gfx::Size(10, 10));
+  video_layer->SetDrawsContent(true);
+  root_layer->AddChild(video_layer.Pass());
+
   scoped_ptr<IOSurfaceLayerImpl> io_surface_layer =
       IOSurfaceLayerImpl::Create(host_impl_->active_tree(), 5);
   io_surface_layer->SetBounds(gfx::Size(10, 10));
@@ -4934,7 +4952,7 @@
 class LayerTreeHostImplTestWithDelegatingRenderer
     : public LayerTreeHostImplTest {
  protected:
-  virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE {
+  virtual scoped_ptr<OutputSurface> CreateOutputSurface() override {
     return FakeOutputSurface::CreateDelegating3d();
   }
 
@@ -5024,7 +5042,7 @@
     return make_scoped_ptr(new FakeMaskLayerImpl(tree_impl, id));
   }
 
-  virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE {
+  virtual ResourceProvider::ResourceId ContentsResourceId() const override {
     return 0;
   }
 
@@ -5754,7 +5772,7 @@
   CompositorFrameMetadataTest()
       : swap_buffers_complete_(0) {}
 
-  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE {
+  virtual void DidSwapBuffersCompleteOnImplThread() override {
     swap_buffers_complete_++;
   }
 
@@ -5779,11 +5797,11 @@
  public:
   CountingSoftwareDevice() : frames_began_(0), frames_ended_(0) {}
 
-  virtual SkCanvas* BeginPaint(const gfx::Rect& damage_rect) OVERRIDE {
+  virtual SkCanvas* BeginPaint(const gfx::Rect& damage_rect) override {
     ++frames_began_;
     return SoftwareOutputDevice::BeginPaint(damage_rect);
   }
-  virtual void EndPaint(SoftwareFrameData* frame_data) OVERRIDE {
+  virtual void EndPaint(SoftwareFrameData* frame_data) override {
     ++frames_ended_;
     SoftwareOutputDevice::EndPaint(frame_data);
   }
@@ -5856,6 +5874,16 @@
   scoped_ptr<SolidColorLayerImpl> root_layer =
       SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
 
+  // VideoLayerImpl will not be drawn.
+  FakeVideoFrameProvider provider;
+  scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create(
+      host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0);
+  video_layer->SetBounds(gfx::Size(10, 10));
+  video_layer->SetContentBounds(gfx::Size(10, 10));
+  video_layer->SetDrawsContent(true);
+  root_layer->AddChild(video_layer.Pass());
+  SetupRootLayerImpl(root_layer.Pass());
+
   LayerTreeHostImpl::FrameData frame;
   EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
   host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
@@ -5867,7 +5895,7 @@
 
 class LayerTreeHostImplTestDeferredInitialize : public LayerTreeHostImplTest {
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     LayerTreeHostImplTest::SetUp();
 
     set_reduce_memory_result(false);
@@ -5888,7 +5916,7 @@
     onscreen_context_provider_ = TestContextProvider::Create();
   }
 
-  virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE {
+  virtual void UpdateRendererCapabilitiesOnImplThread() override {
     did_update_renderer_capabilities_ = true;
   }
 
@@ -6055,7 +6083,7 @@
 
 class LayerTreeHostImplTestManageTiles : public LayerTreeHostImplTest {
  public:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     LayerTreeSettings settings;
     settings.impl_side_painting = true;
 
@@ -6607,15 +6635,15 @@
 
   virtual ~SimpleSwapPromiseMonitor() {}
 
-  virtual void OnSetNeedsCommitOnMain() OVERRIDE {
+  virtual void OnSetNeedsCommitOnMain() override {
     (*set_needs_commit_count_)++;
   }
 
-  virtual void OnSetNeedsRedrawOnImpl() OVERRIDE {
+  virtual void OnSetNeedsRedrawOnImpl() override {
     (*set_needs_redraw_count_)++;
   }
 
-  virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE {
+  virtual void OnForwardScrollUpdateToMainThreadOnImpl() override {
     (*forward_to_main_count_)++;
   }
 
@@ -6715,7 +6743,7 @@
 
 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest {
  public:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     LayerTreeSettings settings = DefaultSettings();
     settings.calculate_top_controls_position = true;
     settings.top_controls_height = top_controls_height_;
@@ -7034,7 +7062,7 @@
 
 class LayerTreeHostImplWithImplicitLimitsTest : public LayerTreeHostImplTest {
  public:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     LayerTreeSettings settings = DefaultSettings();
     settings.max_memory_for_prepaint_percentage = 50;
     CreateHostImpl(settings, CreateOutputSurface());
@@ -7225,7 +7253,7 @@
 class LayerTreeHostImplCountingLostSurfaces : public LayerTreeHostImplTest {
  public:
   LayerTreeHostImplCountingLostSurfaces() : num_lost_surfaces_(0) {}
-  virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE {
+  virtual void DidLoseOutputSurfaceOnImplThread() override {
     num_lost_surfaces_++;
   }
 
diff --git a/cc/trees/layer_tree_host_perftest.cc b/cc/trees/layer_tree_host_perftest.cc
index 6e43ddf..a516a50 100644
--- a/cc/trees/layer_tree_host_perftest.cc
+++ b/cc/trees/layer_tree_host_perftest.cc
@@ -44,34 +44,34 @@
         measure_commit_cost_(false) {
   }
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->throttle_frame_production = false;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     BuildTree();
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     if (begin_frame_driven_drawing_ && !TestEnded()) {
       layer_tree_host()->SetNeedsAnimate();
       layer_tree_host()->SetNextCommitForcesRedraw();
     }
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
     if (measure_commit_cost_)
       commit_timer_.Start();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     if (measure_commit_cost_ && draw_timer_.IsWarmedUp()) {
       commit_timer_.NextLap();
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (TestEnded() || CleanUpStarted())
       return;
     draw_timer_.NextLap();
@@ -91,7 +91,7 @@
 
   virtual void BuildTree() {}
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     CHECK(!test_name_.empty()) << "Must SetTestName() before AfterTest().";
     perf_test::PrintResult("layer_tree_host_frame_time", "", test_name_,
                            1000 * draw_timer_.MsPerLap(), "us", true);
@@ -131,7 +131,7 @@
     ASSERT_TRUE(base::ReadFileToString(json_file, &json_));
   }
 
-  virtual void BuildTree() OVERRIDE {
+  virtual void BuildTree() override {
     gfx::Size viewport = gfx::Size(720, 1038);
     layer_tree_host()->SetViewportSize(viewport);
     scoped_refptr<Layer> root = ParseTreeFromJson(json_,
@@ -178,7 +178,7 @@
 class LayerTreeHostPerfTestLeafInvalidates
     : public LayerTreeHostPerfTestJsonReader {
  public:
-  virtual void BuildTree() OVERRIDE {
+  virtual void BuildTree() override {
     LayerTreeHostPerfTestJsonReader::BuildTree();
 
     // Find a leaf layer.
@@ -188,7 +188,7 @@
     }
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     if (TestEnded())
       return;
 
@@ -221,13 +221,13 @@
       : LayerTreeHostPerfTestJsonReader() {
   }
 
-  virtual void BuildTree() OVERRIDE {
+  virtual void BuildTree() override {
     LayerTreeHostPerfTestJsonReader::BuildTree();
     scrollable_ = layer_tree_host()->root_layer()->children()[1];
     ASSERT_TRUE(scrollable_.get());
   }
 
-  virtual void Layout() OVERRIDE {
+  virtual void Layout() override {
     if (TestEnded())
       return;
     static const gfx::Vector2d delta = gfx::Vector2d(0, 10);
@@ -262,7 +262,7 @@
         next_sync_point_(1),
         clean_up_started_(false) {}
 
-  virtual void BuildTree() OVERRIDE {
+  virtual void BuildTree() override {
     LayerTreeHostPerfTestJsonReader::BuildTree();
     tab_contents_ =
         static_cast<TextureLayer*>(
@@ -273,7 +273,7 @@
     ASSERT_TRUE(tab_contents_.get());
   }
 
-  virtual void WillCommit() OVERRIDE {
+  virtual void WillCommit() override {
     if (CleanUpStarted())
       return;
     gpu::Mailbox gpu_mailbox;
@@ -289,13 +289,13 @@
     tab_contents_->SetTextureMailbox(mailbox, callback.Pass());
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (CleanUpStarted())
       return;
     layer_tree_host()->SetNeedsCommit();
   }
 
-  virtual void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) override {
     clean_up_started_ = true;
     MainThreadTaskRunner()->PostTask(
         FROM_HERE,
@@ -310,7 +310,7 @@
     EndTest();
   }
 
-  virtual bool CleanUpStarted() OVERRIDE { return clean_up_started_; }
+  virtual bool CleanUpStarted() override { return clean_up_started_; }
 
  private:
   scoped_refptr<TextureLayer> tab_contents_;
diff --git a/cc/trees/layer_tree_host_pixeltest_filters.cc b/cc/trees/layer_tree_host_pixeltest_filters.cc
index 5303ed1..4afc4ec 100644
--- a/cc/trees/layer_tree_host_pixeltest_filters.cc
+++ b/cc/trees/layer_tree_host_pixeltest_filters.cc
@@ -159,12 +159,12 @@
 
 class LayerTreeHostFiltersScaledPixelTest
     : public LayerTreeHostFiltersPixelTest {
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // Required so that device scale is inherited by content scale.
     settings->layer_transforms_should_scale_layer_contents = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_);
     LayerTreePixelTest::SetupTree();
   }
diff --git a/cc/trees/layer_tree_host_pixeltest_masks.cc b/cc/trees/layer_tree_host_pixeltest_masks.cc
index 5d5022f..bd32119 100644
--- a/cc/trees/layer_tree_host_pixeltest_masks.cc
+++ b/cc/trees/layer_tree_host_pixeltest_masks.cc
@@ -22,14 +22,14 @@
   MaskContentLayerClient() {}
   virtual ~MaskContentLayerClient() {}
 
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
+  virtual void DidChangeLayerCanUseLCDText() override {}
 
-  virtual bool FillsBoundsCompletely() const OVERRIDE { return false; }
+  virtual bool FillsBoundsCompletely() const override { return false; }
 
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& rect,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {
+      ContentLayerClient::GraphicsContextStatus gc_status) override {
     SkPaint paint;
     paint.setStyle(SkPaint::kStroke_Style);
     paint.setStrokeWidth(SkIntToScalar(2));
diff --git a/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc b/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc
index 64b8bc3..fa94b0e 100644
--- a/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc
+++ b/cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc
@@ -8,7 +8,6 @@
 #include "cc/layers/picture_layer_impl.h"
 #include "cc/quads/draw_quad.h"
 #include "cc/test/layer_tree_pixel_test.h"
-#include "cc/test/mock_occlusion_tracker.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -22,11 +21,11 @@
 
 class LayerTreeHostOnDemandRasterPixelTest : public LayerTreePixelTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override {
     // Not enough memory available. Enforce on-demand rasterization.
     impl->SetMemoryPolicy(
         ManagedMemoryPolicy(1, gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING,
@@ -34,23 +33,20 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     // Find the PictureLayerImpl ask it to append quads to check their material.
     // The PictureLayerImpl is assumed to be the first child of the root layer
     // in the active tree.
     PictureLayerImpl* picture_layer = static_cast<PictureLayerImpl*>(
         host_impl->active_tree()->root_layer()->child_at(0));
 
-    MockOcclusionTracker<LayerImpl> occlusion_tracker;
     scoped_ptr<RenderPass> render_pass = RenderPass::Create();
 
     AppendQuadsData data;
-    picture_layer->AppendQuads(render_pass.get(), occlusion_tracker, &data);
+    picture_layer->AppendQuads(render_pass.get(), Occlusion(), &data);
 
-    for (QuadList::Iterator iter = render_pass->quad_list.begin();
-         iter != render_pass->quad_list.end();
-         ++iter)
-      EXPECT_EQ(iter->material, DrawQuad::PICTURE_CONTENT);
+    for (const auto& quad : render_pass->quad_list)
+      EXPECT_EQ(quad.material, DrawQuad::PICTURE_CONTENT);
 
     // Triggers pixel readback and ends the test.
     LayerTreePixelTest::SwapBuffersOnThread(host_impl, result);
@@ -64,14 +60,14 @@
   explicit BlueYellowLayerClient(gfx::Rect layer_rect)
       : layer_rect_(layer_rect) {}
 
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE { }
+  virtual void DidChangeLayerCanUseLCDText() override { }
 
-  virtual bool FillsBoundsCompletely() const OVERRIDE { return false; }
+  virtual bool FillsBoundsCompletely() const override { return false; }
 
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& clip,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {
+      ContentLayerClient::GraphicsContextStatus gc_status) override {
     SkPaint paint;
     paint.setColor(SK_ColorBLUE);
     canvas->drawRect(SkRect::MakeWH(layer_rect_.width(),
@@ -113,7 +109,7 @@
 
 class LayerTreeHostOnDemandRasterPixelTestWithGpuRasterizationForced
     : public LayerTreeHostOnDemandRasterPixelTest {
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     LayerTreeHostOnDemandRasterPixelTest::InitializeSettings(settings);
     settings->gpu_rasterization_forced = true;
   }
diff --git a/cc/trees/layer_tree_host_pixeltest_readback.cc b/cc/trees/layer_tree_host_pixeltest_readback.cc
index bbf9668..1b7679b 100644
--- a/cc/trees/layer_tree_host_pixeltest_readback.cc
+++ b/cc/trees/layer_tree_host_pixeltest_readback.cc
@@ -24,7 +24,7 @@
   LayerTreeHostReadbackPixelTest()
       : insert_copy_request_after_frame_count_(0) {}
 
-  virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest() OVERRIDE {
+  virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest() override {
     scoped_ptr<CopyOutputRequest> request;
 
     switch (test_type_) {
@@ -51,7 +51,7 @@
     return request.Pass();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     if (insert_copy_request_after_frame_count_ == 0) {
       Layer* const target =
           readback_target_ ? readback_target_ : layer_tree_host()->root_layer();
@@ -60,7 +60,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     if (insert_copy_request_after_frame_count_ ==
         layer_tree_host()->source_frame_number()) {
       Layer* const target =
@@ -920,17 +920,17 @@
         green_client_(SK_ColorGREEN),
         blue_client_(SK_ColorBLUE) {}
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // Cause the device scale factor to be inherited by contents scales.
     settings->layer_transforms_should_scale_layer_contents = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_);
     LayerTreePixelTest::SetupTree();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_EQ(device_scale_factor_,
               host_impl->active_tree()->device_scale_factor());
   }
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 054449f..be5967c 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -18,6 +18,7 @@
 #include "cc/layers/painted_scrollbar_layer.h"
 #include "cc/layers/picture_layer.h"
 #include "cc/layers/solid_color_layer.h"
+#include "cc/layers/video_layer.h"
 #include "cc/output/begin_frame_args.h"
 #include "cc/output/compositor_frame_ack.h"
 #include "cc/output/copy_output_request.h"
@@ -38,6 +39,7 @@
 #include "cc/test/fake_picture_layer_impl.h"
 #include "cc/test/fake_proxy.h"
 #include "cc/test/fake_scoped_ui_resource.h"
+#include "cc/test/fake_video_frame_provider.h"
 #include "cc/test/geometry_test_utils.h"
 #include "cc/test/layer_tree_test.h"
 #include "cc/test/test_shared_bitmap_manager.h"
@@ -73,22 +75,22 @@
  public:
   LayerTreeHostTestSetNeedsCommit1() : num_commits_(0), num_draws_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     num_draws_++;
     if (!impl->active_tree()->source_frame_number())
       EndTest();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     num_commits_++;
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_LE(1, num_commits_);
     EXPECT_LE(1, num_draws_);
   }
@@ -106,13 +108,13 @@
  public:
   LayerTreeHostTestSetNeedsCommit2() : num_commits_(0), num_draws_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     ++num_draws_;
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     ++num_commits_;
     switch (num_commits_) {
       case 1:
@@ -126,7 +128,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(2, num_commits_);
     EXPECT_LE(1, num_draws_);
   }
@@ -141,7 +143,7 @@
 // Verify that we pass property values in PushPropertiesTo.
 class LayerTreeHostTestPushPropertiesTo : public LayerTreeHostTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root = Layer::Create();
     root->SetBounds(gfx::Size(10, 10));
     layer_tree_host()->SetRootLayer(root);
@@ -156,16 +158,16 @@
     DONE,
   };
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     index_ = STARTUP;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     VerifyAfterValues(impl->active_tree()->root_layer());
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     SetBeforeValues(layer_tree_host()->root_layer());
     VerifyBeforeValues(layer_tree_host()->root_layer());
 
@@ -178,7 +180,7 @@
     SetAfterValues(layer_tree_host()->root_layer());
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   void VerifyBeforeValues(Layer* layer) {
     EXPECT_EQ(gfx::Size(10, 10).ToString(), layer->bounds().ToString());
@@ -237,9 +239,9 @@
  public:
   LayerTreeHostTestSetNeedsRedraw() : num_commits_(0), num_draws_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     EXPECT_EQ(0, impl->active_tree()->source_frame_number());
     if (!num_draws_) {
       // Redraw again to verify that the second redraw doesn't commit.
@@ -250,12 +252,12 @@
     num_draws_++;
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     EXPECT_EQ(0, num_draws_);
     num_commits_++;
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_GE(2, num_draws_);
     EXPECT_EQ(1, num_commits_);
   }
@@ -277,7 +279,7 @@
         invalid_rect_(10, 10, 20, 20),
         root_layer_(ContentLayer::Create(&client_)) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     root_layer_->SetIsDrawable(true);
     root_layer_->SetBounds(bounds_);
     layer_tree_host()->SetRootLayer(root_layer_);
@@ -288,7 +290,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     gfx::RectF root_damage_rect;
@@ -306,7 +308,7 @@
     return draw_result;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (!num_draws_) {
       PostSetNeedsRedrawRectToMainThread(invalid_rect_);
     } else {
@@ -315,7 +317,7 @@
     num_draws_++;
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(2, num_draws_); }
+  virtual void AfterTest() override { EXPECT_EQ(2, num_draws_); }
 
  private:
   int num_draws_;
@@ -329,11 +331,11 @@
 
 class LayerTreeHostTestNoExtraCommitFromInvalidate : public LayerTreeHostTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->layer_transforms_should_scale_layer_contents = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_layer_ = Layer::Create();
     root_layer_->SetBounds(gfx::Size(10, 20));
 
@@ -345,14 +347,14 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() == 1)
       EndTest();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // Changing the device scale factor causes a commit. It also changes
@@ -366,7 +368,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(gfx::Size(4, 4).ToString(),
               scaled_layer_->content_bounds().ToString());
   }
@@ -382,11 +384,11 @@
 class LayerTreeHostTestNoExtraCommitFromScrollbarInvalidate
     : public LayerTreeHostTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->layer_transforms_should_scale_layer_contents = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_layer_ = Layer::Create();
     root_layer_->SetBounds(gfx::Size(10, 20));
 
@@ -403,14 +405,14 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() == 1)
       EndTest();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // Changing the device scale factor causes a commit. It also changes
@@ -424,7 +426,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(gfx::Size(40, 40).ToString(),
               scrollbar_->content_bounds().ToString());
   }
@@ -446,7 +448,7 @@
         invalid_rect_(10, 10, 20, 20),
         root_layer_(ContentLayer::Create(&client_)) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     root_layer_->SetIsDrawable(true);
     root_layer_->SetBounds(bounds_);
     layer_tree_host()->SetRootLayer(root_layer_);
@@ -454,7 +456,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     if (num_draws_ == 3 && host_impl->settings().impl_side_painting)
       host_impl->SetNeedsRedrawRect(invalid_rect_);
   }
@@ -462,7 +464,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     gfx::RectF root_damage_rect;
@@ -490,7 +492,7 @@
     return draw_result;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     switch (num_draws_) {
       case 0:
       case 1:
@@ -517,7 +519,7 @@
     num_draws_++;
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(5, num_draws_); }
+  virtual void AfterTest() override { EXPECT_EQ(5, num_draws_); }
 
  private:
   int num_draws_;
@@ -536,7 +538,7 @@
   LayerTreeHostTestUndrawnLayersDamageLater()
       : root_layer_(ContentLayer::Create(&client_)) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_layer_->SetIsDrawable(true);
     root_layer_->SetBounds(gfx::Size(50, 50));
     layer_tree_host()->SetRootLayer(root_layer_);
@@ -555,12 +557,12 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     gfx::RectF root_damage_rect;
@@ -588,7 +590,7 @@
     return draw_result;
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // Test not owning the surface.
@@ -610,7 +612,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   FakeContentLayerClient client_;
@@ -630,7 +632,7 @@
   LayerTreeHostTestUndrawnLayersPushContentBoundsLater()
       : root_layer_(Layer::Create()) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_layer_->SetIsDrawable(true);
     root_layer_->SetBounds(gfx::Size(20, 20));
     layer_tree_host()->SetRootLayer(root_layer_);
@@ -647,9 +649,9 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     LayerImpl* root = host_impl->active_tree()->root_layer();
     LayerImpl* parent = root->children()[0];
     LayerImpl* child = parent->children()[0];
@@ -669,7 +671,7 @@
     }
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         parent_layer_->SetOpacity(1.0f);
@@ -681,7 +683,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   scoped_refptr<Layer> root_layer_;
@@ -698,21 +700,21 @@
  public:
   LayerTreeHostTestCommit() {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size(20, 20));
     layer_tree_host()->set_background_color(SK_ColorGRAY);
 
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     EXPECT_EQ(gfx::Size(20, 20), impl->DrawViewportSize());
     EXPECT_EQ(SK_ColorGRAY, impl->active_tree()->background_color());
 
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 };
 
 MULTI_THREAD_TEST_F(LayerTreeHostTestCommit);
@@ -726,20 +728,20 @@
   LayerTreeHostTestFrameTimeUpdatesAfterActivationFails()
       : frame_count_with_pending_tree_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size(20, 20));
     layer_tree_host()->set_background_color(SK_ColorGRAY);
 
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override {
     EXPECT_EQ(frame_count_with_pending_tree_, 0);
     impl->BlockNotifyReadyToActivateForTesting(true);
   }
 
   virtual void WillBeginImplFrameOnThread(LayerTreeHostImpl* impl,
-                                          const BeginFrameArgs& args) OVERRIDE {
+                                          const BeginFrameArgs& args) override {
     if (impl->pending_tree())
       frame_count_with_pending_tree_++;
 
@@ -751,7 +753,7 @@
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (frame_count_with_pending_tree_ > 1) {
       EXPECT_NE(first_frame_time_.ToInternalValue(), 0);
       EXPECT_NE(first_frame_time_.ToInternalValue(),
@@ -763,12 +765,12 @@
     EXPECT_FALSE(impl->settings().impl_side_painting);
     EndTest();
   }
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     if (impl->settings().impl_side_painting)
       EXPECT_NE(frame_count_with_pending_tree_, 1);
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int frame_count_with_pending_tree_;
@@ -784,14 +786,14 @@
  public:
   LayerTreeHostTestFrameTimeUpdatesAfterDraw() : frame_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size(20, 20));
     layer_tree_host()->set_background_color(SK_ColorGRAY);
 
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     frame_++;
     if (frame_ == 1) {
       first_frame_time_ = impl->CurrentBeginFrameArgs().frame_time;
@@ -809,7 +811,7 @@
     EndTest();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     // Ensure there isn't a commit between the two draws, to ensure that a
     // commit isn't required for updating the current frame time. We can
     // only check for this in the multi-threaded case, since in the single-
@@ -818,7 +820,7 @@
       EXPECT_EQ(0, frame_);
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int frame_;
@@ -833,7 +835,7 @@
  public:
   LayerTreeHostTestStartPageScaleAnimation() {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
 
     if (layer_tree_host()->settings().impl_side_painting) {
@@ -859,18 +861,18 @@
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.5f, 2.f);
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float scale,
-                                   float) OVERRIDE {
+                                   float) override {
     gfx::ScrollOffset offset = scroll_layer_->scroll_offset();
     scroll_layer_->SetScrollOffset(ScrollOffsetWithDelta(offset,
                                                          scroll_delta));
     layer_tree_host()->SetPageScaleFactorAndLimits(scale, 0.5f, 2.f);
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     // We get one commit before the first draw, and the animation doesn't happen
     // until the second draw.
     switch (impl->active_tree()->source_frame_number()) {
@@ -890,7 +892,7 @@
     }
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         layer_tree_host()->StartPageScaleAnimation(
@@ -899,7 +901,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   scoped_refptr<Layer> scroll_layer_;
@@ -911,7 +913,7 @@
  public:
   LayerTreeHostTestSetVisible() : num_draws_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
     PostSetVisibleToMainThread(false);
     // This is suppressed while we're invisible.
@@ -920,13 +922,13 @@
     PostSetVisibleToMainThread(true);
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     EXPECT_TRUE(impl->visible());
     ++num_draws_;
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, num_draws_); }
+  virtual void AfterTest() override { EXPECT_EQ(1, num_draws_); }
 
  private:
   int num_draws_;
@@ -943,13 +945,13 @@
   virtual void PaintContents(
       SkCanvas* canvas,
       const gfx::Rect& clip,
-      ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {
+      ContentLayerClient::GraphicsContextStatus gc_status) override {
     // Set layer opacity to 0.
     if (test_layer_)
       test_layer_->SetOpacity(0.f);
   }
-  virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
-  virtual bool FillsBoundsCompletely() const OVERRIDE { return false; }
+  virtual void DidChangeLayerCanUseLCDText() override {}
+  virtual bool FillsBoundsCompletely() const override { return false; }
 
  private:
   Layer* test_layer_;
@@ -966,7 +968,7 @@
   void ResetPaintContentsCount() { paint_contents_count_ = 0; }
 
   virtual bool Update(ResourceUpdateQueue* queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE {
+                      const OcclusionTracker<Layer>* occlusion) override {
     bool updated = ContentLayer::Update(queue, occlusion);
     paint_contents_count_++;
     return updated;
@@ -994,18 +996,18 @@
     test_opacity_change_delegate_.SetTestLayer(update_check_layer_.get());
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size(10, 10));
     layer_tree_host()->root_layer()->AddChild(update_check_layer_);
 
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // Update() should have been called once.
     EXPECT_EQ(1, update_check_layer_->PaintContentsCount());
   }
@@ -1026,7 +1028,7 @@
   virtual void CalculateContentsScale(float ideal_contents_scale,
                                       float* contents_scale_x,
                                       float* contents_scale_y,
-                                      gfx::Size* contentBounds) OVERRIDE {
+                                      gfx::Size* contentBounds) override {
     // Skip over the ContentLayer's method to the base Layer class.
     Layer::CalculateContentsScale(ideal_contents_scale,
                                   contents_scale_x,
@@ -1047,7 +1049,7 @@
       : root_layer_(NoScaleContentLayer::Create(&client_)),
         child_layer_(ContentLayer::Create(&client_)) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size(60, 60));
     layer_tree_host()->SetDeviceScaleFactor(1.5);
     EXPECT_EQ(gfx::Size(60, 60), layer_tree_host()->device_viewport_size());
@@ -1066,7 +1068,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     // Should only do one commit.
     EXPECT_EQ(0, impl->active_tree()->source_frame_number());
     // Device scale factor should come over to impl.
@@ -1132,7 +1134,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   FakeContentLayerClient client_;
@@ -1145,7 +1147,7 @@
 // Verify atomicity of commits and reuse of textures.
 class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->texture_id_allocation_chunk_size = 1;
     // Make sure partial texture updates are turned off.
     settings->max_partial_texture_updates = 0;
@@ -1153,7 +1155,7 @@
     settings->scrollbar_animator = LayerTreeSettings::NoAnimator;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     layer_ = FakeContentLayer::Create(&client_);
     layer_->SetBounds(gfx::Size(10, 20));
 
@@ -1170,12 +1172,12 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     drew_frame_ = -1;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates);
 
     TestWebGraphicsContext3D* context = TestContext();
@@ -1216,7 +1218,7 @@
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     TestWebGraphicsContext3D* context = TestContext();
 
     if (drew_frame_ == impl->active_tree()->source_frame_number()) {
@@ -1233,12 +1235,12 @@
       PostSetNeedsCommitToMainThread();
   }
 
-  virtual void Layout() OVERRIDE {
+  virtual void Layout() override {
     layer_->SetNeedsDisplay();
     scrollbar_->SetNeedsDisplay();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  protected:
   FakeContentLayerClient client_;
@@ -1253,7 +1255,7 @@
 class LayerTreeHostTestDelegatingRendererAtomicCommit
     : public LayerTreeHostTestDirectRendererAtomicCommit {
  public:
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates);
 
     TestWebGraphicsContext3D* context = TestContext();
@@ -1320,7 +1322,7 @@
 class LayerTreeHostTestAtomicCommitWithPartialUpdate
     : public LayerTreeHostTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->texture_id_allocation_chunk_size = 1;
     // Allow one partial texture update.
     settings->max_partial_texture_updates = 1;
@@ -1328,7 +1330,7 @@
     settings->impl_side_painting = false;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     parent_ = FakeContentLayer::Create(&client_);
     parent_->SetBounds(gfx::Size(10, 20));
 
@@ -1342,9 +1344,9 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         parent_->SetNeedsDisplay();
@@ -1371,7 +1373,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     ASSERT_EQ(1u, layer_tree_host()->settings().max_partial_texture_updates);
 
     TestWebGraphicsContext3D* context = TestContext();
@@ -1461,7 +1463,7 @@
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     EXPECT_LT(impl->active_tree()->source_frame_number(), 5);
 
     TestWebGraphicsContext3D* context = TestContext();
@@ -1478,7 +1480,7 @@
     context->ResetUsedTextures();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   FakeContentLayerClient client_;
@@ -1493,7 +1495,7 @@
 class LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit
     : public LayerTreeHostTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_layer_ = FakeContentLayer::Create(&client_);
     root_layer_->SetBounds(gfx::Size(100, 100));
 
@@ -1519,9 +1521,9 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     Renderer* renderer = host_impl->renderer();
     RenderPassId surface1_render_pass_id = host_impl->active_tree()
                                                ->root_layer()
@@ -1558,12 +1560,12 @@
     }
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     if (layer_tree_host()->source_frame_number() < 2)
       root_layer_->SetNeedsDisplay();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_LE(2u, root_layer_->update_count());
     EXPECT_LE(2u, surface_layer1_->update_count());
     EXPECT_LE(2u, surface_layer2_->update_count());
@@ -1588,13 +1590,13 @@
   }
 
   virtual bool Update(ResourceUpdateQueue*,
-                      const OcclusionTracker<Layer>*) OVERRIDE;
-  virtual bool DrawsContent() const OVERRIDE { return true; }
+                      const OcclusionTracker<Layer>*) override;
+  virtual bool DrawsContent() const override { return true; }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE;
-  virtual void PushPropertiesTo(LayerImpl* impl) OVERRIDE;
-  virtual void SetTexturePriorities(const PriorityCalculator&) OVERRIDE;
+      override;
+  virtual void PushPropertiesTo(LayerImpl* impl) override;
+  virtual void SetTexturePriorities(const PriorityCalculator&) override;
 
   bool HaveBackingTexture() const {
     return texture_.get() ? texture_->have_backing_texture() : false;
@@ -1626,8 +1628,8 @@
   virtual ~EvictionTestLayerImpl() {}
 
   virtual void AppendQuads(RenderPass* render_pass,
-                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                           AppendQuadsData* append_quads_data) OVERRIDE {
+                           const Occlusion& occlusion_in_content_space,
+                           AppendQuadsData* append_quads_data) override {
     ASSERT_TRUE(has_texture_);
     ASSERT_NE(0u, layer_tree_impl()->resource_provider()->num_resources());
   }
@@ -1681,7 +1683,7 @@
         impl_for_evict_textures_(0),
         num_commits_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetRootLayer(layer_);
     layer_tree_host()->SetViewportSize(gfx::Size(10, 20));
 
@@ -1731,7 +1733,7 @@
   // the beginFrame/commit pair.
   // Commits 5+6 test the path where an eviction happens during the eviction
   // recovery path.
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (num_commits_) {
       case 1:
         EXPECT_TRUE(layer_->HaveBackingTexture());
@@ -1759,11 +1761,11 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     impl_for_evict_textures_ = impl;
   }
 
-  virtual void Layout() OVERRIDE {
+  virtual void Layout() override {
     ++num_commits_;
     switch (num_commits_) {
       case 1:
@@ -1792,7 +1794,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   FakeContentLayerClient client_;
@@ -1808,7 +1810,7 @@
   LayerTreeHostTestContinuousInvalidate()
       : num_commit_complete_(0), num_draw_layers_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size(10, 10));
     layer_tree_host()->root_layer()->SetBounds(gfx::Size(10, 10));
 
@@ -1821,24 +1823,24 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     if (num_draw_layers_ == 2)
       return;
     content_layer_->SetNeedsDisplay();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     if (num_draw_layers_ == 1)
       num_commit_complete_++;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     num_draw_layers_++;
     if (num_draw_layers_ == 2)
       EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // Check that we didn't commit twice between first and second draw.
     EXPECT_EQ(1, num_commit_complete_);
   }
@@ -1857,14 +1859,14 @@
   LayerTreeHostTestDeferCommits()
       : num_commits_deferred_(0), num_complete_commits_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidDeferCommit() OVERRIDE {
+  virtual void DidDeferCommit() override {
     num_commits_deferred_++;
     layer_tree_host()->SetDeferCommits(false);
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     num_complete_commits_++;
     switch (num_complete_commits_) {
       case 1:
@@ -1881,7 +1883,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(1, num_commits_deferred_);
     EXPECT_EQ(2, num_complete_commits_);
   }
@@ -2054,7 +2056,7 @@
         child_layer2_(FakeContentLayer::Create(&client_)),
         num_commits_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size(100, 100));
     root_layer_->SetBounds(gfx::Size(100, 100));
     child_layer1_->SetBounds(gfx::Size(100, 100));
@@ -2066,7 +2068,7 @@
   }
 
   virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl,
-                                       bool visible) OVERRIDE {
+                                       bool visible) override {
     if (visible) {
       // One backing should remain unevicted.
       EXPECT_EQ(
@@ -2084,7 +2086,7 @@
     EndTest();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     ++num_commits_;
     switch (num_commits_) {
       case 1:
@@ -2116,7 +2118,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   FakeContentLayerClient client_;
@@ -2143,14 +2145,14 @@
     virtual void PaintContents(
         SkCanvas* canvas,
         const gfx::Rect& clip,
-        ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {
+        ContentLayerClient::GraphicsContextStatus gc_status) override {
       ++paint_count_;
     }
-    virtual void DidChangeLayerCanUseLCDText() OVERRIDE {
+    virtual void DidChangeLayerCanUseLCDText() override {
       ++lcd_notification_count_;
       layer_->SetNeedsDisplay();
     }
-    virtual bool FillsBoundsCompletely() const OVERRIDE { return false; }
+    virtual bool FillsBoundsCompletely() const override { return false; }
 
    private:
     Layer* layer_;
@@ -2158,7 +2160,7 @@
     int lcd_notification_count_;
   };
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root_layer;
     if (layer_tree_host()->settings().impl_side_painting)
       root_layer = PictureLayer::Create(&client_);
@@ -2178,10 +2180,10 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
-  virtual void AfterTest() OVERRIDE {}
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+  virtual void AfterTest() override {}
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // The first update consists of one LCD notification and one paint.
@@ -2226,11 +2228,11 @@
 // Verify that the BeginFrame notification is used to initiate rendering.
 class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->begin_frame_scheduling_enabled = true;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     // This will trigger a SetNeedsBeginFrame which will trigger a
     // BeginFrame.
     PostSetNeedsCommitToMainThread();
@@ -2239,12 +2241,12 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EndTest();
     return DRAW_SUCCESS;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   base::TimeTicks frame_time_;
@@ -2255,14 +2257,14 @@
 class LayerTreeHostTestBeginFrameNotificationShutdownWhileEnabled
     : public LayerTreeHostTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->begin_frame_scheduling_enabled = true;
     settings->using_synchronous_renderer_compositor = true;
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     // The BeginFrame notification is turned off now but will get enabled
     // once we return. End test while it's enabled.
     ImplThreadTaskRunner()->PostTask(
@@ -2271,7 +2273,7 @@
                    base::Unretained(this)));
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 };
 
 MULTI_THREAD_TEST_F(
@@ -2282,13 +2284,13 @@
   LayerTreeHostTestAbortedCommitDoesntStall()
       : commit_count_(0), commit_abort_count_(0), commit_complete_count_(0) {}
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->begin_frame_scheduling_enabled = true;
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     commit_count_++;
     if (commit_count_ == 4) {
       // After two aborted commits, request a real commit now to make sure a
@@ -2299,13 +2301,13 @@
   }
 
   virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
-                                             bool did_handle) OVERRIDE {
+                                             bool did_handle) override {
     commit_abort_count_++;
     // Initiate another abortable commit.
     host_impl->SetNeedsCommit();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     commit_complete_count_++;
     if (commit_complete_count_ == 1) {
       // Initiate an abortable commit after the first commit.
@@ -2315,7 +2317,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(commit_count_, 5);
     EXPECT_EQ(commit_abort_count_, 3);
     EXPECT_EQ(commit_complete_count_, 2);
@@ -2328,7 +2330,7 @@
 
 class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor
     : public LayerTreeHostTestAbortedCommitDoesntStall {
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings);
     settings->using_synchronous_renderer_compositor = true;
   }
@@ -2339,7 +2341,7 @@
 
 class LayerTreeHostTestAbortedCommitDoesntStallDisabledVsync
     : public LayerTreeHostTestAbortedCommitDoesntStall {
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings);
     settings->throttle_frame_production = false;
   }
@@ -2350,11 +2352,11 @@
 class LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation
     : public LayerTreeHostTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
 
     scoped_refptr<Layer> layer = PictureLayer::Create(&client_);
@@ -2363,13 +2365,13 @@
     layer_tree_host()->root_layer()->AddChild(layer);
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
 };
@@ -2389,13 +2391,13 @@
     virtual void PaintContents(
         SkCanvas* canvas,
         const gfx::Rect& clip,
-        ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {
+        ContentLayerClient::GraphicsContextStatus gc_status) override {
       layer_->SetBounds(gfx::Size(2, 2));
     }
 
-    virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
+    virtual void DidChangeLayerCanUseLCDText() override {}
 
-    virtual bool FillsBoundsCompletely() const OVERRIDE { return false; }
+    virtual bool FillsBoundsCompletely() const override { return false; }
 
    private:
     Layer* layer_;
@@ -2403,7 +2405,7 @@
 
   LayerTreeHostTestChangeLayerPropertiesInPaintContents() : num_commits_(0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<ContentLayer> root_layer = ContentLayer::Create(&client_);
     root_layer->SetIsDrawable(true);
     root_layer->SetBounds(gfx::Size(1, 1));
@@ -2414,10 +2416,10 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
-  virtual void AfterTest() OVERRIDE {}
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+  virtual void AfterTest() override {}
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     num_commits_++;
     if (num_commits_ == 1) {
       LayerImpl* root_layer = host_impl->active_tree()->root_layer();
@@ -2443,7 +2445,7 @@
     test_capabilities_.gpu.texture_rectangle = true;
   }
 
-  virtual GLuint createTexture() OVERRIDE {
+  virtual GLuint createTexture() override {
     return 1;
   }
   MOCK_METHOD1(activeTexture, void(GLenum texture));
@@ -2469,7 +2471,7 @@
 class LayerTreeHostTestIOSurfaceDrawing : public LayerTreeHostTest {
  protected:
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     scoped_ptr<MockIOSurfaceWebGraphicsContext3D> mock_context_owned(
         new MockIOSurfaceWebGraphicsContext3D);
     mock_context_ = mock_context_owned.get();
@@ -2480,7 +2482,7 @@
       return FakeOutputSurface::Create3d(mock_context_owned.Pass());
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
 
     layer_tree_host()->root_layer()->SetIsDrawable(false);
@@ -2496,9 +2498,9 @@
     layer_tree_host()->root_layer()->AddChild(io_surface_layer);
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_EQ(0u, host_impl->resource_provider()->num_resources());
     // In WillDraw, the IOSurfaceLayer sets up the io surface texture.
 
@@ -2539,7 +2541,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     Mock::VerifyAndClearExpectations(&mock_context_);
     ResourceProvider* resource_provider = host_impl->resource_provider();
     EXPECT_EQ(1u, resource_provider->num_resources());
@@ -2571,14 +2573,14 @@
     return draw_result;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     Mock::VerifyAndClearExpectations(&mock_context_);
 
     EXPECT_CALL(*mock_context_, deleteTexture(1)).Times(AtLeast(1));
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int io_surface_id_;
   MockIOSurfaceWebGraphicsContext3D* mock_context_;
@@ -2589,7 +2591,7 @@
 
 class LayerTreeHostTestNumFramesPending : public LayerTreeHostTest {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     frame_ = 0;
     PostSetNeedsCommitToMainThread();
   }
@@ -2598,7 +2600,7 @@
   // Round 2: commit only (no draw/swap)
   // Round 3: draw only (no commit)
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     int commit = layer_tree_host()->source_frame_number();
     switch (commit) {
       case 2:
@@ -2609,7 +2611,7 @@
     }
   }
 
-  virtual void DidCompleteSwapBuffers() OVERRIDE {
+  virtual void DidCompleteSwapBuffers() override {
     int commit = layer_tree_host()->source_frame_number();
     ++frame_;
     switch (frame_) {
@@ -2626,7 +2628,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  protected:
   int frame_;
@@ -2643,12 +2645,12 @@
 
 class LayerTreeHostTestDeferredInitialize : public LayerTreeHostTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // PictureLayer can only be used with impl side painting enabled.
     settings->impl_side_painting = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     layer_ = FakePictureLayer::Create(&client_);
     // Force commits to not be aborted so new frames get drawn, otherwise
     // the renderer gets deferred initialized but nothing new needs drawing.
@@ -2657,7 +2659,7 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     did_initialize_gl_ = false;
     did_release_gl_ = false;
     last_source_frame_number_drawn_ = -1;  // Never drawn.
@@ -2665,7 +2667,7 @@
   }
 
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     scoped_ptr<TestWebGraphicsContext3D> context3d(
         TestWebGraphicsContext3D::Create());
 
@@ -2674,7 +2676,7 @@
         delegating_renderer());
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     ASSERT_TRUE(host_impl->RootLayer());
     FakePictureLayerImpl* layer_impl =
         static_cast<FakePictureLayerImpl*>(host_impl->RootLayer());
@@ -2731,7 +2733,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ASSERT_TRUE(result);
     DelegatedFrameData* delegated_frame_data =
         output_surface()->last_sent_frame().delegated_frame_data.get();
@@ -2748,7 +2750,7 @@
     host_impl->ReclaimResources(&ack);
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_TRUE(did_initialize_gl_);
     EXPECT_TRUE(did_release_gl_);
   }
@@ -2765,7 +2767,7 @@
 
 class LayerTreeHostTestDeferredInitializeWithGpuRasterization
     : public LayerTreeHostTestDeferredInitialize {
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // PictureLayer can only be used with impl side painting enabled.
     settings->impl_side_painting = true;
     settings->gpu_rasterization_enabled = true;
@@ -2780,13 +2782,13 @@
  public:
   LayerTreeHostTestUIResource() : num_ui_resources_(0) {}
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->texture_id_allocation_chunk_size = 1;
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     int frame = layer_tree_host()->source_frame_number();
     switch (frame) {
       case 1:
@@ -2847,17 +2849,17 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     if (!layer_tree_host()->settings().impl_side_painting)
       PerformTest(impl);
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     if (layer_tree_host()->settings().impl_side_painting)
       PerformTest(impl);
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   // Must clear all resources before exiting.
@@ -2886,7 +2888,7 @@
 
   virtual ~PushPropertiesCountingLayerImpl() {}
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE {
+  virtual void PushPropertiesTo(LayerImpl* layer) override {
     LayerImpl::PushPropertiesTo(layer);
     push_properties_count_++;
     // Push state to the active tree because we can only access it from there.
@@ -2895,7 +2897,7 @@
   }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE {
+      override {
     return PushPropertiesCountingLayerImpl::Create(tree_impl, id());
   }
 
@@ -2918,7 +2920,7 @@
     return new PushPropertiesCountingLayer();
   }
 
-  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE {
+  virtual void PushPropertiesTo(LayerImpl* layer) override {
     Layer::PushPropertiesTo(layer);
     push_properties_count_++;
     if (persist_needs_push_properties_)
@@ -2926,7 +2928,7 @@
   }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE {
+      override {
     return PushPropertiesCountingLayerImpl::Create(tree_impl, id());
   }
 
@@ -2952,7 +2954,7 @@
 
 class LayerTreeHostTestLayersPushProperties : public LayerTreeHostTest {
  protected:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     num_commits_ = 0;
     expected_push_properties_root_ = 0;
     expected_push_properties_child_ = 0;
@@ -2963,7 +2965,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = PushPropertiesCountingLayer::Create();
     child_ = PushPropertiesCountingLayer::Create();
     child2_ = PushPropertiesCountingLayer::Create();
@@ -2982,7 +2984,7 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     ++num_commits_;
 
     EXPECT_EQ(expected_push_properties_root_, root_->push_properties_count());
@@ -3122,7 +3124,7 @@
       ++expected_push_properties_leaf_layer_;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int num_commits_;
   FakeContentLayerClient client_;
@@ -3145,7 +3147,7 @@
 class LayerTreeHostTestImplLayersPushProperties
     : public LayerTreeHostTestLayersPushProperties {
  protected:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     expected_push_properties_root_impl_ = 0;
     expected_push_properties_child_impl_ = 0;
     expected_push_properties_grandchild_impl_ = 0;
@@ -3154,7 +3156,7 @@
     LayerTreeHostTestLayersPushProperties::BeginTest();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     // These commits are in response to the changes made in
     // LayerTreeHostTestLayersPushProperties::DidCommitAndDrawFrame()
     switch (num_commits_) {
@@ -3345,9 +3347,9 @@
 class LayerTreeHostTestPropertyChangesDuringUpdateArePushed
     : public LayerTreeHostTest {
  protected:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = Layer::Create();
     root_->SetBounds(gfx::Size(1, 1));
 
@@ -3362,7 +3364,7 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 0:
         break;
@@ -3391,7 +3393,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   scoped_refptr<Layer> root_;
   scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer_;
@@ -3401,9 +3403,9 @@
 
 class LayerTreeHostTestSetDrawableCausesCommit : public LayerTreeHostTest {
  protected:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = PushPropertiesCountingLayer::Create();
     child_ = PushPropertiesCountingLayer::Create();
     root_->AddChild(child_);
@@ -3412,7 +3414,7 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 0:
         break;
@@ -3444,7 +3446,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   scoped_refptr<PushPropertiesCountingLayer> root_;
   scoped_refptr<PushPropertiesCountingLayer> child_;
@@ -3455,7 +3457,7 @@
 class LayerTreeHostTestCasePushPropertiesThreeGrandChildren
     : public LayerTreeHostTest {
  protected:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     expected_push_properties_root_ = 0;
     expected_push_properties_child_ = 0;
     expected_push_properties_grandchild1_ = 0;
@@ -3464,7 +3466,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = PushPropertiesCountingLayer::Create();
     child_ = PushPropertiesCountingLayer::Create();
     grandchild1_ = PushPropertiesCountingLayer::Create();
@@ -3480,7 +3482,7 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   scoped_refptr<PushPropertiesCountingLayer> root_;
@@ -3498,7 +3500,7 @@
 class LayerTreeHostTestPushPropertiesAddingToTreeRequiresPush
     : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren {
  protected:
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     int last_source_frame_number = layer_tree_host()->source_frame_number() - 1;
     switch (last_source_frame_number) {
       case 0:
@@ -3538,7 +3540,7 @@
 class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion
     : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren {
  protected:
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     int last_source_frame_number = layer_tree_host()->source_frame_number() - 1;
     switch (last_source_frame_number) {
       case 0:
@@ -3621,7 +3623,7 @@
 class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursionWithPersistence
     : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren {
  protected:
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     int last_source_frame_number = layer_tree_host()->source_frame_number() - 1;
     switch (last_source_frame_number) {
       case 0:
@@ -3669,7 +3671,7 @@
 class LayerTreeHostTestPushPropertiesSetPropertiesWhileOutsideTree
     : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren {
  protected:
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     int last_source_frame_number = layer_tree_host()->source_frame_number() - 1;
     switch (last_source_frame_number) {
       case 0:
@@ -3737,7 +3739,7 @@
 class LayerTreeHostTestPushPropertiesSetPropertyInParentThenChild
     : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren {
  protected:
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     int last_source_frame_number = layer_tree_host()->source_frame_number() - 1;
     switch (last_source_frame_number) {
       case 0:
@@ -3801,7 +3803,7 @@
 class LayerTreeHostTestPushPropertiesSetPropertyInChildThenParent
     : public LayerTreeHostTestCasePushPropertiesThreeGrandChildren {
  protected:
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     int last_source_frame_number = layer_tree_host()->source_frame_number() - 1;
     switch (last_source_frame_number) {
       case 0:
@@ -3868,7 +3870,7 @@
   LayerTreeHostTestTreeActivationCallback()
       : num_commits_(0), callback_count_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     EXPECT_TRUE(HasImplThread());
     PostSetNeedsCommitToMainThread();
   }
@@ -3876,7 +3878,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     ++num_commits_;
     switch (num_commits_) {
       case 1:
@@ -3905,7 +3907,7 @@
         host_impl, frame_data, draw_result);
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(3, num_commits_); }
+  virtual void AfterTest() override { EXPECT_EQ(3, num_commits_); }
 
   void SetCallback(bool enable) {
     output_surface()->SetTreeActivationCallback(
@@ -3934,7 +3936,7 @@
  public:
   LayerInvalidateCausesDraw() : num_commits_(0), num_draws_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     ASSERT_TRUE(!!invalidate_layer_.get())
         << "Derived tests must set this in SetupTree";
 
@@ -3942,23 +3944,23 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     // After commit, invalidate the layer.  This should cause a commit.
     if (layer_tree_host()->source_frame_number() == 1)
       invalidate_layer_->SetNeedsDisplay();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     num_draws_++;
     if (impl->active_tree()->source_frame_number() == 1)
       EndTest();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     num_commits_++;
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_GE(2, num_commits_);
     EXPECT_GE(2, num_draws_);
   }
@@ -3971,13 +3973,35 @@
   int num_draws_;
 };
 
+// VideoLayer must support being invalidated and then passing that along
+// to the compositor thread, even though no resources are updated in
+// response to that invalidation.
+class LayerTreeHostTestVideoLayerInvalidate : public LayerInvalidateCausesDraw {
+ public:
+  virtual void SetupTree() override {
+    LayerTreeHostTest::SetupTree();
+    scoped_refptr<VideoLayer> video_layer =
+        VideoLayer::Create(&provider_, media::VIDEO_ROTATION_0);
+    video_layer->SetBounds(gfx::Size(10, 10));
+    video_layer->SetIsDrawable(true);
+    layer_tree_host()->root_layer()->AddChild(video_layer);
+
+    invalidate_layer_ = video_layer;
+  }
+
+ private:
+  FakeVideoFrameProvider provider_;
+};
+
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestVideoLayerInvalidate);
+
 // IOSurfaceLayer must support being invalidated and then passing that along
 // to the compositor thread, even though no resources are updated in
 // response to that invalidation.
 class LayerTreeHostTestIOSurfaceLayerInvalidate
     : public LayerInvalidateCausesDraw {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
     scoped_refptr<IOSurfaceLayer> layer = IOSurfaceLayer::Create();
     layer->SetBounds(gfx::Size(10, 10));
@@ -3996,7 +4020,7 @@
 
 class LayerTreeHostTestPushHiddenLayer : public LayerTreeHostTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_layer_ = Layer::Create();
     root_layer_->SetPosition(gfx::Point());
     root_layer_->SetBounds(gfx::Size(10, 10));
@@ -4017,9 +4041,9 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // The layer type used does not need to push properties every frame.
@@ -4039,7 +4063,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* root = impl->active_tree()->root_layer();
     LayerImpl* parent = root->children()[0];
     LayerImpl* child = parent->children()[0];
@@ -4051,7 +4075,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   scoped_refptr<Layer> root_layer_;
   scoped_refptr<SolidColorLayer> parent_layer_;
@@ -4062,11 +4086,11 @@
 
 class LayerTreeHostTestUpdateLayerInEmptyViewport : public LayerTreeHostTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_layer_ = FakePictureLayer::Create(&client_);
     root_layer_->SetBounds(gfx::Size(10, 10));
 
@@ -4074,21 +4098,21 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     // The viewport is empty, but we still need to update layers on the main
     // thread.
     layer_tree_host()->SetViewportSize(gfx::Size(0, 0));
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     // The layer should be updated even though the viewport is empty, so we
     // are capable of drawing it on the impl tree.
     EXPECT_GT(root_layer_->update_count(), 0u);
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   scoped_refptr<FakePictureLayer> root_layer_;
@@ -4102,7 +4126,7 @@
       : num_will_begin_main_frames_(0), num_impl_commits_(0) {}
 
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<SolidColorLayer> root_layer = SolidColorLayer::Create();
     root_layer->SetBounds(gfx::Size(200, 200));
     root_layer->SetIsDrawable(true);
@@ -4111,9 +4135,9 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void WillBeginMainFrame() OVERRIDE {
+  virtual void WillBeginMainFrame() override {
     num_will_begin_main_frames_++;
     switch (num_will_begin_main_frames_) {
       case 2:
@@ -4124,11 +4148,11 @@
     }
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override {
     num_impl_commits_++;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     switch (impl->SourceAnimationFrameNumber()) {
       case 1:
         // Prevent draws until commit.
@@ -4143,7 +4167,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // Ensure that the commit was truly aborted.
     EXPECT_EQ(2, num_will_begin_main_frames_);
     EXPECT_EQ(1, num_impl_commits_);
@@ -4159,12 +4183,12 @@
 
 class LayerTreeHostTestMaxTransferBufferUsageBytes : public LayerTreeHostTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     scoped_refptr<TestContextProvider> context_provider =
         TestContextProvider::Create();
     context_provider->SetMaxTransferBufferUsageBytes(1024 * 1024);
@@ -4174,7 +4198,7 @@
       return FakeOutputSurface::Create3d(context_provider);
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     client_.set_fill_with_nonsolid_color(true);
     scoped_refptr<FakePictureLayer> root_layer =
         FakePictureLayer::Create(&client_);
@@ -4185,9 +4209,9 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     TestWebGraphicsContext3D* context = TestContext();
 
     // Expect that the transfer buffer memory used is equal to the
@@ -4196,7 +4220,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   FakeContentLayerClient client_;
@@ -4211,14 +4235,14 @@
  public:
   LayerTreeHostTestMemoryLimits() : num_commits_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void WillCommit() OVERRIDE {
+  virtual void WillCommit() override {
     // Some commits are aborted, so increment number of attempted commits here.
     num_commits_++;
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (num_commits_) {
       case 1:
         // Verify default values.
@@ -4263,7 +4287,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     switch (num_commits_) {
       case 1:
         break;
@@ -4288,7 +4312,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int num_commits_;
@@ -4306,7 +4330,7 @@
         second_output_surface_memory_limit_(1234321) {}
 
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     if (!first_context_provider_.get()) {
       first_context_provider_ = TestContextProvider::Create();
     } else {
@@ -4331,16 +4355,16 @@
     return output_surface.Pass();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
     layer_tree_host()->SetRootLayer(root_);
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     // Lost context sometimes takes two frames to recreate. The third frame
     // is sometimes aborted, so wait until the fourth frame to verify that
     // the memory has been set, and the fifth frame to end the test.
@@ -4352,7 +4376,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     switch (impl->active_tree()->source_frame_number()) {
       case 1:
         EXPECT_EQ(first_output_surface_memory_limit_,
@@ -4368,7 +4392,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   scoped_refptr<TestContextProvider> first_context_provider_;
   scoped_refptr<TestContextProvider> second_context_provider_;
@@ -4405,14 +4429,14 @@
     result_->dtor_called = true;
   }
 
-  virtual void DidSwap(CompositorFrameMetadata* metadata) OVERRIDE {
+  virtual void DidSwap(CompositorFrameMetadata* metadata) override {
     base::AutoLock lock(result_->lock);
     EXPECT_FALSE(result_->did_swap_called);
     EXPECT_FALSE(result_->did_not_swap_called);
     result_->did_swap_called = true;
   }
 
-  virtual void DidNotSwap(DidNotSwapReason reason) OVERRIDE {
+  virtual void DidNotSwap(DidNotSwapReason reason) override {
     base::AutoLock lock(result_->lock);
     EXPECT_FALSE(result_->did_swap_called);
     EXPECT_FALSE(result_->did_not_swap_called);
@@ -4420,7 +4444,7 @@
     result_->reason = reason;
   }
 
-  virtual int64 TraceId() const OVERRIDE { return 0; }
+  virtual int64 TraceId() const override { return 0; }
 
  private:
   // Not owned.
@@ -4432,16 +4456,16 @@
   LayerTreeHostTestBreakSwapPromise()
       : commit_count_(0), commit_complete_count_(0) {}
 
-  virtual void WillBeginMainFrame() OVERRIDE {
+  virtual void WillBeginMainFrame() override {
     ASSERT_LE(commit_count_, 2);
     scoped_ptr<SwapPromise> swap_promise(
         new TestSwapPromise(&swap_promise_result_[commit_count_]));
     layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     commit_count_++;
     if (commit_count_ == 2) {
       // This commit will finish.
@@ -4449,7 +4473,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     commit_complete_count_++;
     if (commit_complete_count_ == 1) {
       // This commit will be aborted because no actual update.
@@ -4459,7 +4483,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // 3 commits are scheduled. 2 completes. 1 is aborted.
     EXPECT_EQ(commit_count_, 3);
     EXPECT_EQ(commit_complete_count_, 2);
@@ -4503,14 +4527,14 @@
 class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit
     : public LayerTreeHostTest {
  protected:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     layer_tree_host()->SetDeferCommits(true);
     layer_tree_host()->SetNeedsCommit();
   }
 
-  virtual void DidDeferCommit() OVERRIDE {
+  virtual void DidDeferCommit() override {
     layer_tree_host()->SetVisible(false);
     scoped_ptr<SwapPromise> swap_promise(
         new TestSwapPromise(&swap_promise_result_));
@@ -4519,11 +4543,11 @@
   }
 
   virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
-                                             bool did_handle) OVERRIDE {
+                                             bool did_handle) override {
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     {
       base::AutoLock lock(swap_promise_result_.lock);
       EXPECT_FALSE(swap_promise_result_.did_swap_called);
@@ -4542,16 +4566,16 @@
 class LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit
     : public LayerTreeHostTest {
  protected:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (TestEnded())
       return;
     layer_tree_host()->SetDeferCommits(true);
     layer_tree_host()->SetNeedsCommit();
   }
 
-  virtual void DidDeferCommit() OVERRIDE {
+  virtual void DidDeferCommit() override {
     layer_tree_host()->DidLoseOutputSurface();
     scoped_ptr<SwapPromise> swap_promise(
         new TestSwapPromise(&swap_promise_result_));
@@ -4560,7 +4584,7 @@
   }
 
   virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
-                                             bool did_handle) OVERRIDE {
+                                             bool did_handle) override {
     EndTest();
     // This lets the test finally commit and exit.
     MainThreadTaskRunner()->PostTask(
@@ -4574,7 +4598,7 @@
     layer_tree_host()->OnCreateAndInitializeOutputSurfaceAttempted(true);
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     {
       base::AutoLock lock(swap_promise_result_.lock);
       EXPECT_FALSE(swap_promise_result_.did_swap_called);
@@ -4601,15 +4625,15 @@
 
   virtual ~SimpleSwapPromiseMonitor() {}
 
-  virtual void OnSetNeedsCommitOnMain() OVERRIDE {
+  virtual void OnSetNeedsCommitOnMain() override {
     (*set_needs_commit_count_)++;
   }
 
-  virtual void OnSetNeedsRedrawOnImpl() OVERRIDE {
+  virtual void OnSetNeedsRedrawOnImpl() override {
     ADD_FAILURE() << "Should not get called on main thread.";
   }
 
-  virtual void OnForwardScrollUpdateToMainThreadOnImpl() OVERRIDE {
+  virtual void OnForwardScrollUpdateToMainThreadOnImpl() override {
     ADD_FAILURE() << "Should not get called on main thread.";
   }
 
@@ -4619,9 +4643,9 @@
 
 class LayerTreeHostTestSimpleSwapPromiseMonitor : public LayerTreeHostTest {
  public:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void WillBeginMainFrame() OVERRIDE {
+  virtual void WillBeginMainFrame() override {
     if (TestEnded())
       return;
 
@@ -4670,7 +4694,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 };
 
 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSimpleSwapPromiseMonitor);
@@ -4678,18 +4702,18 @@
 class LayerTreeHostTestHighResRequiredAfterEvictingUIResources
     : public LayerTreeHostTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
     ui_resource_ = FakeScopedUIResource::Create(layer_tree_host());
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     host_impl->EvictAllUIResources();
     // Existence of evicted UI resources will trigger NEW_CONTENT_TAKES_PRIORITY
     // mode. Active tree should require high-res to draw after entering this
@@ -4698,7 +4722,7 @@
     EXPECT_TRUE(host_impl->active_tree()->RequiresHighResToDraw());
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     int frame = layer_tree_host()->source_frame_number();
     switch (frame) {
       case 1:
@@ -4711,7 +4735,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   scoped_ptr<FakeScopedUIResource> ui_resource_;
@@ -4722,14 +4746,14 @@
 
 class LayerTreeHostTestGpuRasterizationDefault : public LayerTreeHostTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
 
     EXPECT_FALSE(settings->gpu_rasterization_enabled);
     EXPECT_FALSE(settings->gpu_rasterization_forced);
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
 
     scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_);
@@ -4738,7 +4762,7 @@
     layer_tree_host()->root_layer()->AddChild(layer);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     Layer* root = layer_tree_host()->root_layer();
     PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0));
     PicturePile* pile = layer->GetPicturePileForTesting();
@@ -4758,18 +4782,18 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_FALSE(host_impl->pending_tree()->use_gpu_rasterization());
     EXPECT_FALSE(host_impl->use_gpu_rasterization());
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_FALSE(host_impl->active_tree()->use_gpu_rasterization());
     EXPECT_FALSE(host_impl->use_gpu_rasterization());
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient layer_client_;
 };
@@ -4778,14 +4802,14 @@
 
 class LayerTreeHostTestGpuRasterizationEnabled : public LayerTreeHostTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
 
     EXPECT_FALSE(settings->gpu_rasterization_enabled);
     settings->gpu_rasterization_enabled = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
 
     scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_);
@@ -4794,7 +4818,7 @@
     layer_tree_host()->root_layer()->AddChild(layer);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     Layer* root = layer_tree_host()->root_layer();
     PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0));
     PicturePile* pile = layer->GetPicturePileForTesting();
@@ -4823,18 +4847,18 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_FALSE(host_impl->pending_tree()->use_gpu_rasterization());
     EXPECT_FALSE(host_impl->use_gpu_rasterization());
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_FALSE(host_impl->active_tree()->use_gpu_rasterization());
     EXPECT_FALSE(host_impl->use_gpu_rasterization());
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient layer_client_;
 };
@@ -4843,14 +4867,14 @@
 
 class LayerTreeHostTestGpuRasterizationForced : public LayerTreeHostTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
 
     EXPECT_FALSE(settings->gpu_rasterization_forced);
     settings->gpu_rasterization_forced = true;
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostTest::SetupTree();
 
     scoped_refptr<PictureLayer> layer = PictureLayer::Create(&layer_client_);
@@ -4859,7 +4883,7 @@
     layer_tree_host()->root_layer()->AddChild(layer);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     Layer* root = layer_tree_host()->root_layer();
     PictureLayer* layer = static_cast<PictureLayer*>(root->child_at(0));
     PicturePile* pile = layer->GetPicturePileForTesting();
@@ -4888,18 +4912,18 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_TRUE(host_impl->pending_tree()->use_gpu_rasterization());
     EXPECT_TRUE(host_impl->use_gpu_rasterization());
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_TRUE(host_impl->active_tree()->use_gpu_rasterization());
     EXPECT_TRUE(host_impl->use_gpu_rasterization());
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient layer_client_;
 };
@@ -4914,7 +4938,7 @@
  protected:
   enum { kExpectedNumCommits = 10 };
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root_layer = Layer::Create();
     root_layer->SetBounds(bounds_);
 
@@ -4934,7 +4958,7 @@
     LayerTreeHostTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     MainThreadTaskRunner()->PostTask(
         FROM_HERE,
         base::Bind(
@@ -4952,11 +4976,11 @@
                                           milliseconds_per_frame));
   }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     child_layer_->SetNeedsDisplay();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_LE(kExpectedNumCommits, num_commits_);
     EXPECT_LE(kExpectedNumCommits, num_draws_);
     int update_count = content_layer_.get()
@@ -4965,12 +4989,12 @@
     EXPECT_LE(kExpectedNumCommits, update_count);
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (++num_draws_ == kExpectedNumCommits)
       EndTest();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     ++num_commits_;
   }
 
@@ -5004,24 +5028,24 @@
   LayerTreeHostTestActivateOnInvisible()
       : activation_count_(0), visible_(true) {}
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     // Kick off the test with a commit.
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
     // Make sure we don't activate using the notify signal from tile manager.
     host_impl->BlockNotifyReadyToActivateForTesting(true);
   }
 
-  virtual void DidCommit() OVERRIDE { layer_tree_host()->SetVisible(false); }
+  virtual void DidCommit() override { layer_tree_host()->SetVisible(false); }
 
   virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl,
-                                       bool visible) OVERRIDE {
+                                       bool visible) override {
     visible_ = visible;
 
     // Once invisible, we can go visible again.
@@ -5033,12 +5057,12 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     ++activation_count_;
     EXPECT_FALSE(visible_);
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // Ensure we activated even though the signal was blocked.
     EXPECT_EQ(1, activation_count_);
     EXPECT_TRUE(visible_);
diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc
index da4acb9..593c5c7 100644
--- a/cc/trees/layer_tree_host_unittest_animation.cc
+++ b/cc/trees/layer_tree_host_unittest_animation.cc
@@ -21,7 +21,7 @@
 
 class LayerTreeHostAnimationTest : public LayerTreeTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeTest::SetupTree();
     layer_tree_host()->root_layer()->set_layer_animation_delegate(this);
   }
@@ -35,11 +35,11 @@
   LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested()
       : num_commits_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     // We skip the first commit because its the commit that populates the
     // impl thread with a tree. After the second commit, the test is done.
     if (num_commits_ != 1)
@@ -52,7 +52,7 @@
     // verify that CommitRequested has gone back to false.
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (!num_commits_) {
       EXPECT_FALSE(layer_tree_host()->CommitRequested());
       layer_tree_host()->SetNeedsAnimate();
@@ -66,7 +66,7 @@
     num_commits_++;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int num_commits_;
@@ -86,11 +86,11 @@
   LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback()
       : num_begin_frames_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     if (!num_begin_frames_) {
       layer_tree_host()->SetNeedsAnimate();
       num_begin_frames_++;
@@ -99,7 +99,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int num_begin_frames_;
@@ -117,13 +117,13 @@
   LayerTreeHostAnimationTestAddAnimation()
       : num_begin_frames_(0), received_animation_started_notification_(false) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
   virtual void UpdateAnimationState(
       LayerTreeHostImpl* host_impl,
-      bool has_unfinished_animation) OVERRIDE {
+      bool has_unfinished_animation) override {
     if (!num_begin_frames_) {
       // The animation had zero duration so LayerTreeHostImpl should no
       // longer need to animate its layers.
@@ -148,7 +148,7 @@
 
   virtual void NotifyAnimationStarted(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     received_animation_started_notification_ = true;
     start_time_ = monotonic_time;
     if (num_begin_frames_) {
@@ -165,7 +165,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int num_begin_frames_;
@@ -183,17 +183,17 @@
   LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws()
       : started_animating_(false) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
   virtual void AnimateLayers(
       LayerTreeHostImpl* host_impl,
-      base::TimeTicks monotonic_time) OVERRIDE {
+      base::TimeTicks monotonic_time) override {
     started_animating_ = true;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     if (started_animating_)
       EndTest();
   }
@@ -201,11 +201,11 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
   }
 
-  virtual void AfterTest() OVERRIDE { }
+  virtual void AfterTest() override { }
 
  private:
   bool started_animating_;
@@ -221,13 +221,13 @@
   LayerTreeHostAnimationTestAnimationsGetDeleted()
       : started_animating_(false) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
   virtual void AnimateLayers(
       LayerTreeHostImpl* host_impl,
-      base::TimeTicks monotonic_time) OVERRIDE {
+      base::TimeTicks monotonic_time) override {
     bool have_animations = !host_impl->animation_registrar()->
         active_animation_controllers().empty();
     if (!started_animating_ && have_animations) {
@@ -241,13 +241,13 @@
 
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     // Animations on the impl-side controller only get deleted during a commit,
     // so we need to schedule a commit.
     layer_tree_host()->SetNeedsCommit();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   bool started_animating_;
@@ -262,7 +262,7 @@
   LayerTreeHostAnimationTestTickAnimationWhileBackgrounded()
       : num_begin_frames_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddLongAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
@@ -271,7 +271,7 @@
   // mode.
   virtual void WillAnimateLayers(
       LayerTreeHostImpl* host_impl,
-      base::TimeTicks monotonic_time) OVERRIDE {
+      base::TimeTicks monotonic_time) override {
     // Verify that the host can draw, it's just not visible.
     EXPECT_TRUE(host_impl->CanDraw());
     if (num_begin_frames_ < 2) {
@@ -286,7 +286,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int num_begin_frames_;
@@ -304,18 +304,18 @@
   LayerTreeHostAnimationTestAnimationTickTimeIsMonotonic()
       : has_background_ticked_(false), num_foreground_animates_(0) {}
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // Make sure that drawing many times doesn't cause a checkerboarded
     // animation to start so we avoid flake in this test.
     settings->timeout_and_draw_when_animation_checkerboards = false;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddLongAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
   virtual void AnimateLayers(LayerTreeHostImpl* host_impl,
-                             base::TimeTicks monotonic_time) OVERRIDE {
+                             base::TimeTicks monotonic_time) override {
     EXPECT_GE(monotonic_time, last_tick_time_);
     last_tick_time_ = monotonic_time;
     if (host_impl->visible()) {
@@ -333,13 +333,13 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     if (TestEnded())
       return draw_result;
     return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   bool has_background_ticked_;
@@ -358,22 +358,22 @@
   LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree()
       : active_tree_was_animated_(false) {}
 
-  virtual base::TimeDelta LowFrequencyAnimationInterval() const OVERRIDE {
+  virtual base::TimeDelta LowFrequencyAnimationInterval() const override {
     return base::TimeDelta::FromMilliseconds(4);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     // Replace animated commits with an empty tree.
     layer_tree_host()->SetRootLayer(make_scoped_refptr<Layer>(NULL));
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     // This alternates setting an empty tree and a non-empty tree with an
     // animation.
     switch (layer_tree_host()->source_frame_number()) {
@@ -394,14 +394,14 @@
     }
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
     // At the start of every commit, block activations and make sure
     // we are backgrounded.
     host_impl->BlockNotifyReadyToActivateForTesting(true);
     PostSetVisibleToMainThread(false);
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     if (!host_impl->settings().impl_side_painting) {
       // There are no activations to block if we're not impl-side-painting,
       // so just advance the test immediately.
@@ -429,7 +429,7 @@
     host_impl->BlockNotifyReadyToActivateForTesting(false);
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     active_tree_was_animated_ = false;
 
     // Verify that commits are actually alternating with empty / non-empty
@@ -463,7 +463,7 @@
   }
 
   virtual void WillAnimateLayers(LayerTreeHostImpl* host_impl,
-                                 base::TimeTicks monotonic_time) OVERRIDE {
+                                 base::TimeTicks monotonic_time) override {
     EXPECT_TRUE(host_impl->active_tree()->root_layer());
     active_tree_was_animated_ = true;
   }
@@ -477,7 +477,7 @@
     PostSetVisibleToMainThread(true);
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   bool active_tree_was_animated_;
 };
@@ -491,20 +491,20 @@
  public:
   LayerTreeHostAnimationTestAddAnimationWithTimingFunction() {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostAnimationTest::SetupTree();
     content_ = FakeContentLayer::Create(&client_);
     content_->SetBounds(gfx::Size(4, 4));
     layer_tree_host()->root_layer()->AddChild(content_);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddAnimationToMainThread(content_.get());
   }
 
   virtual void AnimateLayers(
       LayerTreeHostImpl* host_impl,
-      base::TimeTicks monotonic_time) OVERRIDE {
+      base::TimeTicks monotonic_time) override {
     LayerAnimationController* controller_impl =
         host_impl->active_tree()->root_layer()->children()[0]->
         layer_animation_controller();
@@ -528,7 +528,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   scoped_refptr<FakeContentLayer> content_;
@@ -546,7 +546,7 @@
       : main_start_time_(-1.0),
         impl_start_time_(-1.0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostAnimationTest::SetupTree();
     content_ = FakeContentLayer::Create(&client_);
     content_->SetBounds(gfx::Size(4, 4));
@@ -554,13 +554,13 @@
     layer_tree_host()->root_layer()->AddChild(content_);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddAnimationToMainThread(content_.get());
   }
 
   virtual void NotifyAnimationStarted(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     LayerAnimationController* controller =
         layer_tree_host()->root_layer()->children()[0]->
         layer_animation_controller();
@@ -576,7 +576,7 @@
 
   virtual void UpdateAnimationState(
       LayerTreeHostImpl* impl_host,
-      bool has_unfinished_animation) OVERRIDE {
+      bool has_unfinished_animation) override {
     LayerAnimationController* controller =
         impl_host->active_tree()->root_layer()->children()[0]->
         layer_animation_controller();
@@ -593,7 +593,7 @@
       EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_FLOAT_EQ(impl_start_time_, main_start_time_);
   }
 
@@ -613,13 +613,13 @@
  public:
   LayerTreeHostAnimationTestAnimationFinishedEvents() {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     LayerAnimationController* controller =
         layer_tree_host()->root_layer()->layer_animation_controller();
     Animation* animation =
@@ -629,7 +629,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 };
 
 SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -644,17 +644,17 @@
       : update_check_layer_(FakeContentLayer::Create(&client_)) {
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     update_check_layer_->SetOpacity(0.f);
     layer_tree_host()->SetRootLayer(update_check_layer_);
     LayerTreeHostAnimationTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddAnimationToMainThread(update_check_layer_.get());
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     LayerAnimationController* controller_impl =
         host_impl->active_tree()->root_layer()->layer_animation_controller();
     Animation* animation_impl =
@@ -663,7 +663,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // Update() should have been called once, proving that the layer was not
     // skipped.
     EXPECT_EQ(1u, update_check_layer_->update_count());
@@ -687,11 +687,11 @@
  public:
   LayerTreeHostAnimationTestLayerAddedWithAnimation() {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (layer_tree_host()->source_frame_number() == 1) {
       scoped_refptr<Layer> layer = Layer::Create();
       layer->set_layer_animation_delegate(this);
@@ -710,11 +710,11 @@
 
   virtual void AnimateLayers(
       LayerTreeHostImpl* impl_host,
-      base::TimeTicks monotonic_time) OVERRIDE {
+      base::TimeTicks monotonic_time) override {
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 };
 
 SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -726,9 +726,9 @@
   LayerTreeHostAnimationTestCancelAnimateCommit()
       : num_begin_frames_(0), num_commit_calls_(0), num_draw_calls_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     num_begin_frames_++;
     // No-op animate will cancel the commit.
     if (layer_tree_host()->source_frame_number() == 1) {
@@ -738,19 +738,19 @@
     layer_tree_host()->SetNeedsAnimate();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     num_commit_calls_++;
     if (impl->active_tree()->source_frame_number() > 1)
       FAIL() << "Commit should have been canceled.";
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     num_draw_calls_++;
     if (impl->active_tree()->source_frame_number() > 1)
       FAIL() << "Draw should have been canceled.";
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(2, num_begin_frames_);
     EXPECT_EQ(1, num_commit_calls_);
     EXPECT_EQ(1, num_draw_calls_);
@@ -772,23 +772,23 @@
   LayerTreeHostAnimationTestForceRedraw()
       : num_animate_(0), num_draw_layers_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     if (++num_animate_ < 2)
       layer_tree_host()->SetNeedsAnimate();
   }
 
-  virtual void Layout() OVERRIDE {
+  virtual void Layout() override {
     layer_tree_host()->SetNextCommitForcesRedraw();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (++num_draw_layers_ == 2)
       EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // The first commit will always draw; make sure the second draw triggered
     // by the animation was not cancelled.
     EXPECT_EQ(2, num_draw_layers_);
@@ -808,21 +808,21 @@
   LayerTreeHostAnimationTestAnimateAfterSetNeedsCommit()
       : num_animate_(0), num_draw_layers_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     if (++num_animate_ <= 2) {
       layer_tree_host()->SetNeedsCommit();
       layer_tree_host()->SetNeedsAnimate();
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (++num_draw_layers_ == 2)
       EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // The first commit will always draw; make sure the second draw triggered
     // by the SetNeedsCommit was not cancelled.
     EXPECT_EQ(2, num_draw_layers_);
@@ -843,7 +843,7 @@
  public:
   LayerTreeHostAnimationTestRunAnimationWhenNotCanDraw() : started_times_(0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostAnimationTest::SetupTree();
     content_ = FakeContentLayer::Create(&client_);
     content_->SetBounds(gfx::Size(4, 4));
@@ -851,24 +851,24 @@
     layer_tree_host()->root_layer()->AddChild(content_);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     layer_tree_host()->SetViewportSize(gfx::Size());
     PostAddAnimationToMainThread(content_.get());
   }
 
   virtual void NotifyAnimationStarted(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     started_times_++;
   }
 
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(1, started_times_);
   }
 
@@ -888,7 +888,7 @@
  public:
   LayerTreeHostAnimationTestRunAnimationWhenNotVisible() : started_times_(0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostAnimationTest::SetupTree();
     content_ = FakeContentLayer::Create(&client_);
     content_->SetBounds(gfx::Size(4, 4));
@@ -896,32 +896,32 @@
     layer_tree_host()->root_layer()->AddChild(content_);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     visible_ = true;
     PostAddAnimationToMainThread(content_.get());
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     visible_ = false;
     layer_tree_host()->SetVisible(false);
   }
 
   virtual void NotifyAnimationStarted(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     EXPECT_FALSE(visible_);
     started_times_++;
   }
 
   virtual void NotifyAnimationFinished(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     EXPECT_FALSE(visible_);
     EXPECT_EQ(1, started_times_);
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   bool visible_;
@@ -937,7 +937,7 @@
 // checkerboard.
 class LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations
     : public LayerTreeHostAnimationTest {
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostAnimationTest::SetupTree();
     content_ = FakeContentLayer::Create(&client_);
     content_->SetBounds(gfx::Size(4, 4));
@@ -945,13 +945,13 @@
     layer_tree_host()->root_layer()->AddChild(content_);
   }
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // Make sure that drawing many times doesn't cause a checkerboarded
     // animation to start so we avoid flake in this test.
     settings->timeout_and_draw_when_animation_checkerboards = false;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     prevented_draw_ = 0;
     added_animations_ = 0;
     started_times_ = 0;
@@ -962,7 +962,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     if (added_animations_ < 2)
       return draw_result;
     if (TestEnded())
@@ -974,7 +974,7 @@
     return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // The animation is longer than 1 BeginFrame interval.
@@ -991,13 +991,13 @@
 
   virtual void NotifyAnimationStarted(
       base::TimeTicks monotonic_time,
-      Animation::TargetProperty target_property) OVERRIDE {
+      Animation::TargetProperty target_property) override {
     if (TestEnded())
       return;
     started_times_++;
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // Make sure we tried to draw the second animation but failed.
     EXPECT_LT(0, prevented_draw_);
     // The first animation should be started, but the second should not because
@@ -1023,7 +1023,7 @@
  public:
   LayerTreeHostAnimationTestScrollOffsetChangesArePropagated() {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostAnimationTest::SetupTree();
 
     scroll_layer_ = FakeContentLayer::Create(&client_);
@@ -1033,11 +1033,11 @@
     layer_tree_host()->root_layer()->AddChild(scroll_layer_);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1: {
         scoped_ptr<ScrollOffsetAnimationCurve> curve(
@@ -1062,7 +1062,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   FakeContentLayerClient client_;
@@ -1080,22 +1080,22 @@
   LayerTreeHostAnimationTestFrozenAnimationTickTime()
       : started_animating_(false), num_commits_(0), num_draw_attempts_(2) {}
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // Make sure that drawing many times doesn't cause a checkerboarded
     // animation to start so we avoid flake in this test.
     settings->timeout_and_draw_when_animation_checkerboards = false;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostAddAnimationToMainThread(layer_tree_host()->root_layer());
   }
 
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {
     last_main_thread_tick_time_ = args.frame_time;
   }
 
   virtual void AnimateLayers(LayerTreeHostImpl* host_impl,
-                             base::TimeTicks monotonic_time) OVERRIDE {
+                             base::TimeTicks monotonic_time) override {
     if (TestEnded())
       return;
     if (!started_animating_) {
@@ -1110,7 +1110,7 @@
 
   virtual DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
                                            LayerTreeHostImpl::FrameData* frame,
-                                           DrawResult draw_result) OVERRIDE {
+                                           DrawResult draw_result) override {
     if (TestEnded())
       return draw_result;
     num_draw_attempts_++;
@@ -1121,7 +1121,7 @@
     return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
     if (!started_animating_)
       return;
     expected_impl_tick_time_ =
@@ -1129,7 +1129,7 @@
     num_commits_++;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   bool started_animating_;
@@ -1151,9 +1151,9 @@
   LayerTreeHostAnimationTestAnimationsAddedToNewAndExistingLayers()
       : frame_count_with_pending_tree_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (layer_tree_host()->source_frame_number() == 1) {
       AddAnimatedTransformToLayer(layer_tree_host()->root_layer(), 4, 1, 1);
     } else if (layer_tree_host()->source_frame_number() == 2) {
@@ -1168,11 +1168,11 @@
     }
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
     host_impl->BlockNotifyReadyToActivateForTesting(true);
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     // For the commit that added animations to new and existing layers, keep
     // blocking activation. We want to verify that even with activation blocked,
     // the animation on the layer that's already in the active tree won't get a
@@ -1183,7 +1183,7 @@
   }
 
   virtual void WillBeginImplFrameOnThread(LayerTreeHostImpl* host_impl,
-                                          const BeginFrameArgs& args) OVERRIDE {
+                                          const BeginFrameArgs& args) override {
     if (!host_impl->pending_tree() ||
         host_impl->pending_tree()->source_frame_number() != 2)
       return;
@@ -1194,7 +1194,7 @@
   }
 
   virtual void UpdateAnimationState(LayerTreeHostImpl* host_impl,
-                                    bool has_unfinished_animation) OVERRIDE {
+                                    bool has_unfinished_animation) override {
     LayerAnimationController* root_controller_impl =
         host_impl->active_tree()->root_layer()->layer_animation_controller();
     Animation* root_animation =
@@ -1215,7 +1215,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int frame_count_with_pending_tree_;
@@ -1230,16 +1230,16 @@
   LayerTreeHostAnimationTestAddAnimationAfterAnimating()
       : num_swap_buffers_(0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostAnimationTest::SetupTree();
     content_ = Layer::Create();
     content_->SetBounds(gfx::Size(4, 4));
     layer_tree_host()->root_layer()->AddChild(content_);
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // First frame: add an animation to the root layer.
@@ -1254,7 +1254,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     // After both animations have started, verify that they have valid
     // start times.
     num_swap_buffers_++;
@@ -1279,7 +1279,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   scoped_refptr<Layer> content_;
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
index 8bfb08a..0f6bcaf 100644
--- a/cc/trees/layer_tree_host_unittest_context.cc
+++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -15,6 +15,8 @@
 #include "cc/layers/picture_layer.h"
 #include "cc/layers/texture_layer.h"
 #include "cc/layers/texture_layer_impl.h"
+#include "cc/layers/video_layer.h"
+#include "cc/layers/video_layer_impl.h"
 #include "cc/output/filter_operations.h"
 #include "cc/resources/single_release_callback.h"
 #include "cc/test/fake_content_layer.h"
@@ -30,6 +32,7 @@
 #include "cc/test/fake_picture_layer_impl.h"
 #include "cc/test/fake_scoped_ui_resource.h"
 #include "cc/test/fake_scrollbar.h"
+#include "cc/test/fake_video_frame_provider.h"
 #include "cc/test/layer_tree_test.h"
 #include "cc/test/render_pass_test_common.h"
 #include "cc/test/test_context_provider.h"
@@ -39,6 +42,9 @@
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/single_thread_proxy.h"
 #include "gpu/GLES2/gl2extchromium.h"
+#include "media/base/media.h"
+
+using media::VideoFrame;
 
 namespace cc {
 namespace {
@@ -59,6 +65,7 @@
         context_should_support_io_surface_(false),
         fallback_context_works_(false),
         async_output_surface_creation_(false) {
+    media::InitializeMediaLibraryForTesting();
   }
 
   void LoseContext() {
@@ -75,7 +82,7 @@
   }
 
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     if (times_to_fail_create_) {
       --times_to_fail_create_;
       ExpectCreateToFail();
@@ -99,7 +106,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
     if (!times_to_lose_during_draw_)
       return draw_result;
@@ -113,7 +120,7 @@
     return draw_result;
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     committed_at_least_once_ = true;
 
     if (!times_to_lose_during_commit_)
@@ -125,11 +132,11 @@
     times_to_fail_recreate_ = 0;
   }
 
-  virtual void DidFailToInitializeOutputSurface() OVERRIDE {
+  virtual void DidFailToInitializeOutputSurface() override {
     ++times_create_failed_;
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     LayerTreeTest::TearDown();
     EXPECT_EQ(times_to_expect_create_failed_, times_create_failed_);
   }
@@ -161,9 +168,9 @@
         recovered_context_(true),
         first_initialized_(false) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void RequestNewOutputSurface(bool fallback) OVERRIDE {
+  virtual void RequestNewOutputSurface(bool fallback) override {
     if (async_output_surface_creation_) {
       MainThreadTaskRunner()->PostTask(
           FROM_HERE,
@@ -181,7 +188,7 @@
         LayerTreeHostContextTest::CreateOutputSurface(fallback));
   }
 
-  virtual void DidInitializeOutputSurface() OVERRIDE {
+  virtual void DidInitializeOutputSurface() override {
     if (first_initialized_)
       ++num_losses_;
     else
@@ -190,9 +197,9 @@
     recovered_context_ = true;
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(11u, test_case_); }
+  virtual void AfterTest() override { EXPECT_EQ(11u, test_case_); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     // If the last frame had a context loss, then we'll commit again to
     // recover.
     if (!recovered_context_)
@@ -344,24 +351,24 @@
   LayerTreeHostClientNotReadyDoesNotCreateOutputSurface()
       : LayerTreeHostContextTest() {}
 
-  virtual void WillBeginTest() OVERRIDE {
+  virtual void WillBeginTest() override {
     // Override and do not signal SetLayerTreeHostClientReady.
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
     EndTest();
   }
 
   virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     EXPECT_TRUE(false);
     return nullptr;
   }
 
-  virtual void DidInitializeOutputSurface() OVERRIDE { EXPECT_TRUE(false); }
+  virtual void DidInitializeOutputSurface() override { EXPECT_TRUE(false); }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
   }
 };
 
@@ -371,7 +378,7 @@
 class LayerTreeHostContextTestLostContextSucceedsWithContent
     : public LayerTreeHostContextTestLostContextSucceeds {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = Layer::Create();
     root_->SetBounds(gfx::Size(10, 10));
     root_->SetIsDrawable(true);
@@ -394,7 +401,7 @@
     LayerTreeHostContextTest::SetupTree();
   }
 
-  virtual void InvalidateAndSetNeedsCommit() OVERRIDE {
+  virtual void InvalidateAndSetNeedsCommit() override {
     // Invalidate the render surface so we don't try to use a cached copy of the
     // surface.  We want to make sure to test the drawing paths for drawing to
     // a child surface.
@@ -402,7 +409,7 @@
     LayerTreeHostContextTestLostContextSucceeds::InvalidateAndSetNeedsCommit();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     if (!host_impl->settings().impl_side_painting) {
       FakeContentLayerImpl* content_impl = static_cast<FakeContentLayerImpl*>(
           host_impl->active_tree()->root_layer()->children()[0]);
@@ -442,12 +449,12 @@
     times_to_fail_create_ = times_to_fail_;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     scoped_ptr<FakeOutputSurface> surface =
         LayerTreeHostContextTest::CreateFakeOutputSurface(fallback);
 
@@ -458,13 +465,13 @@
     return surface.Pass();
   }
 
-  virtual void DidInitializeOutputSurface() OVERRIDE { times_initialized_++; }
+  virtual void DidInitializeOutputSurface() override { times_initialized_++; }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(times_to_fail_, times_create_failed_);
     EXPECT_NE(0, times_initialized_);
     EXPECT_EQ(expect_fallback_attempt_, did_attempt_fallback_);
@@ -508,7 +515,7 @@
         num_commits_(0),
         lost_context_(false) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // Paint non-solid color.
     SkPaint paint;
     paint.setColor(SkColorSetARGB(100, 80, 200, 200));
@@ -527,7 +534,7 @@
     LayerTreeHostContextTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
   void PostEvictTextures() {
     if (HasImplThread()) {
@@ -551,7 +558,7 @@
     }
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     if (num_commits_ > 1)
       return;
     if (!layer_tree_host()->settings().impl_side_painting) {
@@ -560,7 +567,7 @@
     PostEvictTextures();
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     LayerTreeHostContextTest::CommitCompleteOnThread(impl);
     if (num_commits_ > 1)
       return;
@@ -571,7 +578,7 @@
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (impl->settings().impl_side_painting) {
       FakePictureLayerImpl* picture_impl =
           static_cast<FakePictureLayerImpl*>(impl->active_tree()->root_layer());
@@ -587,9 +594,9 @@
       EndTest();
   }
 
-  virtual void DidInitializeOutputSurface() OVERRIDE {}
+  virtual void DidInitializeOutputSurface() override {}
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  protected:
   bool lose_after_evict_;
@@ -674,7 +681,7 @@
   LayerTreeHostContextTestLostContextWhileUpdatingResources()
       : num_children_(50), times_to_lose_on_end_query_(3) {}
 
-  virtual scoped_ptr<TestWebGraphicsContext3D> CreateContext3d() OVERRIDE {
+  virtual scoped_ptr<TestWebGraphicsContext3D> CreateContext3d() override {
     scoped_ptr<TestWebGraphicsContext3D> context =
         LayerTreeHostContextTest::CreateContext3d();
     if (times_to_lose_on_end_query_) {
@@ -684,7 +691,7 @@
     return context.Pass();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     if (layer_tree_host()->settings().impl_side_painting)
       parent_ = FakePictureLayer::Create(&client_);
     else
@@ -707,14 +714,14 @@
     LayerTreeHostContextTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     EXPECT_EQ(0, times_to_lose_on_end_query_);
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(0, times_to_lose_on_end_query_);
   }
 
@@ -733,7 +740,7 @@
   LayerTreeHostContextTestLayersNotified()
       : LayerTreeHostContextTest(), num_commits_(0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     if (layer_tree_host()->settings().impl_side_painting) {
       root_ = FakePictureLayer::Create(&client_);
       child_ = FakePictureLayer::Create(&client_);
@@ -751,9 +758,9 @@
     LayerTreeHostContextTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     LayerTreeHostContextTest::DidActivateTreeOnThread(host_impl);
 
     FakePictureLayerImpl* root_picture = NULL;
@@ -815,7 +822,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   int num_commits_;
@@ -849,7 +856,7 @@
 
   static void EmptyReleaseCallback(unsigned sync_point, bool lost) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     gpu::gles2::GLES2Interface* gl =
         child_output_surface_->context_provider()->ContextGL();
 
@@ -937,6 +944,49 @@
     layer_with_mask->SetMaskLayer(mask.get());
     root->AddChild(layer_with_mask);
 
+    scoped_refptr<VideoLayer> video_color =
+        VideoLayer::Create(&color_frame_provider_, media::VIDEO_ROTATION_0);
+    video_color->SetBounds(gfx::Size(10, 10));
+    video_color->SetIsDrawable(true);
+    root->AddChild(video_color);
+
+    scoped_refptr<VideoLayer> video_hw =
+        VideoLayer::Create(&hw_frame_provider_, media::VIDEO_ROTATION_0);
+    video_hw->SetBounds(gfx::Size(10, 10));
+    video_hw->SetIsDrawable(true);
+    root->AddChild(video_hw);
+
+    scoped_refptr<VideoLayer> video_scaled_hw =
+        VideoLayer::Create(&scaled_hw_frame_provider_, media::VIDEO_ROTATION_0);
+    video_scaled_hw->SetBounds(gfx::Size(10, 10));
+    video_scaled_hw->SetIsDrawable(true);
+    root->AddChild(video_scaled_hw);
+
+    color_video_frame_ = VideoFrame::CreateColorFrame(
+        gfx::Size(4, 4), 0x80, 0x80, 0x80, base::TimeDelta());
+    hw_video_frame_ =
+        VideoFrame::WrapNativeTexture(make_scoped_ptr(new gpu::MailboxHolder(
+                                          mailbox, GL_TEXTURE_2D, sync_point)),
+                                      media::VideoFrame::ReleaseMailboxCB(),
+                                      gfx::Size(4, 4),
+                                      gfx::Rect(0, 0, 4, 4),
+                                      gfx::Size(4, 4),
+                                      base::TimeDelta(),
+                                      VideoFrame::ReadPixelsCB());
+    scaled_hw_video_frame_ =
+        VideoFrame::WrapNativeTexture(make_scoped_ptr(new gpu::MailboxHolder(
+                                          mailbox, GL_TEXTURE_2D, sync_point)),
+                                      media::VideoFrame::ReleaseMailboxCB(),
+                                      gfx::Size(4, 4),
+                                      gfx::Rect(0, 0, 3, 2),
+                                      gfx::Size(4, 4),
+                                      base::TimeDelta(),
+                                      VideoFrame::ReadPixelsCB());
+
+    color_frame_provider_.set_frame(color_video_frame_);
+    hw_frame_provider_.set_frame(hw_video_frame_);
+    scaled_hw_frame_provider_.set_frame(scaled_hw_video_frame_);
+
     if (!delegating_renderer()) {
       // TODO(danakj): IOSurface layer can not be transported. crbug.com/239335
       scoped_refptr<IOSurfaceLayer> io_surface = IOSurfaceLayer::Create();
@@ -962,16 +1012,24 @@
     LayerTreeHostContextTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     LayerTreeHostContextTest::CommitCompleteOnThread(host_impl);
+
+    if (host_impl->active_tree()->source_frame_number() == 3) {
+      // On the third commit we're recovering from context loss. Hardware
+      // video frames should not be reused by the VideoFrameProvider, but
+      // software frames can be.
+      hw_frame_provider_.set_frame(NULL);
+      scaled_hw_frame_provider_.set_frame(NULL);
+    }
   }
 
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     if (host_impl->active_tree()->source_frame_number() == 2) {
       // Lose the context during draw on the second commit. This will cause
       // a third commit to recover.
@@ -981,7 +1039,7 @@
   }
 
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     // This will get called twice:
     // First when we create the initial output surface...
     if (layer_tree_host()->source_frame_number() > 0) {
@@ -991,7 +1049,7 @@
     return LayerTreeHostContextTest::CreateFakeOutputSurface(fallback);
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     ASSERT_TRUE(layer_tree_host()->hud_layer());
     // End the test once we know the 3nd frame drew.
     if (layer_tree_host()->source_frame_number() < 5) {
@@ -1002,7 +1060,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_TRUE(lost_context_); }
+  virtual void AfterTest() override { EXPECT_TRUE(lost_context_); }
 
  private:
   FakeContentLayerClient client_;
@@ -1016,6 +1074,14 @@
   scoped_refptr<DelegatedFrameResourceCollection>
       delegated_resource_collection_;
   scoped_refptr<DelegatedFrameProvider> delegated_frame_provider_;
+
+  scoped_refptr<VideoFrame> color_video_frame_;
+  scoped_refptr<VideoFrame> hw_video_frame_;
+  scoped_refptr<VideoFrame> scaled_hw_video_frame_;
+
+  FakeVideoFrameProvider color_frame_provider_;
+  FakeVideoFrameProvider hw_frame_provider_;
+  FakeVideoFrameProvider scaled_hw_frame_provider_;
 };
 
 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestDontUseLostResources);
@@ -1023,7 +1089,7 @@
 class ImplSidePaintingLayerTreeHostContextTest
     : public LayerTreeHostContextTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 };
@@ -1031,7 +1097,7 @@
 class LayerTreeHostContextTestImplSidePainting
     : public ImplSidePaintingLayerTreeHostContextTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root = Layer::Create();
     root->SetBounds(gfx::Size(10, 10));
     root->SetIsDrawable(true);
@@ -1045,14 +1111,14 @@
     LayerTreeHostContextTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     times_to_lose_during_commit_ = 1;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
-  virtual void DidInitializeOutputSurface() OVERRIDE { EndTest(); }
+  virtual void DidInitializeOutputSurface() override { EndTest(); }
 
  private:
   FakeContentLayerClient client_;
@@ -1064,7 +1130,7 @@
  public:
   ScrollbarLayerLostContext() : commits_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     scoped_refptr<Layer> scroll_layer = Layer::Create();
     scrollbar_layer_ =
         FakePaintedScrollbarLayer::Create(false, true, scroll_layer->id());
@@ -1074,9 +1140,9 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     LayerTreeHostContextTest::CommitCompleteOnThread(impl);
 
     ++commits_;
@@ -1108,11 +1174,11 @@
 class UIResourceLostTest : public LayerTreeHostContextTest {
  public:
   UIResourceLostTest() : time_step_(0) {}
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->texture_id_allocation_chunk_size = 1;
   }
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
-  virtual void AfterTest() OVERRIDE {}
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+  virtual void AfterTest() override {}
 
   // This is called on the main thread after each commit and
   // DidActivateTreeOnThread, with the value of time_step_ at the time
@@ -1159,7 +1225,7 @@
   // activated.
   virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) = 0;
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     if (!layer_tree_host()->settings().impl_side_painting) {
       StepCompleteOnImplThread(impl);
       PostStepCompleteToMainThread();
@@ -1167,7 +1233,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     if (layer_tree_host()->settings().impl_side_painting) {
       StepCompleteOnImplThread(impl);
       PostStepCompleteToMainThread();
@@ -1179,7 +1245,7 @@
 // Losing context after an UI resource has been created.
 class UIResourceLostAfterCommit : public UIResourceLostTestSimple {
  public:
-  virtual void StepCompleteOnMainThread(int step) OVERRIDE {
+  virtual void StepCompleteOnMainThread(int step) override {
     EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
     switch (step) {
       case 0:
@@ -1199,7 +1265,7 @@
     }
   }
 
-  virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) override {
     LayerTreeHostContextTest::CommitCompleteOnThread(impl);
     switch (time_step_) {
       case 1:
@@ -1238,7 +1304,7 @@
  public:
   UIResourceLostBeforeCommit() : test_id0_(0), test_id1_(0) {}
 
-  virtual void StepCompleteOnMainThread(int step) OVERRIDE {
+  virtual void StepCompleteOnMainThread(int step) override {
     switch (step) {
       case 0:
         ui_resource_ = FakeScopedUIResource::Create(layer_tree_host());
@@ -1288,7 +1354,7 @@
     }
   }
 
-  virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) override {
     LayerTreeHostContextTest::CommitCompleteOnThread(impl);
     switch (time_step_) {
       case 1:
@@ -1334,7 +1400,7 @@
 // Losing UI resource before the pending trees is activated but after the
 // commit.  Impl-side-painting only.
 class UIResourceLostBeforeActivateTree : public UIResourceLostTest {
-  virtual void StepCompleteOnMainThread(int step) OVERRIDE {
+  virtual void StepCompleteOnMainThread(int step) override {
     EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
     switch (step) {
       case 0:
@@ -1357,7 +1423,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     LayerTreeHostContextTest::CommitCompleteOnThread(impl);
     switch (time_step_) {
       case 2:
@@ -1369,7 +1435,7 @@
     }
   }
 
-  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     switch (time_step_) {
       case 1:
         // The resource creation callback has been called.
@@ -1386,7 +1452,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     LayerTreeHostContextTest::DidActivateTreeOnThread(impl);
     switch (time_step_) {
       case 1:
@@ -1425,7 +1491,7 @@
 // Resources evicted explicitly and by visibility changes.
 class UIResourceLostEviction : public UIResourceLostTestSimple {
  public:
-  virtual void StepCompleteOnMainThread(int step) OVERRIDE {
+  virtual void StepCompleteOnMainThread(int step) override {
     EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
     switch (step) {
       case 0:
@@ -1448,7 +1514,7 @@
   }
 
   virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* impl,
-                                       bool visible) OVERRIDE {
+                                       bool visible) override {
     TestWebGraphicsContext3D* context = TestContext();
     if (!visible) {
       // All resources should have been evicted.
@@ -1464,7 +1530,7 @@
     }
   }
 
-  virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) override {
     TestWebGraphicsContext3D* context = TestContext();
     LayerTreeHostContextTest::CommitCompleteOnThread(impl);
     switch (time_step_) {
@@ -1512,7 +1578,7 @@
   LayerTreeHostContextTestSurfaceCreateCallback()
       : LayerTreeHostContextTest() {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     if (layer_tree_host()->settings().impl_side_painting) {
       picture_layer_ = FakePictureLayer::Create(&client_);
       picture_layer_->SetBounds(gfx::Size(10, 20));
@@ -1526,9 +1592,9 @@
     LayerTreeHostContextTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         if (layer_tree_host()->settings().impl_side_painting)
@@ -1560,7 +1626,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     LayerTreeHostContextTest::CommitCompleteOnThread(impl);
     switch (LastCommittedSourceFrameNumber(impl)) {
       case 0:
@@ -1576,7 +1642,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  protected:
   FakeContentLayerClient client_;
@@ -1589,12 +1655,12 @@
 class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame
     : public LayerTreeHostContextTest {
  protected:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     deferred_ = false;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void ScheduledActionWillSendBeginMainFrame() OVERRIDE {
+  virtual void ScheduledActionWillSendBeginMainFrame() override {
     if (deferred_)
       return;
     deferred_ = true;
@@ -1630,14 +1696,14 @@
     layer_tree_host()->SetDeferCommits(defer_commits);
   }
 
-  virtual void WillBeginMainFrame() OVERRIDE {
+  virtual void WillBeginMainFrame() override {
     // Don't begin a frame with a lost surface.
     EXPECT_FALSE(layer_tree_host()->output_surface_lost());
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE { EndTest(); }
+  virtual void DidCommitAndDrawFrame() override { EndTest(); }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   bool deferred_;
 };
diff --git a/cc/trees/layer_tree_host_unittest_copyrequest.cc b/cc/trees/layer_tree_host_unittest_copyrequest.cc
index 6af1756..860f283 100644
--- a/cc/trees/layer_tree_host_unittest_copyrequest.cc
+++ b/cc/trees/layer_tree_host_unittest_copyrequest.cc
@@ -21,7 +21,7 @@
 class LayerTreeHostCopyRequestTestMultipleRequests
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root = FakeContentLayer::Create(&client_);
     root->SetBounds(gfx::Size(20, 20));
 
@@ -33,9 +33,9 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE { WaitForCallback(); }
+  virtual void DidCommitAndDrawFrame() override { WaitForCallback(); }
 
   void WaitForCallback() {
     base::MessageLoop::current()->PostTask(
@@ -101,10 +101,10 @@
     callbacks_.push_back(result->size());
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(4u, callbacks_.size()); }
+  virtual void AfterTest() override { EXPECT_EQ(4u, callbacks_.size()); }
 
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     if (use_gl_renderer_)
       return FakeOutputSurface::Create3d();
     return FakeOutputSurface::CreateSoftware(
@@ -146,7 +146,7 @@
 class LayerTreeHostCopyRequestTestLayerDestroyed
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -162,12 +162,12 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     callback_count_ = 0;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     int frame = layer_tree_host()->source_frame_number();
     switch (frame) {
       case 1:
@@ -224,7 +224,7 @@
     ++callback_count_;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int callback_count_;
   FakeContentLayerClient client_;
@@ -238,7 +238,7 @@
 class LayerTreeHostCopyRequestTestInHiddenSubtree
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -267,7 +267,7 @@
             base::Unretained(this))));
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     callback_count_ = 0;
     PostSetNeedsCommitToMainThread();
 
@@ -321,7 +321,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int callback_count_;
   FakeContentLayerClient client_;
@@ -337,7 +337,7 @@
 class LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -360,7 +360,7 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     did_draw_ = false;
     PostSetNeedsCommitToMainThread();
 
@@ -377,7 +377,7 @@
     EndTest();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     Renderer* renderer = host_impl->renderer();
 
     LayerImpl* root = host_impl->active_tree()->root_layer();
@@ -398,7 +398,7 @@
     did_draw_ = true;
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_TRUE(did_draw_); }
+  virtual void AfterTest() override { EXPECT_TRUE(did_draw_); }
 
   FakeContentLayerClient client_;
   bool did_draw_;
@@ -415,7 +415,7 @@
 class LayerTreeHostCopyRequestTestClippedOut
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -433,7 +433,7 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
 
     copy_layer_->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
@@ -449,7 +449,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   scoped_refptr<FakeContentLayer> root_;
@@ -463,7 +463,7 @@
 class LayerTreeHostTestAsyncTwoReadbacksWithoutDraw
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -482,7 +482,7 @@
             base::Unretained(this))));
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     saw_copy_request_ = false;
     callback_count_ = 0;
     PostSetNeedsCommitToMainThread();
@@ -493,7 +493,7 @@
     AddCopyRequest(copy_layer_.get());
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     if (impl->active_tree()->source_frame_number() == 0) {
       LayerImpl* root = impl->active_tree()->root_layer();
       EXPECT_TRUE(root->children()[0]->HasCopyRequest());
@@ -501,7 +501,7 @@
     }
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (layer_tree_host()->source_frame_number() == 1) {
       // Allow drawing.
       layer_tree_host()->SetViewportSize(gfx::Size(root_->bounds()));
@@ -519,7 +519,7 @@
       EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_TRUE(saw_copy_request_); }
+  virtual void AfterTest() override { EXPECT_TRUE(saw_copy_request_); }
 
   bool saw_copy_request_;
   int callback_count_;
@@ -535,7 +535,7 @@
     : public LayerTreeHostCopyRequestTest {
  protected:
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     if (!first_context_provider_.get()) {
       first_context_provider_ = TestContextProvider::Create();
       return FakeOutputSurface::Create3d(first_context_provider_);
@@ -546,7 +546,7 @@
     return FakeOutputSurface::Create3d(second_context_provider_);
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -558,7 +558,7 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
   void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
     EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
@@ -573,7 +573,7 @@
     layer_tree_host()->SetNeedsCommit();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // The layers have been pushed to the impl side. The layer textures have
@@ -606,7 +606,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     switch (impl->active_tree()->source_frame_number()) {
       case 0:
         // The layers have been drawn, so their textures have been allocated.
@@ -646,7 +646,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   scoped_refptr<TestContextProvider> first_context_provider_;
   scoped_refptr<TestContextProvider> second_context_provider_;
@@ -665,12 +665,12 @@
     : public LayerTreeHostCopyRequestTest {
  protected:
   virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
-      OVERRIDE {
+      override {
     context_provider_ = TestContextProvider::Create();
     return FakeOutputSurface::Create3d(context_provider_);
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -682,7 +682,7 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     num_textures_without_readback_ = 0;
     num_textures_with_readback_ = 0;
     waited_sync_point_after_readback_ = 0;
@@ -691,7 +691,7 @@
 
   virtual void RequestCopy(Layer* layer) = 0;
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         // The layers have been pushed to the impl side. The layer textures have
@@ -702,7 +702,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     switch (impl->active_tree()->source_frame_number()) {
       case 0:
         // The layers have been drawn, so their textures have been allocated.
@@ -738,7 +738,7 @@
 class LayerTreeHostCopyRequestTestCreatesTexture
     : public LayerTreeHostCopyRequestTestCountTextures {
  protected:
-  virtual void RequestCopy(Layer* layer) OVERRIDE {
+  virtual void RequestCopy(Layer* layer) override {
     // Request a normal texture copy. This should create a new texture.
     copy_layer_->RequestCopyOfOutput(
         CopyOutputRequest::CreateRequest(base::Bind(
@@ -758,7 +758,7 @@
     release->Run(0, false);
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // No sync point was needed.
     EXPECT_EQ(0u, waited_sync_point_after_readback_);
     // Except the copy to have made another texture.
@@ -772,7 +772,7 @@
 class LayerTreeHostCopyRequestTestProvideTexture
     : public LayerTreeHostCopyRequestTestCountTextures {
  protected:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     external_context_provider_ = TestContextProvider::Create();
     EXPECT_TRUE(external_context_provider_->BindToCurrentThread());
     LayerTreeHostCopyRequestTestCountTextures::BeginTest();
@@ -788,7 +788,7 @@
     EXPECT_FALSE(release);
   }
 
-  virtual void RequestCopy(Layer* layer) OVERRIDE {
+  virtual void RequestCopy(Layer* layer) override {
     // Request a copy to a provided texture. This should not create a new
     // texture.
     scoped_ptr<CopyOutputRequest> request =
@@ -807,7 +807,7 @@
     copy_layer_->RequestCopyOfOutput(request.Pass());
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // Expect the compositor to have waited for the sync point in the provided
     // TextureMailbox.
     EXPECT_EQ(sync_point_, waited_sync_point_after_readback_);
@@ -825,7 +825,7 @@
 class LayerTreeHostCopyRequestTestDestroyBeforeCopy
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -837,7 +837,7 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     callback_count_ = 0;
     PostSetNeedsCommitToMainThread();
   }
@@ -847,7 +847,7 @@
     ++callback_count_;
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     MainThreadTaskRunner()->PostTask(
         FROM_HERE,
         base::Bind(&LayerTreeHostCopyRequestTestDestroyBeforeCopy::DidActivate,
@@ -888,7 +888,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int callback_count_;
   FakeContentLayerClient client_;
@@ -902,7 +902,7 @@
 class LayerTreeHostCopyRequestTestShutdownBeforeCopy
     : public LayerTreeHostCopyRequestTest {
  protected:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     root_->SetBounds(gfx::Size(20, 20));
 
@@ -914,7 +914,7 @@
     LayerTreeHostCopyRequestTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     callback_count_ = 0;
     PostSetNeedsCommitToMainThread();
   }
@@ -924,7 +924,7 @@
     ++callback_count_;
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     MainThreadTaskRunner()->PostTask(
         FROM_HERE,
         base::Bind(&LayerTreeHostCopyRequestTestShutdownBeforeCopy::DidActivate,
@@ -959,7 +959,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, callback_count_); }
+  virtual void AfterTest() override { EXPECT_EQ(1, callback_count_); }
 
   int callback_count_;
   FakeContentLayerClient client_;
diff --git a/cc/trees/layer_tree_host_unittest_damage.cc b/cc/trees/layer_tree_host_unittest_damage.cc
index 7d8535e..f8e44d5 100644
--- a/cc/trees/layer_tree_host_unittest_damage.cc
+++ b/cc/trees/layer_tree_host_unittest_damage.cc
@@ -26,7 +26,7 @@
 // LayerTreeHost::SetNeedsRedraw should damage the whole viewport.
 class LayerTreeHostDamageTestSetNeedsRedraw
     : public LayerTreeHostDamageTest {
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // Viewport is 10x10.
     scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_);
     root->SetBounds(gfx::Size(10, 10));
@@ -35,12 +35,12 @@
     LayerTreeHostDamageTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     draw_count_ = 0;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         layer_tree_host()->SetNeedsRedraw();
@@ -51,7 +51,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     RenderSurfaceImpl* root_surface =
@@ -77,7 +77,7 @@
     return draw_result;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int draw_count_;
   FakeContentLayerClient client_;
@@ -88,7 +88,7 @@
 // LayerTreeHost::SetViewportSize should damage the whole viewport.
 class LayerTreeHostDamageTestSetViewportSize
     : public LayerTreeHostDamageTest {
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // Viewport is 10x10.
     scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_);
     root->SetBounds(gfx::Size(10, 10));
@@ -97,12 +97,12 @@
     LayerTreeHostDamageTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     draw_count_ = 0;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1:
         layer_tree_host()->SetViewportSize(gfx::Size(15, 15));
@@ -113,7 +113,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     RenderSurfaceImpl* root_surface =
@@ -139,7 +139,7 @@
     return draw_result;
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   int draw_count_;
   FakeContentLayerClient client_;
@@ -149,14 +149,14 @@
 
 class LayerTreeHostDamageTestNoDamageDoesNotSwap
     : public LayerTreeHostDamageTest {
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     expect_swap_and_succeed_ = 0;
     did_swaps_ = 0;
     did_swap_and_succeed_ = 0;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_);
     root->SetBounds(gfx::Size(10, 10));
 
@@ -172,7 +172,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     int source_frame = host_impl->active_tree()->source_frame_number();
@@ -198,14 +198,14 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ++did_swaps_;
     if (result)
       ++did_swap_and_succeed_;
     EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_);
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     int next_frame = layer_tree_host()->source_frame_number();
     switch (next_frame) {
       case 1:
@@ -224,7 +224,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(4, did_swaps_);
     EXPECT_EQ(2, expect_swap_and_succeed_);
     EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_);
@@ -241,11 +241,11 @@
     LayerTreeHostDamageTestNoDamageDoesNotSwap);
 
 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest {
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = FakeContentLayer::Create(&client_);
     child_ = FakeContentLayer::Create(&client_);
 
@@ -261,7 +261,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     RenderSurfaceImpl* root_surface =
@@ -334,7 +334,7 @@
     return draw_result;
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     if (!TestEnded())
       layer_tree_host()->SetNeedsCommit();
 
@@ -344,7 +344,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   scoped_refptr<FakeContentLayer> root_;
@@ -355,7 +355,7 @@
 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostDamageTestForcedFullDamage);
 
 class LayerTreeHostScrollbarDamageTest : public LayerTreeHostDamageTest {
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root_layer = Layer::Create();
     root_layer->SetBounds(gfx::Size(400, 400));
     root_layer->SetMasksToBounds(true);
@@ -395,7 +395,7 @@
 
 class LayerTreeHostDamageTestScrollbarDoesDamage
     : public LayerTreeHostScrollbarDamageTest {
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     did_swaps_ = 0;
     PostSetNeedsCommitToMainThread();
   }
@@ -403,7 +403,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
     RenderSurfaceImpl* root_surface =
         host_impl->active_tree()->root_layer()->render_surface();
@@ -432,7 +432,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ++did_swaps_;
     EXPECT_TRUE(result);
     LayerImpl* root = host_impl->active_tree()->root_layer();
@@ -458,7 +458,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(4, did_swaps_);
   }
 
@@ -469,7 +469,7 @@
 
 class LayerTreeHostDamageTestScrollbarCommitDoesNoDamage
     : public LayerTreeHostScrollbarDamageTest {
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     did_swaps_ = 0;
     PostSetNeedsCommitToMainThread();
   }
@@ -477,7 +477,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
     RenderSurfaceImpl* root_surface =
         host_impl->active_tree()->root_layer()->render_surface();
@@ -508,7 +508,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ++did_swaps_;
     EXPECT_TRUE(result);
     LayerImpl* root = host_impl->active_tree()->root_layer();
@@ -535,7 +535,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(3, did_swaps_);
   }
 
@@ -547,15 +547,15 @@
 class LayerTreeHostDamageTestVisibleTilesStillTriggerDraws
     : public LayerTreeHostDamageTest {
 
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_);
     root->SetBounds(gfx::Size(500, 500));
     layer_tree_host()->SetRootLayer(root);
@@ -569,7 +569,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame_data,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
     prepare_to_draw_count_++;
     switch (prepare_to_draw_count_) {
@@ -600,7 +600,7 @@
   }
 
   virtual void UpdateVisibleTilesOnThread(
-      LayerTreeHostImpl* host_impl) OVERRIDE {
+      LayerTreeHostImpl* host_impl) override {
     // Simulate creating some visible tiles (that trigger prepare-to-draws).
     // The first we make into a no-damage-frame during prepare-to-draw (see
     // above). This is to ensure we still get UpdateVisibleTiles calls after
@@ -618,13 +618,13 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool didSwap) OVERRIDE {
+                                   bool didSwap) override {
     if (!didSwap)
       return;
     ++swap_count_;
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     // We should keep getting update-visible-tiles calls
     // until we report there are no more incomplete-tiles.
     EXPECT_EQ(update_visible_tile_count_, 6);
diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc
index 247d94e..095513b 100644
--- a/cc/trees/layer_tree_host_unittest_delegated.cc
+++ b/cc/trees/layer_tree_host_unittest_delegated.cc
@@ -251,7 +251,7 @@
     resource_collection_->SetClient(this);
   }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     root_ = Layer::Create();
     root_->SetBounds(gfx::Size(15, 15));
 
@@ -259,7 +259,7 @@
     LayerTreeHostDelegatedTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     resource_collection_->SetClient(this);
     PostSetNeedsCommitToMainThread();
   }
@@ -296,10 +296,10 @@
     return delegated;
   }
 
-  virtual void AfterTest() OVERRIDE { resource_collection_->SetClient(NULL); }
+  virtual void AfterTest() override { resource_collection_->SetClient(NULL); }
 
   // DelegatedFrameProviderClient implementation.
-  virtual void UnusedResourcesAreAvailable() OVERRIDE { available_ = true; }
+  virtual void UnusedResourcesAreAvailable() override { available_ = true; }
 
   bool TestAndResetAvailable() {
     bool available = available_;
@@ -323,13 +323,13 @@
         num_activates_(0),
         did_reset_child_id_(false) {}
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (TestEnded())
       return;
     SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)));
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() < 1)
       return;
 
@@ -360,7 +360,7 @@
   }
 
   virtual void InitializedRendererOnThread(LayerTreeHostImpl* host_impl,
-                                           bool success) OVERRIDE {
+                                           bool success) override {
     EXPECT_TRUE(success);
 
     if (num_activates_ < 2)
@@ -391,7 +391,7 @@
   LayerTreeHostDelegatedTestInvalidFrameAfterContextLost()
       : num_activates_(0), num_output_surfaces_initialized_(0) {}
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     if (TestEnded())
       return;
     scoped_ptr<DelegatedFrameData> frame1 =
@@ -401,7 +401,7 @@
     SetFrameData(frame1.Pass());
   }
 
-  virtual void DidInitializeOutputSurface() OVERRIDE {
+  virtual void DidInitializeOutputSurface() override {
     if (!num_output_surfaces_initialized_++)
       return;
 
@@ -414,7 +414,7 @@
     DCHECK(delegated_.get() == old_delegated.get());
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() < 1)
       return;
 
@@ -435,7 +435,7 @@
   }
 
   virtual void InitializedRendererOnThread(LayerTreeHostImpl* host_impl,
-                                           bool success) OVERRIDE {
+                                           bool success) override {
     EXPECT_TRUE(success);
 
     if (num_activates_ < 2)
@@ -450,7 +450,7 @@
     EXPECT_EQ(0U, delegated_impl->Resources().size());
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::AfterTest();
     EXPECT_EQ(2, num_output_surfaces_initialized_);
   }
@@ -470,7 +470,7 @@
       : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(),
         first_draw_for_source_frame_(true) {}
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     int next_source_frame_number = layer_tree_host()->source_frame_number();
     switch (next_source_frame_number) {
       case 1:
@@ -583,7 +583,7 @@
   virtual DrawResult PrepareToDrawOnThread(
       LayerTreeHostImpl* host_impl,
       LayerTreeHostImpl::FrameData* frame,
-      DrawResult draw_result) OVERRIDE {
+      DrawResult draw_result) override {
     EXPECT_EQ(DRAW_SUCCESS, draw_result);
 
     if (!first_draw_for_source_frame_)
@@ -674,7 +674,7 @@
 class LayerTreeHostDelegatedTestMergeResources
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     // Push two frames to the delegated renderer layer with no commit between.
 
     // The first frame has resource 999.
@@ -707,7 +707,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     LayerImpl* root_impl = host_impl->active_tree()->root_layer();
     FakeDelegatedRendererLayerImpl* delegated_impl =
         static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
@@ -734,7 +734,7 @@
 class LayerTreeHostDelegatedTestRemapResourcesInQuads
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     // Generate a frame with two resources in it.
     scoped_ptr<DelegatedFrameData> frame =
         CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
@@ -747,7 +747,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     LayerImpl* root_impl = host_impl->active_tree()->root_layer();
     FakeDelegatedRendererLayerImpl* delegated_impl =
         static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
@@ -783,11 +783,11 @@
 class LayerTreeHostDelegatedTestReturnUnusedResources
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -856,7 +856,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 };
@@ -867,11 +867,11 @@
 class LayerTreeHostDelegatedTestReusedResources
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -928,7 +928,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 };
@@ -938,11 +938,11 @@
 class LayerTreeHostDelegatedTestFrameBeforeAck
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -997,7 +997,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() != 3)
       return;
 
@@ -1028,7 +1028,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 };
@@ -1038,11 +1038,11 @@
 class LayerTreeHostDelegatedTestFrameBeforeTakeResources
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1109,7 +1109,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() != 3)
       return;
 
@@ -1147,7 +1147,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 };
@@ -1158,11 +1158,11 @@
 class LayerTreeHostDelegatedTestBadFrame
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1230,7 +1230,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     if (host_impl->active_tree()->source_frame_number() < 1)
       return;
 
@@ -1312,11 +1312,11 @@
 class LayerTreeHostDelegatedTestUnnamedResource
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1352,7 +1352,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() != 1)
       return;
 
@@ -1378,11 +1378,11 @@
 class LayerTreeHostDelegatedTestDontLeakResource
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1430,7 +1430,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() != 1)
       return;
 
@@ -1451,7 +1451,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 };
@@ -1461,7 +1461,7 @@
 class LayerTreeHostDelegatedTestResourceSentToParent
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1516,7 +1516,7 @@
     host_impl->ReclaimResources(&ack);
   }
 
-  virtual void UnusedResourcesAreAvailable() OVERRIDE {
+  virtual void UnusedResourcesAreAvailable() override {
     EXPECT_EQ(3, layer_tree_host()->source_frame_number());
 
     ReturnedResourceArray resources;
@@ -1531,7 +1531,7 @@
     EndTest();
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() < 1)
       return;
 
@@ -1592,13 +1592,13 @@
 class LayerTreeHostDelegatedTestCommitWithoutTake
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     // Prevent drawing with resources that are sent to the grandparent.
     layer_tree_host()->SetViewportSize(gfx::Size());
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1664,7 +1664,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
     if (host_impl->active_tree()->source_frame_number() < 1)
       return;
 
@@ -1714,7 +1714,7 @@
  protected:
   DelegatedFrameIsActivatedDuringCommit() : returned_resource_count_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     activate_count_ = 0;
 
     scoped_ptr<DelegatedFrameData> frame =
@@ -1726,11 +1726,11 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     ++activate_count_;
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 1: {
         // The first frame has been activated. Set a new frame, and
@@ -1757,7 +1757,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
     switch (host_impl->active_tree()->source_frame_number()) {
       case 0: {
         // The activate for the 1st frame should have happened before now.
@@ -1782,11 +1782,11 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 
-  virtual void UnusedResourcesAreAvailable() OVERRIDE {
+  virtual void UnusedResourcesAreAvailable() override {
     LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::
         UnusedResourcesAreAvailable();
     ReturnedResourceArray resources;
@@ -1807,9 +1807,9 @@
 class LayerTreeHostDelegatedTestTwoImplLayers
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1857,7 +1857,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 };
@@ -1867,9 +1867,9 @@
 class LayerTreeHostDelegatedTestTwoImplLayersTwoFrames
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -1926,7 +1926,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 };
@@ -1937,9 +1937,9 @@
 class LayerTreeHostDelegatedTestTwoLayers
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -2013,7 +2013,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 
@@ -2025,9 +2025,9 @@
 class LayerTreeHostDelegatedTestRemoveAndAddToTree
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -2105,7 +2105,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 
@@ -2117,9 +2117,9 @@
 class LayerTreeHostDelegatedTestRemoveAndChangeResources
     : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
  public:
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void DidCommitAndDrawFrame() override {
     scoped_ptr<DelegatedFrameData> frame;
     ReturnedResourceArray resources;
 
@@ -2187,7 +2187,7 @@
   }
 
   virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
-                                   bool result) OVERRIDE {
+                                   bool result) override {
     ReturnUnusedResourcesFromParent(host_impl);
   }
 
diff --git a/cc/trees/layer_tree_host_unittest_no_message_loop.cc b/cc/trees/layer_tree_host_unittest_no_message_loop.cc
index a48156b..fb0e2be 100644
--- a/cc/trees/layer_tree_host_unittest_no_message_loop.cc
+++ b/cc/trees/layer_tree_host_unittest_no_message_loop.cc
@@ -31,7 +31,7 @@
   virtual ~NoMessageLoopOutputSurface() {}
 
   // OutputSurface overrides.
-  virtual void SwapBuffers(CompositorFrame* frame) OVERRIDE {
+  virtual void SwapBuffers(CompositorFrame* frame) override {
     DCHECK(client_);
     client_->DidSwapBuffers();
     client_->DidSwapBuffersComplete();
@@ -53,34 +53,34 @@
   virtual ~LayerTreeHostNoMessageLoopTest() {}
 
   // LayerTreeHostClient overrides.
-  virtual void WillBeginMainFrame(int frame_id) OVERRIDE {}
-  virtual void BeginMainFrame(const BeginFrameArgs& args) OVERRIDE {}
-  virtual void DidBeginMainFrame() OVERRIDE {}
-  virtual void Layout() OVERRIDE {}
+  virtual void WillBeginMainFrame(int frame_id) override {}
+  virtual void BeginMainFrame(const BeginFrameArgs& args) override {}
+  virtual void DidBeginMainFrame() override {}
+  virtual void Layout() override {}
   virtual void ApplyViewportDeltas(const gfx::Vector2d& inner_delta,
                                    const gfx::Vector2d& outer_delta,
                                    float page_scale,
-                                   float top_controls_delta) OVERRIDE {}
+                                   float top_controls_delta) override {}
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float page_scale,
-                                   float top_controls_delta) OVERRIDE {}
-  virtual void RequestNewOutputSurface(bool fallback) OVERRIDE {
+                                   float top_controls_delta) override {}
+  virtual void RequestNewOutputSurface(bool fallback) override {
     layer_tree_host_->SetOutputSurface(
         make_scoped_ptr<OutputSurface>(new NoMessageLoopOutputSurface));
   }
-  virtual void DidInitializeOutputSurface() OVERRIDE {
+  virtual void DidInitializeOutputSurface() override {
     did_initialize_output_surface_ = true;
   }
-  virtual void WillCommit() OVERRIDE {}
-  virtual void DidCommit() OVERRIDE { did_commit_ = true; }
-  virtual void DidCommitAndDrawFrame() OVERRIDE {
+  virtual void WillCommit() override {}
+  virtual void DidCommit() override { did_commit_ = true; }
+  virtual void DidCommitAndDrawFrame() override {
     did_commit_and_draw_frame_ = true;
   }
-  virtual void DidCompleteSwapBuffers() OVERRIDE {}
+  virtual void DidCompleteSwapBuffers() override {}
 
   // LayerTreeHostSingleThreadClient overrides.
-  virtual void DidPostSwapBuffers() OVERRIDE {}
-  virtual void DidAbortSwapBuffers() OVERRIDE {}
+  virtual void DidPostSwapBuffers() override {}
+  virtual void DidAbortSwapBuffers() override {}
 
   void RunTest() {
     no_loop_thread_.Start();
@@ -88,7 +88,7 @@
   }
 
   // base::DelegateSimpleThread::Delegate override.
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     ASSERT_FALSE(base::MessageLoopProxy::current().get());
     RunTestWithoutMessageLoop();
     EXPECT_FALSE(base::MessageLoopProxy::current().get());
@@ -137,7 +137,7 @@
 class LayerTreeHostNoMessageLoopSmokeTest
     : public LayerTreeHostNoMessageLoopTest {
  protected:
-  virtual void RunTestWithoutMessageLoop() OVERRIDE {
+  virtual void RunTestWithoutMessageLoop() override {
     gfx::Size size(100, 100);
 
     // Set up root layer.
@@ -164,7 +164,7 @@
     : public LayerTreeHostNoMessageLoopTest,
       public DelegatedFrameResourceCollectionClient {
  protected:
-  virtual void RunTestWithoutMessageLoop() OVERRIDE {
+  virtual void RunTestWithoutMessageLoop() override {
     resource_collection_ = new DelegatedFrameResourceCollection;
     frame_provider_ = new DelegatedFrameProvider(
         resource_collection_.get(), CreateFrameDataWithResource(998));
@@ -198,7 +198,7 @@
   }
 
   // DelegatedFrameResourceCollectionClient overrides.
-  virtual void UnusedResourcesAreAvailable() OVERRIDE {}
+  virtual void UnusedResourcesAreAvailable() override {}
 
  private:
   scoped_ptr<DelegatedFrameData> CreateFrameDataWithResource(
diff --git a/cc/trees/layer_tree_host_unittest_occlusion.cc b/cc/trees/layer_tree_host_unittest_occlusion.cc
index 3a572d3..943299d 100644
--- a/cc/trees/layer_tree_host_unittest_occlusion.cc
+++ b/cc/trees/layer_tree_host_unittest_occlusion.cc
@@ -20,7 +20,7 @@
   }
 
   virtual bool Update(ResourceUpdateQueue* update_queue,
-                      const OcclusionTracker<Layer>* occlusion) OVERRIDE {
+                      const OcclusionTracker<Layer>* occlusion) override {
     if (!occlusion)
       return false;
 
@@ -60,18 +60,18 @@
         mask_(TestLayer::Create()) {
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     TestLayer* root = static_cast<TestLayer*>(layer_tree_host()->root_layer());
     VerifyOcclusion(root);
 
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   void VerifyOcclusion(TestLayer* layer) const {
     EXPECT_EQ(layer->expected_occlusion().ToString(),
@@ -99,7 +99,7 @@
   }
 
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->minimum_occlusion_tracking_size = gfx::Size();
   }
 
@@ -116,7 +116,7 @@
 class LayerTreeHostOcclusionTestOcclusionSurfaceClipping
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // The child layer is a surface and the grand_child is opaque, but clipped
     // to the child and root
     SetLayerPropertiesForTesting(
@@ -146,7 +146,7 @@
 class LayerTreeHostOcclusionTestOcclusionSurfaceClippingOpaque
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer is opaque, then it adds to the occlusion seen by the
     // root_.
     SetLayerPropertiesForTesting(
@@ -176,7 +176,7 @@
 class LayerTreeHostOcclusionTestOcclusionTwoChildren
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // Add a second child to the root layer and the regions should merge
     SetLayerPropertiesForTesting(
         root_.get(), NULL, identity_matrix_,
@@ -209,7 +209,7 @@
 class LayerTreeHostOcclusionTestOcclusionMask
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer has a mask on it, then it shouldn't contribute to
     // occlusion on stuff below it.
     SetLayerPropertiesForTesting(
@@ -242,7 +242,7 @@
 class LayerTreeHostOcclusionTestOcclusionMaskBelowOcclusion
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer with a mask is below child2, then child2 should
     // contribute to occlusion on everything, and child shouldn't contribute
     // to the root_.
@@ -278,7 +278,7 @@
 class LayerTreeHostOcclusionTestOcclusionOpacity
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer has a non-opaque opacity, then it shouldn't
     // contribute to occlusion on stuff below it
     SetLayerPropertiesForTesting(
@@ -311,7 +311,7 @@
 class LayerTreeHostOcclusionTestOcclusionOpacityBelowOcclusion
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer with non-opaque opacity is below child2, then
     // child2 should contribute to occlusion on everything, and child shouldn't
     // contribute to the root_.
@@ -347,7 +347,7 @@
 class LayerTreeHostOcclusionTestOcclusionBlending
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer has a blend mode, then it shouldn't
     // contribute to occlusion on stuff below it
     SetLayerPropertiesForTesting(
@@ -380,7 +380,7 @@
 class LayerTreeHostOcclusionTestOcclusionBlendingBelowOcclusion
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer with a blend mode is below child2, then
     // child2 should contribute to occlusion on everything, and child shouldn't
     // contribute to the root_.
@@ -415,7 +415,7 @@
 class LayerTreeHostOcclusionTestOcclusionOpacityFilter
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     FilterOperations filters;
     filters.Append(FilterOperation::CreateOpacityFilter(0.5f));
 
@@ -467,7 +467,7 @@
 class LayerTreeHostOcclusionTestOcclusionBlurFilter
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     gfx::Transform child_transform;
     child_transform.Translate(250.0, 250.0);
     child_transform.Rotate(90.0);
@@ -511,7 +511,7 @@
  public:
   static void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer has copy request, and is below child2,
     // then child should not inherit occlusion from outside its subtree.
     // The child layer will still receive occlusion from inside, and
@@ -546,7 +546,7 @@
 class LayerTreeHostOcclusionTestOcclusionReplica
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // If the child layer has copy request, and is below child2,
     // then child should not inherit occlusion from outside its subtree.
     // The child layer will still receive occlusion from inside, and
@@ -581,7 +581,7 @@
 class LayerTreeHostOcclusionTestManySurfaces
     : public LayerTreeHostOcclusionTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     // We create enough RenderSurfaces that it will trigger Vector reallocation
     // while computing occlusion.
     std::vector<scoped_refptr<TestLayer> > layers;
diff --git a/cc/trees/layer_tree_host_unittest_picture.cc b/cc/trees/layer_tree_host_unittest_picture.cc
index 731f692..a79d075 100644
--- a/cc/trees/layer_tree_host_unittest_picture.cc
+++ b/cc/trees/layer_tree_host_unittest_picture.cc
@@ -16,7 +16,7 @@
 // These tests deal with picture layers.
 class LayerTreeHostPictureTest : public LayerTreeTest {
  protected:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     // PictureLayer can only be used with impl side painting enabled.
     settings->impl_side_painting = true;
   }
@@ -24,7 +24,7 @@
 
 class LayerTreeHostPictureTestTwinLayer
     : public LayerTreeHostPictureTest {
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostPictureTest::SetupTree();
 
     scoped_refptr<FakePictureLayer> picture =
@@ -32,12 +32,12 @@
     layer_tree_host()->root_layer()->AddChild(picture);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     activates_ = 0;
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DidCommit() OVERRIDE {
+  virtual void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
       case 2:
         // Drop the picture layer from the tree.
@@ -52,7 +52,7 @@
     }
   }
 
-  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* pending_root_impl = impl->pending_tree()->root_layer();
     LayerImpl* active_root_impl = impl->active_tree()->root_layer();
 
@@ -88,7 +88,7 @@
     EXPECT_EQ(active_picture_impl, pending_picture_impl->twin_layer());
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* active_root_impl = impl->active_tree()->root_layer();
 
     if (active_root_impl->children().empty()) {
@@ -107,7 +107,7 @@
       EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   FakeContentLayerClient client_;
   int activates_;
diff --git a/cc/trees/layer_tree_host_unittest_proxy.cc b/cc/trees/layer_tree_host_unittest_proxy.cc
index 4f79311..5993479 100644
--- a/cc/trees/layer_tree_host_unittest_proxy.cc
+++ b/cc/trees/layer_tree_host_unittest_proxy.cc
@@ -37,8 +37,8 @@
     RunTest(threaded, delegating_renderer, impl_side_painting);
   }
 
-  virtual void BeginTest() OVERRIDE {}
-  virtual void AfterTest() OVERRIDE {}
+  virtual void BeginTest() override {}
+  virtual void AfterTest() override {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ProxyTest);
@@ -46,28 +46,28 @@
 
 class ProxyTestScheduledActionsBasic : public ProxyTest {
  protected:
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     proxy()->SetNeedsCommit();
   }
 
-  virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {
+  virtual void ScheduledActionBeginOutputSurfaceCreation() override {
     EXPECT_EQ(0, action_phase_++);
   }
 
-  virtual void ScheduledActionSendBeginMainFrame() OVERRIDE {
+  virtual void ScheduledActionSendBeginMainFrame() override {
     EXPECT_EQ(1, action_phase_++);
   }
 
-  virtual void ScheduledActionCommit() OVERRIDE {
+  virtual void ScheduledActionCommit() override {
     EXPECT_EQ(2, action_phase_++);
   }
 
-  virtual void ScheduledActionDrawAndSwapIfPossible() OVERRIDE {
+  virtual void ScheduledActionDrawAndSwapIfPossible() override {
     EXPECT_EQ(3, action_phase_++);
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(4, action_phase_);
   }
 
@@ -109,7 +109,7 @@
   ThreadProxyTestSetNeedsCommit() {}
   virtual ~ThreadProxyTestSetNeedsCommit() {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     EXPECT_FALSE(ThreadProxyMainOnly().commit_requested);
     EXPECT_FALSE(ThreadProxyMainOnly().commit_request_sent_to_impl_thread);
 
@@ -119,7 +119,7 @@
     EXPECT_TRUE(ThreadProxyMainOnly().commit_request_sent_to_impl_thread);
   }
 
-  virtual void DidBeginMainFrame() OVERRIDE {
+  virtual void DidBeginMainFrame() override {
     EXPECT_FALSE(ThreadProxyMainOnly().commit_requested);
     EXPECT_FALSE(ThreadProxyMainOnly().commit_request_sent_to_impl_thread);
 
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc
index 4f18d00..82cee89 100644
--- a/cc/trees/layer_tree_host_unittest_scroll.cc
+++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -33,7 +33,7 @@
         scroll_amount_(2, -1),
         num_scrolls_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     Layer* root_layer = layer_tree_host()->root_layer();
     scoped_refptr<Layer> scroll_layer = Layer::Create();
     root_layer->AddChild(scroll_layer);
@@ -48,7 +48,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void Layout() OVERRIDE {
+  virtual void Layout() override {
     Layer* root = layer_tree_host()->root_layer();
     Layer* scroll_layer = root->children()[0].get();
     if (!layer_tree_host()->source_frame_number()) {
@@ -63,7 +63,7 @@
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* root = impl->active_tree()->root_layer();
     LayerImpl* scroll_layer = root->children()[0];
     EXPECT_VECTOR_EQ(gfx::Vector2d(), scroll_layer->ScrollDelta());
@@ -89,11 +89,11 @@
 
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float scale,
-                                   float top_controls_delta) OVERRIDE {
+                                   float top_controls_delta) override {
     num_scrolls_++;
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, num_scrolls_); }
+  virtual void AfterTest() override { EXPECT_EQ(1, num_scrolls_); }
 
  private:
   gfx::ScrollOffset initial_scroll_;
@@ -110,7 +110,7 @@
   LayerTreeHostScrollTestScrollMultipleRedraw()
       : initial_scroll_(40, 10), scroll_amount_(-3, 17), num_scrolls_(0) {}
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     Layer* root_layer = layer_tree_host()->root_layer();
     scroll_layer_ = Layer::Create();
     root_layer->AddChild(scroll_layer_);
@@ -125,7 +125,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override {
     switch (layer_tree_host()->source_frame_number()) {
       case 0:
         EXPECT_VECTOR_EQ(scroll_layer_->scroll_offset(), initial_scroll_);
@@ -144,7 +144,7 @@
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* scroll_layer =
         impl->active_tree()->LayerById(scroll_layer_->id());
     if (impl->active_tree()->source_frame_number() == 0 &&
@@ -180,11 +180,11 @@
 
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float scale,
-                                   float top_controls_delta) OVERRIDE {
+                                   float top_controls_delta) override {
     num_scrolls_++;
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, num_scrolls_); }
+  virtual void AfterTest() override { EXPECT_EQ(1, num_scrolls_); }
 
  private:
   gfx::ScrollOffset initial_scroll_;
@@ -210,9 +210,9 @@
         num_impl_commits_(0),
         num_impl_scrolls_(0) {}
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
     Layer* root_layer = layer_tree_host()->root_layer();
     scoped_refptr<Layer> root_scroll_layer = Layer::Create();
@@ -228,7 +228,7 @@
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f);
   }
 
-  virtual void WillBeginMainFrame() OVERRIDE {
+  virtual void WillBeginMainFrame() override {
     num_will_begin_main_frames_++;
     Layer* root_scroll_layer =
         layer_tree_host()->root_layer()->children()[0].get();
@@ -280,17 +280,17 @@
     }
   }
 
-  virtual void DidBeginMainFrame() OVERRIDE { num_did_begin_main_frames_++; }
+  virtual void DidBeginMainFrame() override { num_did_begin_main_frames_++; }
 
-  virtual void WillCommit() OVERRIDE { num_will_commits_++; }
+  virtual void WillCommit() override { num_will_commits_++; }
 
-  virtual void DidCommit() OVERRIDE { num_did_commits_++; }
+  virtual void DidCommit() override { num_did_commits_++; }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override {
     num_impl_commits_++;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* root_scroll_layer =
         impl->active_tree()->root_layer()->children()[0];
 
@@ -360,11 +360,11 @@
 
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float scale,
-                                   float top_controls_delta) OVERRIDE {
+                                   float top_controls_delta) override {
     num_impl_scrolls_++;
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(3, num_impl_scrolls_);
     // Verify that the embedder sees aborted commits as real commits.
     EXPECT_EQ(4, num_will_begin_main_frames_);
@@ -394,7 +394,7 @@
  public:
   LayerTreeHostScrollTestFractionalScroll() : scroll_amount_(1.75, 0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
     Layer* root_layer = layer_tree_host()->root_layer();
     scoped_refptr<Layer> root_scroll_layer = Layer::Create();
@@ -411,11 +411,11 @@
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* root = impl->active_tree()->root_layer();
     LayerImpl* scroll_layer = root->children()[0];
 
@@ -447,7 +447,7 @@
     scroll_layer->ScrollBy(scroll_amount_);
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   gfx::Vector2dF scroll_amount_;
@@ -463,7 +463,7 @@
         scroll_amount_(2, -1),
         num_scrolls_(0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_);
 
     scoped_refptr<Layer> root_layer = Layer::Create();
@@ -516,9 +516,9 @@
     LayerTreeHostScrollTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void WillCommit() OVERRIDE {
+  virtual void WillCommit() override {
     // Keep the test committing (otherwise the early out for no update
     // will stall the test).
     if (layer_tree_host()->source_frame_number() < 2) {
@@ -532,11 +532,11 @@
 
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float scale,
-                                   float top_controls_delta) OVERRIDE {
+                                   float top_controls_delta) override {
     num_scrolls_++;
   }
 
-  virtual void Layout() OVERRIDE {
+  virtual void Layout() override {
     EXPECT_VECTOR_EQ(gfx::Vector2d(),
                      expected_no_scroll_layer_->scroll_offset());
 
@@ -561,7 +561,7 @@
     }
   }
 
-  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* root_impl = impl->active_tree()->root_layer();
     FakePictureLayerImpl* root_scroll_layer_impl =
         static_cast<FakePictureLayerImpl*>(root_impl->children()[0]);
@@ -632,7 +632,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     if (scroll_child_layer_) {
       EXPECT_EQ(0, num_scrolls_);
       EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(javascript_scroll_,
@@ -748,11 +748,11 @@
 
 class ImplSidePaintingScrollTest : public LayerTreeHostScrollTest {
  public:
-  virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+  virtual void InitializeSettings(LayerTreeSettings* settings) override {
     settings->impl_side_painting = true;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     if (impl->pending_tree())
       impl->SetNeedsRedraw();
   }
@@ -767,7 +767,7 @@
         impl_thread_scroll2_(-3, 10),
         num_scrolls_(0) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
     Layer* root_layer = layer_tree_host()->root_layer();
     scoped_refptr<Layer> root_scroll_layer = Layer::Create();
@@ -785,11 +785,11 @@
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void Layout() OVERRIDE {
+  virtual void Layout() override {
     Layer* root = layer_tree_host()->root_layer();
     Layer* scroll_layer = root->children()[0].get();
     if (!layer_tree_host()->source_frame_number()) {
@@ -807,14 +807,14 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     // We force a second draw here of the first commit before activating
     // the second commit.
     if (impl->active_tree()->source_frame_number() == 0)
       impl->SetNeedsRedraw();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     ImplSidePaintingScrollTest::DrawLayersOnThread(impl);
 
     LayerImpl* root = impl->active_tree()->root_layer();
@@ -874,11 +874,11 @@
 
   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
                                    float scale,
-                                   float top_controls_delta) OVERRIDE {
+                                   float top_controls_delta) override {
     num_scrolls_++;
   }
 
-  virtual void AfterTest() OVERRIDE { EXPECT_EQ(1, num_scrolls_); }
+  virtual void AfterTest() override { EXPECT_EQ(1, num_scrolls_); }
 
  private:
   gfx::ScrollOffset initial_scroll_;
@@ -900,7 +900,7 @@
   ImplSidePaintingScrollTestImplOnlyScroll()
       : initial_scroll_(20, 10), impl_thread_scroll_(-2, 3) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeHostScrollTest::SetupTree();
     Layer* root_layer = layer_tree_host()->root_layer();
     scoped_refptr<Layer> root_scroll_layer = Layer::Create();
@@ -918,11 +918,11 @@
     layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f);
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void WillCommit() OVERRIDE {
+  virtual void WillCommit() override {
     Layer* root = layer_tree_host()->root_layer();
     Layer* scroll_layer = root->children()[0].get();
     switch (layer_tree_host()->source_frame_number()) {
@@ -938,7 +938,7 @@
     }
   }
 
-  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void BeginCommitOnThread(LayerTreeHostImpl* impl) override {
     // Scroll after the 2nd commit has started.
     if (impl->active_tree()->source_frame_number() == 0) {
       LayerImpl* active_root = impl->active_tree()->root_layer();
@@ -949,7 +949,7 @@
     }
   }
 
-  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
     // We force a second draw here of the first commit before activating
     // the second commit.
     LayerImpl* active_root = impl->active_tree()->root_layer();
@@ -998,7 +998,7 @@
     }
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     ImplSidePaintingScrollTest::DrawLayersOnThread(impl);
 
     LayerImpl* root = impl->active_tree()->root_layer();
@@ -1020,7 +1020,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
  private:
   gfx::ScrollOffset initial_scroll_;
@@ -1034,15 +1034,15 @@
  public:
   LayerTreeHostScrollTestScrollZeroMaxScrollOffset() {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     LayerTreeTest::SetupTree();
     scoped_refptr<Layer> scroll_layer = Layer::Create();
     layer_tree_host()->root_layer()->AddChild(scroll_layer);
   }
 
-  virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
+  virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* root = impl->active_tree()->root_layer();
     LayerImpl* scroll_layer = root->children()[0];
     scroll_layer->SetScrollClipLayer(root->id());
@@ -1069,7 +1069,7 @@
     EndTest();
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 };
 
 SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -1081,17 +1081,17 @@
                                    bool* received_stop_flinging)
       : task_runner_(runner), received_stop_flinging_(received_stop_flinging) {}
 
-  virtual void WillShutdown() OVERRIDE {
+  virtual void WillShutdown() override {
     if (!received_stop_flinging_)
       ADD_FAILURE() << "WillShutdown() called before fling stopped";
   }
 
-  virtual void Animate(base::TimeTicks time) OVERRIDE {
+  virtual void Animate(base::TimeTicks time) override {
     if (!task_runner_->BelongsToCurrentThread())
       ADD_FAILURE() << "Animate called on wrong thread";
   }
 
-  virtual void MainThreadHasStoppedFlinging() OVERRIDE {
+  virtual void MainThreadHasStoppedFlinging() override {
     if (!task_runner_->BelongsToCurrentThread())
       ADD_FAILURE() << "MainThreadHasStoppedFlinging called on wrong thread";
     *received_stop_flinging_ = true;
@@ -1100,7 +1100,7 @@
   virtual void DidOverscroll(
       const gfx::PointF& causal_event_viewport_point,
       const gfx::Vector2dF& accumulated_overscroll,
-      const gfx::Vector2dF& latest_overscroll_delta) OVERRIDE {
+      const gfx::Vector2dF& latest_overscroll_delta) override {
     if (!task_runner_->BelongsToCurrentThread())
       ADD_FAILURE() << "DidOverscroll called on wrong thread";
   }
@@ -1155,7 +1155,7 @@
   LayerTreeHostScrollTestLayerStructureChange()
       : scroll_destroy_whole_tree_(false) {}
 
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root_layer = Layer::Create();
     root_layer->SetBounds(gfx::Size(10, 10));
 
@@ -1168,11 +1168,11 @@
     LayerTreeHostScrollTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     PostSetNeedsCommitToMainThread();
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
     LayerImpl* root = impl->active_tree()->root_layer();
     switch (impl->active_tree()->source_frame_number()) {
       case 0:
@@ -1187,7 +1187,7 @@
     }
   }
 
-  virtual void AfterTest() OVERRIDE {}
+  virtual void AfterTest() override {}
 
   virtual void DidScroll(Layer* layer) {
     if (scroll_destroy_whole_tree_) {
diff --git a/cc/trees/layer_tree_host_unittest_video.cc b/cc/trees/layer_tree_host_unittest_video.cc
index 7d0bb41..8d8b130 100644
--- a/cc/trees/layer_tree_host_unittest_video.cc
+++ b/cc/trees/layer_tree_host_unittest_video.cc
@@ -22,7 +22,7 @@
 class LayerTreeHostVideoTestSetNeedsDisplay
     : public LayerTreeHostVideoTest {
  public:
-  virtual void SetupTree() OVERRIDE {
+  virtual void SetupTree() override {
     scoped_refptr<Layer> root = Layer::Create();
     root->SetBounds(gfx::Size(10, 10));
     root->SetIsDrawable(true);
@@ -39,14 +39,14 @@
     LayerTreeHostVideoTest::SetupTree();
   }
 
-  virtual void BeginTest() OVERRIDE {
+  virtual void BeginTest() override {
     num_draws_ = 0;
     PostSetNeedsCommitToMainThread();
   }
 
   virtual DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
                                            LayerTreeHostImpl::FrameData* frame,
-                                           DrawResult draw_result) OVERRIDE {
+                                           DrawResult draw_result) override {
     LayerImpl* root_layer = host_impl->active_tree()->root_layer();
     RenderSurfaceImpl* root_surface = root_layer->render_surface();
     gfx::RectF damage_rect =
@@ -70,7 +70,7 @@
     return draw_result;
   }
 
-  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+  virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
     VideoLayerImpl* video = static_cast<VideoLayerImpl*>(
         host_impl->active_tree()->root_layer()->children()[0]);
 
@@ -82,7 +82,7 @@
     ++num_draws_;
   }
 
-  virtual void AfterTest() OVERRIDE {
+  virtual void AfterTest() override {
     EXPECT_EQ(2, num_draws_);
   }
 
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 948c2ba..f5dda6e 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -50,16 +50,16 @@
 
   // LayerScrollOffsetDelegate implementation.
   virtual void SetTotalScrollOffset(
-      const gfx::ScrollOffset& new_offset) OVERRIDE {
+      const gfx::ScrollOffset& new_offset) override {
     last_set_scroll_offset_ = new_offset;
     layer_tree_impl_->UpdateScrollOffsetDelegate();
   }
 
-  virtual gfx::ScrollOffset GetTotalScrollOffset() OVERRIDE {
+  virtual gfx::ScrollOffset GetTotalScrollOffset() override {
     return layer_tree_impl_->GetDelegatedScrollOffset(layer_);
   }
 
-  virtual bool IsExternalFlingActive() const OVERRIDE {
+  virtual bool IsExternalFlingActive() const override {
     return delegate_->IsExternalFlingActive();
   }
 
@@ -296,7 +296,7 @@
     return;
 
   while (current_layer) {
-    current_layer->ScrollbarParametersDidChange();
+    current_layer->ScrollbarParametersDidChange(false);
     current_layer = current_layer->parent();
   }
 }
@@ -792,16 +792,25 @@
   DCHECK(settings().scrollbar_fade_duration_ms);
   base::TimeDelta delay =
       base::TimeDelta::FromMilliseconds(settings().scrollbar_fade_delay_ms);
+  base::TimeDelta resize_delay = base::TimeDelta::FromMilliseconds(
+      settings().scrollbar_fade_resize_delay_ms);
   base::TimeDelta duration =
       base::TimeDelta::FromMilliseconds(settings().scrollbar_fade_duration_ms);
   switch (settings().scrollbar_animator) {
     case LayerTreeSettings::LinearFade: {
       return ScrollbarAnimationControllerLinearFade::Create(
-          scrolling_layer, layer_tree_host_impl_, delay, duration);
+          scrolling_layer,
+          layer_tree_host_impl_,
+          delay,
+          resize_delay,
+          duration);
     }
     case LayerTreeSettings::Thinning: {
-      return ScrollbarAnimationControllerThinning::Create(
-          scrolling_layer, layer_tree_host_impl_, delay, duration);
+      return ScrollbarAnimationControllerThinning::Create(scrolling_layer,
+                                                          layer_tree_host_impl_,
+                                                          delay,
+                                                          resize_delay,
+                                                          duration);
     }
     case LayerTreeSettings::NoAnimator:
       NOTREACHED();
diff --git a/cc/trees/layer_tree_settings.cc b/cc/trees/layer_tree_settings.cc
index b28272d..a304cba 100644
--- a/cc/trees/layer_tree_settings.cc
+++ b/cc/trees/layer_tree_settings.cc
@@ -33,6 +33,7 @@
       create_low_res_tiling(false),
       scrollbar_animator(NoAnimator),
       scrollbar_fade_delay_ms(0),
+      scrollbar_fade_resize_delay_ms(0),
       scrollbar_fade_duration_ms(0),
       solid_color_scrollbar_color(SK_ColorWHITE),
       calculate_top_controls_position(false),
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index a8ef483..cd3eb42 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -48,6 +48,7 @@
   };
   ScrollbarAnimator scrollbar_animator;
   int scrollbar_fade_delay_ms;
+  int scrollbar_fade_resize_delay_ms;
   int scrollbar_fade_duration_ms;
   SkColor solid_color_scrollbar_color;
   bool calculate_top_controls_position;
diff --git a/cc/trees/occlusion.cc b/cc/trees/occlusion.cc
index d9da938..70ee32c 100644
--- a/cc/trees/occlusion.cc
+++ b/cc/trees/occlusion.cc
@@ -20,14 +20,23 @@
       occlusion_from_inside_target_(occlusion_from_inside_target) {
 }
 
+Occlusion Occlusion::GetOcclusionWithGivenDrawTransform(
+    const gfx::Transform& transform) const {
+  return Occlusion(
+      transform, occlusion_from_outside_target_, occlusion_from_inside_target_);
+}
+
+bool Occlusion::HasOcclusion() const {
+  return !occlusion_from_inside_target_.IsEmpty() ||
+         !occlusion_from_outside_target_.IsEmpty();
+}
+
 bool Occlusion::IsOccluded(const gfx::Rect& content_rect) const {
   if (content_rect.IsEmpty())
     return true;
 
-  if (occlusion_from_inside_target_.IsEmpty() &&
-      occlusion_from_outside_target_.IsEmpty()) {
+  if (!HasOcclusion())
     return false;
-  }
 
   gfx::Rect unoccluded_rect_in_target_surface =
       GetUnoccludedRectInTargetSurface(content_rect);
@@ -39,10 +48,8 @@
   if (content_rect.IsEmpty())
     return content_rect;
 
-  if (occlusion_from_inside_target_.IsEmpty() &&
-      occlusion_from_outside_target_.IsEmpty()) {
+  if (!HasOcclusion())
     return content_rect;
-  }
 
   gfx::Rect unoccluded_rect_in_target_surface =
       GetUnoccludedRectInTargetSurface(content_rect);
diff --git a/cc/trees/occlusion.h b/cc/trees/occlusion.h
index 60493cc..6d1e5b1 100644
--- a/cc/trees/occlusion.h
+++ b/cc/trees/occlusion.h
@@ -19,7 +19,10 @@
   Occlusion(const gfx::Transform& draw_transform,
             const SimpleEnclosedRegion& occlusion_from_outside_target,
             const SimpleEnclosedRegion& occlusion_from_inside_target);
+  Occlusion GetOcclusionWithGivenDrawTransform(
+      const gfx::Transform& transform) const;
 
+  bool HasOcclusion() const;
   bool IsOccluded(const gfx::Rect& content_rect) const;
   gfx::Rect GetUnoccludedContentRect(const gfx::Rect& content_rect) const;
 
diff --git a/cc/trees/occlusion_tracker_unittest.cc b/cc/trees/occlusion_tracker_unittest.cc
index 3c6c440..6ab3397 100644
--- a/cc/trees/occlusion_tracker_unittest.cc
+++ b/cc/trees/occlusion_tracker_unittest.cc
@@ -33,7 +33,7 @@
     SetIsDrawable(true);
   }
 
-  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE {
+  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const override {
     if (override_opaque_contents_rect_) {
       return SimpleEnclosedRegion(
           gfx::IntersectRects(opaque_contents_rect_, visible_content_rect()));
@@ -59,7 +59,7 @@
     SetDrawsContent(true);
   }
 
-  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE {
+  virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const override {
     if (override_opaque_contents_rect_) {
       return SimpleEnclosedRegion(
           gfx::IntersectRects(opaque_contents_rect_, visible_content_rect()));
diff --git a/cc/trees/occlusion_unittest.cc b/cc/trees/occlusion_unittest.cc
new file mode 100644
index 0000000..becc7a3
--- /dev/null
+++ b/cc/trees/occlusion_unittest.cc
@@ -0,0 +1,272 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/trees/occlusion.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cc {
+namespace {
+
+TEST(OcclusionTest, HasOcclusion) {
+  Occlusion empty;
+  EXPECT_FALSE(empty.HasOcclusion());
+
+  empty = Occlusion(
+      gfx::Transform(), SimpleEnclosedRegion(), SimpleEnclosedRegion());
+  EXPECT_FALSE(empty.HasOcclusion());
+
+  Occlusion outside_nonempty(
+      gfx::Transform(), SimpleEnclosedRegion(10, 10), SimpleEnclosedRegion());
+  EXPECT_TRUE(outside_nonempty.HasOcclusion());
+
+  Occlusion inside_nonempty(
+      gfx::Transform(), SimpleEnclosedRegion(), SimpleEnclosedRegion(10, 10));
+  EXPECT_TRUE(inside_nonempty.HasOcclusion());
+
+  Occlusion both_nonempty(gfx::Transform(),
+                          SimpleEnclosedRegion(10, 10),
+                          SimpleEnclosedRegion(10, 10));
+  EXPECT_TRUE(both_nonempty.HasOcclusion());
+}
+
+#define EXPECT_OCCLUSION(occlusion, rects, ...)              \
+  {                                                          \
+    bool expected[] = {__VA_ARGS__};                         \
+    ASSERT_EQ(arraysize(rects), arraysize(expected));        \
+    for (size_t i = 0; i < arraysize(rects); ++i)            \
+      EXPECT_EQ(expected[i], occlusion.IsOccluded(rects[i])) \
+          << "Test failed for index " << i << ".";           \
+  }
+
+TEST(OcclusionTest, IsOccludedNoTransform) {
+  gfx::Rect rects[] = {gfx::Rect(10, 10),
+                       gfx::Rect(10, 0, 10, 10),
+                       gfx::Rect(0, 10, 10, 10),
+                       gfx::Rect(10, 10, 10, 10)};
+
+  Occlusion no_occlusion;
+  EXPECT_OCCLUSION(no_occlusion, rects, false, false, false, false);
+
+  Occlusion all_occluded_outside(
+      gfx::Transform(), SimpleEnclosedRegion(20, 20), SimpleEnclosedRegion());
+  EXPECT_OCCLUSION(all_occluded_outside, rects, true, true, true, true);
+
+  Occlusion all_occluded_inside(
+      gfx::Transform(), SimpleEnclosedRegion(), SimpleEnclosedRegion(20, 20));
+  EXPECT_OCCLUSION(all_occluded_inside, rects, true, true, true, true);
+
+  Occlusion all_occluded_mixed(gfx::Transform(),
+                               SimpleEnclosedRegion(10, 20),
+                               SimpleEnclosedRegion(10, 0, 10, 20));
+  EXPECT_OCCLUSION(all_occluded_mixed, rects, true, true, true, true);
+
+  Occlusion some_occluded(gfx::Transform(),
+                          SimpleEnclosedRegion(10, 10),
+                          SimpleEnclosedRegion(10, 10, 10, 10));
+  EXPECT_OCCLUSION(some_occluded, rects, true, false, false, true);
+}
+
+TEST(OcclusionTest, IsOccludedScaled) {
+  gfx::Rect rects[] = {gfx::Rect(10, 10),
+                       gfx::Rect(10, 0, 10, 10),
+                       gfx::Rect(0, 10, 10, 10),
+                       gfx::Rect(10, 10, 10, 10)};
+
+  gfx::Transform half_scale;
+  half_scale.Scale(0.5, 0.5);
+
+  gfx::Transform double_scale;
+  double_scale.Scale(2, 2);
+
+  Occlusion all_occluded_outside_half(
+      half_scale, SimpleEnclosedRegion(10, 10), SimpleEnclosedRegion());
+  Occlusion all_occluded_outside_double(
+      double_scale, SimpleEnclosedRegion(40, 40), SimpleEnclosedRegion());
+  EXPECT_OCCLUSION(all_occluded_outside_half, rects, true, true, true, true);
+  EXPECT_OCCLUSION(all_occluded_outside_double, rects, true, true, true, true);
+
+  Occlusion all_occluded_inside_half(
+      half_scale, SimpleEnclosedRegion(), SimpleEnclosedRegion(10, 10));
+  Occlusion all_occluded_inside_double(
+      double_scale, SimpleEnclosedRegion(), SimpleEnclosedRegion(40, 40));
+  EXPECT_OCCLUSION(all_occluded_inside_half, rects, true, true, true, true);
+  EXPECT_OCCLUSION(all_occluded_inside_double, rects, true, true, true, true);
+
+  Occlusion all_occluded_mixed_half(half_scale,
+                                    SimpleEnclosedRegion(5, 10),
+                                    SimpleEnclosedRegion(5, 0, 5, 10));
+  Occlusion all_occluded_mixed_double(double_scale,
+                                      SimpleEnclosedRegion(20, 40),
+                                      SimpleEnclosedRegion(20, 0, 20, 40));
+  EXPECT_OCCLUSION(all_occluded_mixed_half, rects, true, true, true, true);
+  EXPECT_OCCLUSION(all_occluded_mixed_double, rects, true, true, true, true);
+
+  Occlusion some_occluded_half(
+      half_scale, SimpleEnclosedRegion(5, 5), SimpleEnclosedRegion(5, 5, 5, 5));
+  Occlusion some_occluded_double(double_scale,
+                                 SimpleEnclosedRegion(20, 20),
+                                 SimpleEnclosedRegion(20, 20, 20, 20));
+  EXPECT_OCCLUSION(some_occluded_half, rects, true, false, false, true);
+  EXPECT_OCCLUSION(some_occluded_double, rects, true, false, false, true);
+}
+
+TEST(OcclusionTest, IsOccludedTranslated) {
+  gfx::Rect rects[] = {gfx::Rect(10, 10),
+                       gfx::Rect(10, 0, 10, 10),
+                       gfx::Rect(0, 10, 10, 10),
+                       gfx::Rect(10, 10, 10, 10)};
+
+  gfx::Transform move_left;
+  move_left.Translate(-100, 0);
+
+  gfx::Transform move_down;
+  move_down.Translate(0, 100);
+
+  Occlusion all_occluded_outside_left(
+      move_left, SimpleEnclosedRegion(-100, 0, 20, 20), SimpleEnclosedRegion());
+  Occlusion all_occluded_outside_down(
+      move_down, SimpleEnclosedRegion(0, 100, 20, 20), SimpleEnclosedRegion());
+  EXPECT_OCCLUSION(all_occluded_outside_left, rects, true, true, true, true);
+  EXPECT_OCCLUSION(all_occluded_outside_down, rects, true, true, true, true);
+
+  Occlusion all_occluded_inside_left(
+      move_left, SimpleEnclosedRegion(), SimpleEnclosedRegion(-100, 0, 20, 20));
+  Occlusion all_occluded_inside_down(
+      move_down, SimpleEnclosedRegion(), SimpleEnclosedRegion(0, 100, 20, 20));
+  EXPECT_OCCLUSION(all_occluded_inside_left, rects, true, true, true, true);
+  EXPECT_OCCLUSION(all_occluded_inside_down, rects, true, true, true, true);
+
+  Occlusion all_occluded_mixed_left(move_left,
+                                    SimpleEnclosedRegion(-100, 0, 10, 20),
+                                    SimpleEnclosedRegion(-90, 0, 10, 20));
+  Occlusion all_occluded_mixed_down(move_down,
+                                    SimpleEnclosedRegion(0, 100, 10, 20),
+                                    SimpleEnclosedRegion(10, 100, 10, 20));
+  EXPECT_OCCLUSION(all_occluded_mixed_left, rects, true, true, true, true);
+  EXPECT_OCCLUSION(all_occluded_mixed_down, rects, true, true, true, true);
+
+  Occlusion some_occluded_left(move_left,
+                               SimpleEnclosedRegion(-100, 0, 10, 10),
+                               SimpleEnclosedRegion(-90, 10, 10, 10));
+  Occlusion some_occluded_down(move_down,
+                               SimpleEnclosedRegion(0, 100, 10, 10),
+                               SimpleEnclosedRegion(10, 110, 10, 10));
+  EXPECT_OCCLUSION(some_occluded_left, rects, true, false, false, true);
+  EXPECT_OCCLUSION(some_occluded_down, rects, true, false, false, true);
+}
+
+TEST(OcclusionTest, IsOccludedScaledAfterConstruction) {
+  gfx::Rect rects[] = {gfx::Rect(10, 10),
+                       gfx::Rect(10, 0, 10, 10),
+                       gfx::Rect(0, 10, 10, 10),
+                       gfx::Rect(10, 10, 10, 10)};
+
+  gfx::Transform half_transform;
+  half_transform.Scale(0.5, 0.5);
+
+  gfx::Transform double_transform;
+  double_transform.Scale(2, 2);
+
+  Occlusion all_occluded_outside(
+      gfx::Transform(), SimpleEnclosedRegion(10, 10), SimpleEnclosedRegion());
+  Occlusion all_occluded_outside_half =
+      all_occluded_outside.GetOcclusionWithGivenDrawTransform(half_transform);
+
+  all_occluded_outside = Occlusion(
+      gfx::Transform(), SimpleEnclosedRegion(40, 40), SimpleEnclosedRegion());
+  Occlusion all_occluded_outside_double =
+      all_occluded_outside.GetOcclusionWithGivenDrawTransform(double_transform);
+
+  EXPECT_OCCLUSION(all_occluded_outside_half, rects, true, true, true, true);
+  EXPECT_OCCLUSION(all_occluded_outside_double, rects, true, true, true, true);
+
+  Occlusion some_occluded(gfx::Transform(),
+                          SimpleEnclosedRegion(5, 5),
+                          SimpleEnclosedRegion(5, 5, 5, 5));
+  Occlusion some_occluded_half =
+      some_occluded.GetOcclusionWithGivenDrawTransform(half_transform);
+
+  some_occluded = Occlusion(gfx::Transform(),
+                            SimpleEnclosedRegion(20, 20),
+                            SimpleEnclosedRegion(20, 20, 20, 20));
+  Occlusion some_occluded_double =
+      some_occluded.GetOcclusionWithGivenDrawTransform(double_transform);
+
+  EXPECT_OCCLUSION(some_occluded_half, rects, true, false, false, true);
+  EXPECT_OCCLUSION(some_occluded_double, rects, true, false, false, true);
+}
+
+TEST(OcclusionTest, GetUnoccludedContentRectNoTransform) {
+  Occlusion some_occluded(gfx::Transform(),
+                          SimpleEnclosedRegion(10, 10),
+                          SimpleEnclosedRegion(10, 10, 10, 10));
+
+  gfx::Rect full_query_result =
+      some_occluded.GetUnoccludedContentRect(gfx::Rect(20, 20));
+  EXPECT_EQ(gfx::Rect(20, 20), full_query_result);
+
+  gfx::Rect half_query_result =
+      some_occluded.GetUnoccludedContentRect(gfx::Rect(10, 0, 10, 20));
+  EXPECT_EQ(gfx::Rect(10, 0, 10, 10), half_query_result);
+}
+
+TEST(OcclusionTest, GetUnoccludedContentRectScaled) {
+  gfx::Transform half_scale;
+  half_scale.Scale(0.5, 0.5);
+
+  gfx::Transform double_scale;
+  double_scale.Scale(2, 2);
+
+  Occlusion some_occluded_half(
+      half_scale, SimpleEnclosedRegion(5, 5), SimpleEnclosedRegion(5, 5, 5, 5));
+  Occlusion some_occluded_double(double_scale,
+                                 SimpleEnclosedRegion(20, 20),
+                                 SimpleEnclosedRegion(20, 20, 20, 20));
+  gfx::Rect full_query_result_half =
+      some_occluded_half.GetUnoccludedContentRect(gfx::Rect(20, 20));
+  gfx::Rect full_query_result_double =
+      some_occluded_double.GetUnoccludedContentRect(gfx::Rect(20, 20));
+  EXPECT_EQ(gfx::Rect(20, 20), full_query_result_half);
+  EXPECT_EQ(gfx::Rect(20, 20), full_query_result_double);
+
+  gfx::Rect half_query_result_half =
+      some_occluded_half.GetUnoccludedContentRect(gfx::Rect(10, 0, 10, 20));
+  gfx::Rect half_query_result_double =
+      some_occluded_half.GetUnoccludedContentRect(gfx::Rect(10, 0, 10, 20));
+  EXPECT_EQ(gfx::Rect(10, 0, 10, 10), half_query_result_half);
+  EXPECT_EQ(gfx::Rect(10, 0, 10, 10), half_query_result_double);
+}
+
+TEST(OcclusionTest, GetUnoccludedContentRectTranslated) {
+  gfx::Transform move_left;
+  move_left.Translate(-100, 0);
+
+  gfx::Transform move_down;
+  move_down.Translate(0, 100);
+
+  Occlusion some_occluded_left(move_left,
+                               SimpleEnclosedRegion(-100, 0, 10, 10),
+                               SimpleEnclosedRegion(-90, 10, 10, 10));
+  Occlusion some_occluded_down(move_down,
+                               SimpleEnclosedRegion(0, 100, 0, 10),
+                               SimpleEnclosedRegion(10, 110, 10, 10));
+
+  gfx::Rect full_query_result_left =
+      some_occluded_left.GetUnoccludedContentRect(gfx::Rect(20, 20));
+  gfx::Rect full_query_result_down =
+      some_occluded_down.GetUnoccludedContentRect(gfx::Rect(20, 20));
+  EXPECT_EQ(gfx::Rect(20, 20), full_query_result_left);
+  EXPECT_EQ(gfx::Rect(20, 20), full_query_result_down);
+
+  gfx::Rect half_query_result_left =
+      some_occluded_left.GetUnoccludedContentRect(gfx::Rect(10, 0, 10, 20));
+  gfx::Rect half_query_result_down =
+      some_occluded_down.GetUnoccludedContentRect(gfx::Rect(10, 0, 10, 20));
+  EXPECT_EQ(gfx::Rect(10, 0, 10, 10), half_query_result_left);
+  EXPECT_EQ(gfx::Rect(10, 0, 10, 10), half_query_result_down);
+}
+
+}  // namespace
+}  // namespace cc
diff --git a/cc/trees/single_thread_proxy.h b/cc/trees/single_thread_proxy.h
index 17aec8e..21b9f88 100644
--- a/cc/trees/single_thread_proxy.h
+++ b/cc/trees/single_thread_proxy.h
@@ -32,79 +32,79 @@
   virtual ~SingleThreadProxy();
 
   // Proxy implementation
-  virtual void FinishAllRendering() OVERRIDE;
-  virtual bool IsStarted() const OVERRIDE;
-  virtual void SetOutputSurface(scoped_ptr<OutputSurface>) OVERRIDE;
-  virtual void SetLayerTreeHostClientReady() OVERRIDE;
-  virtual void SetVisible(bool visible) OVERRIDE;
-  virtual const RendererCapabilities& GetRendererCapabilities() const OVERRIDE;
-  virtual void SetNeedsAnimate() OVERRIDE;
-  virtual void SetNeedsUpdateLayers() OVERRIDE;
-  virtual void SetNeedsCommit() OVERRIDE;
-  virtual void SetNeedsRedraw(const gfx::Rect& damage_rect) OVERRIDE;
-  virtual void SetNextCommitWaitsForActivation() OVERRIDE;
-  virtual void NotifyInputThrottledUntilCommit() OVERRIDE {}
-  virtual void SetDeferCommits(bool defer_commits) OVERRIDE;
-  virtual bool CommitRequested() const OVERRIDE;
-  virtual bool BeginMainFrameRequested() const OVERRIDE;
-  virtual void MainThreadHasStoppedFlinging() OVERRIDE {}
-  virtual void Start() OVERRIDE;
-  virtual void Stop() OVERRIDE;
-  virtual size_t MaxPartialTextureUpdates() const OVERRIDE;
-  virtual void ForceSerializeOnSwapBuffers() OVERRIDE;
-  virtual bool SupportsImplScrolling() const OVERRIDE;
-  virtual void AsValueInto(base::debug::TracedValue* state) const OVERRIDE;
-  virtual bool MainFrameWillHappenForTesting() OVERRIDE;
+  virtual void FinishAllRendering() override;
+  virtual bool IsStarted() const override;
+  virtual void SetOutputSurface(scoped_ptr<OutputSurface>) override;
+  virtual void SetLayerTreeHostClientReady() override;
+  virtual void SetVisible(bool visible) override;
+  virtual const RendererCapabilities& GetRendererCapabilities() const override;
+  virtual void SetNeedsAnimate() override;
+  virtual void SetNeedsUpdateLayers() override;
+  virtual void SetNeedsCommit() override;
+  virtual void SetNeedsRedraw(const gfx::Rect& damage_rect) override;
+  virtual void SetNextCommitWaitsForActivation() override;
+  virtual void NotifyInputThrottledUntilCommit() override {}
+  virtual void SetDeferCommits(bool defer_commits) override;
+  virtual bool CommitRequested() const override;
+  virtual bool BeginMainFrameRequested() const override;
+  virtual void MainThreadHasStoppedFlinging() override {}
+  virtual void Start() override;
+  virtual void Stop() override;
+  virtual size_t MaxPartialTextureUpdates() const override;
+  virtual void ForceSerializeOnSwapBuffers() override;
+  virtual bool SupportsImplScrolling() const override;
+  virtual void AsValueInto(base::debug::TracedValue* state) const override;
+  virtual bool MainFrameWillHappenForTesting() override;
 
   // SchedulerClient implementation
-  virtual BeginFrameSource* ExternalBeginFrameSource() OVERRIDE;
-  virtual void WillBeginImplFrame(const BeginFrameArgs& args) OVERRIDE;
-  virtual void ScheduledActionSendBeginMainFrame() OVERRIDE;
-  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() OVERRIDE;
-  virtual DrawResult ScheduledActionDrawAndSwapForced() OVERRIDE;
-  virtual void ScheduledActionCommit() OVERRIDE;
-  virtual void ScheduledActionAnimate() OVERRIDE;
-  virtual void ScheduledActionUpdateVisibleTiles() OVERRIDE;
-  virtual void ScheduledActionActivateSyncTree() OVERRIDE;
-  virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE;
-  virtual void ScheduledActionManageTiles() OVERRIDE;
-  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks time) OVERRIDE;
-  virtual base::TimeDelta DrawDurationEstimate() OVERRIDE;
-  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() OVERRIDE;
-  virtual base::TimeDelta CommitToActivateDurationEstimate() OVERRIDE;
-  virtual void DidBeginImplFrameDeadline() OVERRIDE;
+  virtual BeginFrameSource* ExternalBeginFrameSource() override;
+  virtual void WillBeginImplFrame(const BeginFrameArgs& args) override;
+  virtual void ScheduledActionSendBeginMainFrame() override;
+  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() override;
+  virtual DrawResult ScheduledActionDrawAndSwapForced() override;
+  virtual void ScheduledActionCommit() override;
+  virtual void ScheduledActionAnimate() override;
+  virtual void ScheduledActionUpdateVisibleTiles() override;
+  virtual void ScheduledActionActivateSyncTree() override;
+  virtual void ScheduledActionBeginOutputSurfaceCreation() override;
+  virtual void ScheduledActionManageTiles() override;
+  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks time) override;
+  virtual base::TimeDelta DrawDurationEstimate() override;
+  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() override;
+  virtual base::TimeDelta CommitToActivateDurationEstimate() override;
+  virtual void DidBeginImplFrameDeadline() override;
 
   // LayerTreeHostImplClient implementation
-  virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE;
-  virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE;
+  virtual void UpdateRendererCapabilitiesOnImplThread() override;
+  virtual void DidLoseOutputSurfaceOnImplThread() override;
   virtual void CommitVSyncParameters(base::TimeTicks timebase,
-                                     base::TimeDelta interval) OVERRIDE {}
-  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) OVERRIDE {}
-  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE {}
-  virtual void DidSwapBuffersOnImplThread() OVERRIDE;
-  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE;
-  virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE;
-  virtual void NotifyReadyToActivate() OVERRIDE;
-  virtual void SetNeedsRedrawOnImplThread() OVERRIDE;
+                                     base::TimeDelta interval) override {}
+  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {}
+  virtual void SetMaxSwapsPendingOnImplThread(int max) override {}
+  virtual void DidSwapBuffersOnImplThread() override;
+  virtual void DidSwapBuffersCompleteOnImplThread() override;
+  virtual void OnCanDrawStateChanged(bool can_draw) override;
+  virtual void NotifyReadyToActivate() override;
+  virtual void SetNeedsRedrawOnImplThread() override;
   virtual void SetNeedsRedrawRectOnImplThread(
-      const gfx::Rect& dirty_rect) OVERRIDE;
-  virtual void SetNeedsAnimateOnImplThread() OVERRIDE;
-  virtual void SetNeedsManageTilesOnImplThread() OVERRIDE;
-  virtual void DidInitializeVisibleTileOnImplThread() OVERRIDE;
-  virtual void SetNeedsCommitOnImplThread() OVERRIDE;
+      const gfx::Rect& dirty_rect) override;
+  virtual void SetNeedsAnimateOnImplThread() override;
+  virtual void SetNeedsManageTilesOnImplThread() override;
+  virtual void DidInitializeVisibleTileOnImplThread() override;
+  virtual void SetNeedsCommitOnImplThread() override;
   virtual void PostAnimationEventsToMainThreadOnImplThread(
-      scoped_ptr<AnimationEventsVector> events) OVERRIDE;
+      scoped_ptr<AnimationEventsVector> events) override;
   virtual bool ReduceContentsTextureMemoryOnImplThread(
       size_t limit_bytes,
-      int priority_cutoff) OVERRIDE;
-  virtual bool IsInsideDraw() OVERRIDE;
-  virtual void RenewTreePriority() OVERRIDE {}
+      int priority_cutoff) override;
+  virtual bool IsInsideDraw() override;
+  virtual void RenewTreePriority() override {}
   virtual void PostDelayedScrollbarFadeOnImplThread(
       const base::Closure& start_fade,
-      base::TimeDelta delay) OVERRIDE {}
-  virtual void DidActivateSyncTree() OVERRIDE {}
-  virtual void DidManageTiles() OVERRIDE;
-  virtual void SetDebugState(const LayerTreeDebugState& debug_state) OVERRIDE {}
+      base::TimeDelta delay) override {}
+  virtual void DidActivateSyncTree() override {}
+  virtual void DidManageTiles() override;
+  virtual void SetDebugState(const LayerTreeDebugState& debug_state) override {}
 
   void RequestNewOutputSurface();
 
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index 5783709..93b4c65 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -108,7 +108,6 @@
       inside_draw(false),
       input_throttled_until_commit(false),
       animations_frozen_until_next_draw(false),
-      did_commit_after_animating(false),
       smoothness_priority_expiration_notifier(
           proxy->ImplThreadTaskRunner(),
           base::Bind(&ThreadProxy::RenewTreePriority, base::Unretained(proxy)),
@@ -944,7 +943,6 @@
         impl().layer_tree_host_impl->CurrentBeginFrameArgs().frame_time;
   }
   impl().layer_tree_host_impl->Animate(impl().animation_time);
-  impl().did_commit_after_animating = false;
 }
 
 void ThreadProxy::ScheduledActionCommit() {
@@ -962,7 +960,6 @@
     impl().animation_time = std::max(
         impl().animation_time, blocked_main().last_monotonic_frame_begin_time);
   }
-  impl().did_commit_after_animating = true;
 
   blocked_main().main_thread_inside_commit = true;
   impl().layer_tree_host_impl->BeginCommit();
@@ -1031,11 +1028,6 @@
   impl().timing_history.DidStartDrawing();
   base::AutoReset<bool> mark_inside(&impl().inside_draw, true);
 
-  if (impl().did_commit_after_animating) {
-    impl().layer_tree_host_impl->Animate(impl().animation_time);
-    impl().did_commit_after_animating = false;
-  }
-
   if (impl().layer_tree_host_impl->pending_tree())
     impl().layer_tree_host_impl->pending_tree()->UpdateDrawProperties();
 
diff --git a/cc/trees/thread_proxy.h b/cc/trees/thread_proxy.h
index ed5c269..817b36d 100644
--- a/cc/trees/thread_proxy.h
+++ b/cc/trees/thread_proxy.h
@@ -150,85 +150,85 @@
   const CompositorThreadOnly& impl() const;
 
   // Proxy implementation
-  virtual void FinishAllRendering() OVERRIDE;
-  virtual bool IsStarted() const OVERRIDE;
-  virtual void SetOutputSurface(scoped_ptr<OutputSurface>) OVERRIDE;
-  virtual void SetLayerTreeHostClientReady() OVERRIDE;
-  virtual void SetVisible(bool visible) OVERRIDE;
-  virtual const RendererCapabilities& GetRendererCapabilities() const OVERRIDE;
-  virtual void SetNeedsAnimate() OVERRIDE;
-  virtual void SetNeedsUpdateLayers() OVERRIDE;
-  virtual void SetNeedsCommit() OVERRIDE;
-  virtual void SetNeedsRedraw(const gfx::Rect& damage_rect) OVERRIDE;
-  virtual void SetNextCommitWaitsForActivation() OVERRIDE;
-  virtual void NotifyInputThrottledUntilCommit() OVERRIDE;
-  virtual void SetDeferCommits(bool defer_commits) OVERRIDE;
-  virtual bool CommitRequested() const OVERRIDE;
-  virtual bool BeginMainFrameRequested() const OVERRIDE;
-  virtual void MainThreadHasStoppedFlinging() OVERRIDE;
-  virtual void Start() OVERRIDE;
-  virtual void Stop() OVERRIDE;
-  virtual size_t MaxPartialTextureUpdates() const OVERRIDE;
-  virtual void ForceSerializeOnSwapBuffers() OVERRIDE;
-  virtual bool SupportsImplScrolling() const OVERRIDE;
-  virtual void SetDebugState(const LayerTreeDebugState& debug_state) OVERRIDE;
-  virtual void AsValueInto(base::debug::TracedValue* value) const OVERRIDE;
-  virtual bool MainFrameWillHappenForTesting() OVERRIDE;
+  virtual void FinishAllRendering() override;
+  virtual bool IsStarted() const override;
+  virtual void SetOutputSurface(scoped_ptr<OutputSurface>) override;
+  virtual void SetLayerTreeHostClientReady() override;
+  virtual void SetVisible(bool visible) override;
+  virtual const RendererCapabilities& GetRendererCapabilities() const override;
+  virtual void SetNeedsAnimate() override;
+  virtual void SetNeedsUpdateLayers() override;
+  virtual void SetNeedsCommit() override;
+  virtual void SetNeedsRedraw(const gfx::Rect& damage_rect) override;
+  virtual void SetNextCommitWaitsForActivation() override;
+  virtual void NotifyInputThrottledUntilCommit() override;
+  virtual void SetDeferCommits(bool defer_commits) override;
+  virtual bool CommitRequested() const override;
+  virtual bool BeginMainFrameRequested() const override;
+  virtual void MainThreadHasStoppedFlinging() override;
+  virtual void Start() override;
+  virtual void Stop() override;
+  virtual size_t MaxPartialTextureUpdates() const override;
+  virtual void ForceSerializeOnSwapBuffers() override;
+  virtual bool SupportsImplScrolling() const override;
+  virtual void SetDebugState(const LayerTreeDebugState& debug_state) override;
+  virtual void AsValueInto(base::debug::TracedValue* value) const override;
+  virtual bool MainFrameWillHappenForTesting() override;
 
   // LayerTreeHostImplClient implementation
-  virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE;
-  virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE;
+  virtual void UpdateRendererCapabilitiesOnImplThread() override;
+  virtual void DidLoseOutputSurfaceOnImplThread() override;
   virtual void CommitVSyncParameters(base::TimeTicks timebase,
-                                     base::TimeDelta interval) OVERRIDE;
-  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) OVERRIDE;
-  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE;
-  virtual void DidSwapBuffersOnImplThread() OVERRIDE;
-  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE;
-  virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE;
-  virtual void NotifyReadyToActivate() OVERRIDE;
+                                     base::TimeDelta interval) override;
+  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override;
+  virtual void SetMaxSwapsPendingOnImplThread(int max) override;
+  virtual void DidSwapBuffersOnImplThread() override;
+  virtual void DidSwapBuffersCompleteOnImplThread() override;
+  virtual void OnCanDrawStateChanged(bool can_draw) override;
+  virtual void NotifyReadyToActivate() override;
   // Please call these 3 functions through
   // LayerTreeHostImpl's SetNeedsRedraw(), SetNeedsRedrawRect() and
   // SetNeedsAnimate().
-  virtual void SetNeedsRedrawOnImplThread() OVERRIDE;
+  virtual void SetNeedsRedrawOnImplThread() override;
   virtual void SetNeedsRedrawRectOnImplThread(const gfx::Rect& dirty_rect)
-      OVERRIDE;
-  virtual void SetNeedsAnimateOnImplThread() OVERRIDE;
-  virtual void SetNeedsManageTilesOnImplThread() OVERRIDE;
-  virtual void DidInitializeVisibleTileOnImplThread() OVERRIDE;
-  virtual void SetNeedsCommitOnImplThread() OVERRIDE;
+      override;
+  virtual void SetNeedsAnimateOnImplThread() override;
+  virtual void SetNeedsManageTilesOnImplThread() override;
+  virtual void DidInitializeVisibleTileOnImplThread() override;
+  virtual void SetNeedsCommitOnImplThread() override;
   virtual void PostAnimationEventsToMainThreadOnImplThread(
-      scoped_ptr<AnimationEventsVector> queue) OVERRIDE;
+      scoped_ptr<AnimationEventsVector> queue) override;
   virtual bool ReduceContentsTextureMemoryOnImplThread(size_t limit_bytes,
                                                        int priority_cutoff)
-      OVERRIDE;
-  virtual bool IsInsideDraw() OVERRIDE;
-  virtual void RenewTreePriority() OVERRIDE;
+      override;
+  virtual bool IsInsideDraw() override;
+  virtual void RenewTreePriority() override;
   virtual void PostDelayedScrollbarFadeOnImplThread(
       const base::Closure& start_fade,
-      base::TimeDelta delay) OVERRIDE;
-  virtual void DidActivateSyncTree() OVERRIDE;
-  virtual void DidManageTiles() OVERRIDE;
+      base::TimeDelta delay) override;
+  virtual void DidActivateSyncTree() override;
+  virtual void DidManageTiles() override;
 
   // SchedulerClient implementation
-  virtual BeginFrameSource* ExternalBeginFrameSource() OVERRIDE;
-  virtual void WillBeginImplFrame(const BeginFrameArgs& args) OVERRIDE;
-  virtual void ScheduledActionSendBeginMainFrame() OVERRIDE;
-  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() OVERRIDE;
-  virtual DrawResult ScheduledActionDrawAndSwapForced() OVERRIDE;
-  virtual void ScheduledActionAnimate() OVERRIDE;
-  virtual void ScheduledActionCommit() OVERRIDE;
-  virtual void ScheduledActionUpdateVisibleTiles() OVERRIDE;
-  virtual void ScheduledActionActivateSyncTree() OVERRIDE;
-  virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE;
-  virtual void ScheduledActionManageTiles() OVERRIDE;
-  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks time) OVERRIDE;
-  virtual base::TimeDelta DrawDurationEstimate() OVERRIDE;
-  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() OVERRIDE;
-  virtual base::TimeDelta CommitToActivateDurationEstimate() OVERRIDE;
-  virtual void DidBeginImplFrameDeadline() OVERRIDE;
+  virtual BeginFrameSource* ExternalBeginFrameSource() override;
+  virtual void WillBeginImplFrame(const BeginFrameArgs& args) override;
+  virtual void ScheduledActionSendBeginMainFrame() override;
+  virtual DrawResult ScheduledActionDrawAndSwapIfPossible() override;
+  virtual DrawResult ScheduledActionDrawAndSwapForced() override;
+  virtual void ScheduledActionAnimate() override;
+  virtual void ScheduledActionCommit() override;
+  virtual void ScheduledActionUpdateVisibleTiles() override;
+  virtual void ScheduledActionActivateSyncTree() override;
+  virtual void ScheduledActionBeginOutputSurfaceCreation() override;
+  virtual void ScheduledActionManageTiles() override;
+  virtual void DidAnticipatedDrawTimeChange(base::TimeTicks time) override;
+  virtual base::TimeDelta DrawDurationEstimate() override;
+  virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() override;
+  virtual base::TimeDelta CommitToActivateDurationEstimate() override;
+  virtual void DidBeginImplFrameDeadline() override;
 
   // ResourceUpdateControllerClient implementation
-  virtual void ReadyToFinalizeTextureUpdates() OVERRIDE;
+  virtual void ReadyToFinalizeTextureUpdates() override;
 
  protected:
   ThreadProxy(LayerTreeHost* layer_tree_host,
diff --git a/cc/trees/tree_synchronizer_unittest.cc b/cc/trees/tree_synchronizer_unittest.cc
index 007c857..faa86ce 100644
--- a/cc/trees/tree_synchronizer_unittest.cc
+++ b/cc/trees/tree_synchronizer_unittest.cc
@@ -55,11 +55,11 @@
   }
 
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
-      OVERRIDE {
+      override {
     return MockLayerImpl::Create(tree_impl, layer_id_);
   }
 
-  virtual void PushPropertiesTo(LayerImpl* layer_impl) OVERRIDE {
+  virtual void PushPropertiesTo(LayerImpl* layer_impl) override {
     Layer::PushPropertiesTo(layer_impl);
 
     MockLayerImpl* mock_layer_impl = static_cast<MockLayerImpl*>(layer_impl);
@@ -91,7 +91,7 @@
   virtual ~FakeLayerAnimationController() {}
 
   virtual void PushAnimationUpdatesTo(LayerAnimationController* controller_impl)
-      OVERRIDE {
+      override {
     LayerAnimationController::PushAnimationUpdatesTo(controller_impl);
     synchronized_animations_ = true;
   }