diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 6a6cd02..f71a2d8 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -289,6 +289,7 @@
     "quads/draw_quad.h",
     "quads/io_surface_draw_quad.cc",
     "quads/io_surface_draw_quad.h",
+    "quads/largest_draw_quad.h",
     "quads/picture_draw_quad.cc",
     "quads/picture_draw_quad.h",
     "quads/render_pass.cc",
diff --git a/cc/cc.gyp b/cc/cc.gyp
index c70aee1..5bd14ec 100644
--- a/cc/cc.gyp
+++ b/cc/cc.gyp
@@ -318,6 +318,7 @@
         'quads/draw_quad.h',
         'quads/io_surface_draw_quad.cc',
         'quads/io_surface_draw_quad.h',
+        'quads/largest_draw_quad.h',
         'quads/picture_draw_quad.cc',
         'quads/picture_draw_quad.h',
         'quads/render_pass.cc',
diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc
index 94050ae9..69f54f9 100644
--- a/cc/layers/delegated_renderer_layer_impl_unittest.cc
+++ b/cc/layers/delegated_renderer_layer_impl_unittest.cc
@@ -582,9 +582,7 @@
         gfx::Rect(5, 5, 7, 7),  // quad_rect
         gfx::Rect(5, 5, 7, 7),  // visible_rect
         RenderPass::Id(10, 7),  // render_pass_id
-        false,                  // is_replica
         0,                      // mask_resource_id
-        child_pass_rect,        // contents_changed_since_last_frame
         gfx::RectF(),           // mask_uv_rect
         FilterOperations(),     // filters
         gfx::Vector2dF(),       // filters_scale
@@ -1019,9 +1017,7 @@
         gfx::Rect(5, 5, 7, 7),  // quad_rect
         gfx::Rect(5, 5, 7, 7),  // visible_quad_rect
         RenderPass::Id(10, 7),  // render_pass_id
-        false,                  // is_replica
         0,                      // mask_resource_id
-        child_pass_rect,        // contents_changed_since_last_frame
         gfx::RectF(),           // mask_uv_rect
         FilterOperations(),     // filters
         gfx::Vector2dF(),       // filters_scale
diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc
index 4ac76f4..2cc67af45 100644
--- a/cc/layers/render_surface_impl.cc
+++ b/cc/layers/render_surface_impl.cc
@@ -66,10 +66,6 @@
   clip_rect_ = clip_rect;
 }
 
-bool RenderSurfaceImpl::ContentsChanged() const {
-  return !damage_tracker_->current_damage_rect().IsEmpty();
-}
-
 void RenderSurfaceImpl::SetContentRect(const gfx::Rect& content_rect) {
   if (content_rect_ == content_rect)
     return;
@@ -221,8 +217,6 @@
 
   ResourceProvider::ResourceId mask_resource_id =
       mask_layer ? mask_layer->ContentsResourceId() : 0;
-  gfx::Rect contents_changed_since_last_frame =
-      ContentsChanged() ? content_rect_ : gfx::Rect();
 
   DCHECK(owning_layer_->draw_properties().target_space_transform.IsScale2d());
   gfx::Vector2dF owning_layer_to_target_scale =
@@ -236,9 +230,7 @@
                content_rect_,
                visible_content_rect,
                render_pass_id,
-               for_replica,
                mask_resource_id,
-               contents_changed_since_last_frame,
                mask_uv_rect,
                owning_layer_->filters(),
                owning_layer_to_target_scale,
diff --git a/cc/layers/render_surface_impl.h b/cc/layers/render_surface_impl.h
index 6f7df69..27da840 100644
--- a/cc/layers/render_surface_impl.h
+++ b/cc/layers/render_surface_impl.h
@@ -116,8 +116,6 @@
     contributes_to_drawn_surface_ = contributes_to_drawn_surface;
   }
 
-  bool ContentsChanged() const;
-
   void SetContentRect(const gfx::Rect& content_rect);
   gfx::Rect content_rect() const { return content_rect_; }
 
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index f172da7..cd1acde 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -104,9 +104,7 @@
                rect,
                rect,
                pass_id,
-               false,                 // is_replica
                0,                     // mask_resource_id
-               rect,                  // contents_changed_since_last_frame
                gfx::RectF(1.f, 1.f),  // mask_uv_rect
                FilterOperations(),    // foreground filters
                gfx::Vector2dF(),      // filters scale
@@ -807,9 +805,7 @@
                            pass_rect,
                            pass_rect,
                            child_pass_id,
-                           false,
                            0,
-                           pass_rect,
                            gfx::RectF(),
                            filters,
                            gfx::Vector2dF(),
@@ -880,9 +876,7 @@
                            pass_rect,
                            pass_rect,
                            child_pass_id,
-                           false,
                            0,
-                           pass_rect,
                            gfx::RectF(),
                            filters,
                            gfx::Vector2dF(),
@@ -952,9 +946,7 @@
                            pass_rect,
                            pass_rect,
                            child_pass_id,
-                           false,
                            0,
-                           pass_rect,
                            gfx::RectF(),
                            filters,
                            gfx::Vector2dF(),
@@ -1046,9 +1038,7 @@
                            pass_rect,
                            pass_rect,
                            child_pass_id,
-                           false,
                            0,
-                           pass_rect,
                            gfx::RectF(),
                            filters,
                            gfx::Vector2dF(),
@@ -1255,9 +1245,7 @@
                     sub_rect,
                     sub_rect,
                     child_pass_id,
-                    false,  // is_replica
                     mask_resource_id,
-                    sub_rect,              // contents_changed_since_last_frame
                     gfx::RectF(1.f, 1.f),  // mask_uv_rect
                     FilterOperations(),    // foreground filters
                     gfx::Vector2dF(),      // filters scale
@@ -1330,9 +1318,7 @@
           filter_pass_content_rect_,
           filter_pass_content_rect_,
           filter_pass_id,
-          false,                      // is_replica
           0,                          // mask_resource_id
-          filter_pass_content_rect_,  // contents_changed_since_last_frame
           gfx::RectF(),               // mask_uv_rect
           FilterOperations(),         // filters
           gfx::Vector2dF(),           // filters_scale
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc
index fdcf2544..40dfe81 100644
--- a/cc/quads/draw_quad_unittest.cc
+++ b/cc/quads/draw_quad_unittest.cc
@@ -13,6 +13,7 @@
 #include "cc/quads/checkerboard_draw_quad.h"
 #include "cc/quads/debug_border_draw_quad.h"
 #include "cc/quads/io_surface_draw_quad.h"
+#include "cc/quads/largest_draw_quad.h"
 #include "cc/quads/picture_draw_quad.h"
 #include "cc/quads/render_pass.h"
 #include "cc/quads/render_pass_draw_quad.h"
@@ -226,27 +227,6 @@
   }                                                              \
   SETUP_AND_COPY_QUAD_ALL(Type, quad_all);
 
-#define CREATE_QUAD_5_NEW_RP(Type, a, b, c, d, e, copy_a)                 \
-  Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>();          \
-  { QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e); } \
-  SETUP_AND_COPY_QUAD_NEW_RP(Type, quad_new, copy_a);
-
-#define CREATE_QUAD_5_ALL_RP(Type, a, b, c, d, e, copy_a)        \
-  Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \
-  {                                                              \
-    QUAD_DATA quad_all->SetAll(shared_state,                     \
-                               quad_rect,                        \
-                               quad_opaque_rect,                 \
-                               quad_visible_rect,                \
-                               needs_blending,                   \
-                               a,                                \
-                               b,                                \
-                               c,                                \
-                               d,                                \
-                               e);                               \
-  }                                                              \
-  SETUP_AND_COPY_QUAD_ALL_RP(Type, quad_all, copy_a);
-
 #define CREATE_QUAD_6_NEW(Type, a, b, c, d, e, f)                            \
   Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>();             \
   { QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e, f); } \
@@ -294,31 +274,6 @@
   }                                                              \
   SETUP_AND_COPY_QUAD_ALL(Type, quad_all);
 
-#define CREATE_QUAD_7_NEW_RP(Type, a, b, c, d, e, f, g, copy_a)               \
-  Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>();              \
-  {                                                                           \
-    QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e, f, g); \
-  }                                                                           \
-  SETUP_AND_COPY_QUAD_NEW_RP(Type, quad_new, copy_a);
-
-#define CREATE_QUAD_7_ALL_RP(Type, a, b, c, d, e, f, g, copy_a)  \
-  Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \
-  {                                                              \
-    QUAD_DATA quad_all->SetAll(shared_state,                     \
-                               quad_rect,                        \
-                               quad_opaque_rect,                 \
-                               quad_visible_rect,                \
-                               needs_blending,                   \
-                               a,                                \
-                               b,                                \
-                               c,                                \
-                               d,                                \
-                               e,                                \
-                               f,                                \
-                               g);                               \
-  }                                                              \
-  SETUP_AND_COPY_QUAD_ALL_RP(Type, quad_all, copy_a);
-
 #define CREATE_QUAD_8_NEW(Type, a, b, c, d, e, f, g, h)          \
   Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>(); \
   {                                                              \
@@ -346,25 +301,6 @@
   }                                                              \
   SETUP_AND_COPY_QUAD_ALL(Type, quad_all);
 
-#define CREATE_QUAD_8_ALL_RP(Type, a, b, c, d, e, f, g, h, copy_a) \
-  Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>();   \
-  {                                                                \
-    QUAD_DATA quad_all->SetAll(shared_state,                       \
-                               quad_rect,                          \
-                               quad_opaque_rect,                   \
-                               quad_visible_rect,                  \
-                               needs_blending,                     \
-                               a,                                  \
-                               b,                                  \
-                               c,                                  \
-                               d,                                  \
-                               e,                                  \
-                               f,                                  \
-                               g,                                  \
-                               h);                                 \
-  }                                                                \
-  SETUP_AND_COPY_QUAD_ALL_RP(Type, quad_all, copy_a);
-
 #define CREATE_QUAD_9_NEW(Type, a, b, c, d, e, f, g, h, i)       \
   Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>(); \
   {                                                              \
@@ -373,14 +309,6 @@
   }                                                              \
   SETUP_AND_COPY_QUAD_NEW(Type, quad_new);
 
-#define CREATE_QUAD_9_NEW_RP(Type, a, b, c, d, e, f, g, h, i, copy_a) \
-  Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>();      \
-  {                                                                   \
-    QUAD_DATA quad_new->SetNew(                                       \
-        shared_state, quad_rect, a, b, c, d, e, f, g, h, i);          \
-  }                                                                   \
-  SETUP_AND_COPY_QUAD_NEW_RP(Type, quad_new, copy_a);
-
 #define CREATE_QUAD_9_ALL(Type, a, b, c, d, e, f, g, h, i) \
   {                                                        \
     QUAD_DATA quad_all->SetAll(shared_state,               \
@@ -400,6 +328,30 @@
   }                                                        \
   SETUP_AND_COPY_QUAD_ALL(Type, quad_all);
 
+#define CREATE_QUAD_ALL_RP(Type, a, b, c, d, e, f, copy_a)       \
+  Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \
+  {                                                              \
+    QUAD_DATA quad_all->SetAll(shared_state,                     \
+                               quad_rect,                        \
+                               quad_opaque_rect,                 \
+                               quad_visible_rect,                \
+                               needs_blending,                   \
+                               a,                                \
+                               b,                                \
+                               c,                                \
+                               d,                                \
+                               e,                                \
+                               f);                               \
+  }                                                              \
+  SETUP_AND_COPY_QUAD_ALL_RP(Type, quad_all, copy_a);
+
+#define CREATE_QUAD_NEW_RP(Type, a, b, c, d, e, f, g, copy_a)                 \
+  Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>();              \
+  {                                                                           \
+    QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e, f, g); \
+  }                                                                           \
+  SETUP_AND_COPY_QUAD_NEW_RP(Type, quad_new, copy_a);
+
 TEST(DrawQuadTest, CopyCheckerboardDrawQuad) {
   gfx::Rect visible_rect(40, 50, 30, 20);
   SkColor color = 0xfabb0011;
@@ -464,9 +416,7 @@
 TEST(DrawQuadTest, CopyRenderPassDrawQuad) {
   gfx::Rect visible_rect(40, 50, 30, 20);
   RenderPass::Id render_pass_id(22, 64);
-  bool is_replica = true;
   ResourceProvider::ResourceId mask_resource_id = 78;
-  gfx::Rect contents_changed_since_last_frame(42, 11, 74, 24);
   gfx::RectF mask_u_v_rect(-45.f, -21.f, 33.f, 19.f);
   FilterOperations filters;
   filters.Append(FilterOperation::CreateBlurFilter(1.f));
@@ -478,46 +428,38 @@
   RenderPass::Id copied_render_pass_id(235, 11);
   CREATE_SHARED_STATE();
 
-  CREATE_QUAD_9_NEW_RP(RenderPassDrawQuad,
-                       visible_rect,
-                       render_pass_id,
-                       is_replica,
-                       mask_resource_id,
-                       contents_changed_since_last_frame,
-                       mask_u_v_rect,
-                       filters,
-                       filters_scale,
-                       background_filters,
-                       copied_render_pass_id);
+  CREATE_QUAD_NEW_RP(RenderPassDrawQuad,
+                     visible_rect,
+                     render_pass_id,
+                     mask_resource_id,
+                     mask_u_v_rect,
+                     filters,
+                     filters_scale,
+                     background_filters,
+                     copied_render_pass_id);
   EXPECT_EQ(DrawQuad::RENDER_PASS, copy_quad->material);
   EXPECT_RECT_EQ(visible_rect, copy_quad->visible_rect);
   EXPECT_EQ(copied_render_pass_id, copy_quad->render_pass_id);
-  EXPECT_EQ(is_replica, copy_quad->is_replica);
   EXPECT_EQ(mask_resource_id, copy_quad->mask_resource_id);
-  EXPECT_RECT_EQ(contents_changed_since_last_frame,
-                 copy_quad->contents_changed_since_last_frame);
   EXPECT_EQ(mask_u_v_rect.ToString(), copy_quad->mask_uv_rect.ToString());
   EXPECT_EQ(filters, copy_quad->filters);
+  EXPECT_EQ(filters_scale, copy_quad->filters_scale);
   EXPECT_EQ(background_filters, copy_quad->background_filters);
 
-  CREATE_QUAD_8_ALL_RP(RenderPassDrawQuad,
-                       render_pass_id,
-                       is_replica,
-                       mask_resource_id,
-                       contents_changed_since_last_frame,
-                       mask_u_v_rect,
-                       filters,
-                       filters_scale,
-                       background_filters,
-                       copied_render_pass_id);
+  CREATE_QUAD_ALL_RP(RenderPassDrawQuad,
+                     render_pass_id,
+                     mask_resource_id,
+                     mask_u_v_rect,
+                     filters,
+                     filters_scale,
+                     background_filters,
+                     copied_render_pass_id);
   EXPECT_EQ(DrawQuad::RENDER_PASS, copy_quad->material);
   EXPECT_EQ(copied_render_pass_id, copy_quad->render_pass_id);
-  EXPECT_EQ(is_replica, copy_quad->is_replica);
   EXPECT_EQ(mask_resource_id, copy_quad->mask_resource_id);
-  EXPECT_RECT_EQ(contents_changed_since_last_frame,
-                 copy_quad->contents_changed_since_last_frame);
   EXPECT_EQ(mask_u_v_rect.ToString(), copy_quad->mask_uv_rect.ToString());
   EXPECT_EQ(filters, copy_quad->filters);
+  EXPECT_EQ(filters_scale, copy_quad->filters_scale);
   EXPECT_EQ(background_filters, copy_quad->background_filters);
 }
 
@@ -813,12 +755,11 @@
 TEST_F(DrawQuadIteratorTest, RenderPassDrawQuad) {
   gfx::Rect visible_rect(40, 50, 30, 20);
   RenderPass::Id render_pass_id(22, 64);
-  bool is_replica = true;
   ResourceProvider::ResourceId mask_resource_id = 78;
-  gfx::Rect contents_changed_since_last_frame(42, 11, 74, 24);
   gfx::RectF mask_u_v_rect(-45.f, -21.f, 33.f, 19.f);
   FilterOperations filters;
   filters.Append(FilterOperation::CreateBlurFilter(1.f));
+  gfx::Vector2dF filters_scale(2.f, 3.f);
   FilterOperations background_filters;
   background_filters.Append(
       FilterOperation::CreateGrayscaleFilter(1.f));
@@ -826,17 +767,15 @@
   RenderPass::Id copied_render_pass_id(235, 11);
 
   CREATE_SHARED_STATE();
-  CREATE_QUAD_9_NEW_RP(RenderPassDrawQuad,
-                       visible_rect,
-                       render_pass_id,
-                       is_replica,
-                       mask_resource_id,
-                       contents_changed_since_last_frame,
-                       mask_u_v_rect,
-                       filters,
-                       gfx::Vector2dF(),
-                       background_filters,
-                       copied_render_pass_id);
+  CREATE_QUAD_NEW_RP(RenderPassDrawQuad,
+                     visible_rect,
+                     render_pass_id,
+                     mask_resource_id,
+                     mask_u_v_rect,
+                     filters,
+                     filters_scale,
+                     background_filters,
+                     copied_render_pass_id);
   EXPECT_EQ(mask_resource_id, quad_new->mask_resource_id);
   EXPECT_EQ(1, IterateAndCount(quad_new));
   EXPECT_EQ(mask_resource_id + 1, quad_new->mask_resource_id);
@@ -983,5 +922,96 @@
   EXPECT_EQ(0, IterateAndCount(quad_new));
 }
 
+TEST(DrawQuadTest, LargestQuadType) {
+  size_t largest = 0;
+
+  for (int i = 0; i <= DrawQuad::MATERIAL_LAST; ++i) {
+    switch (static_cast<DrawQuad::Material>(i)) {
+      case DrawQuad::CHECKERBOARD:
+        largest = std::max(largest, sizeof(CheckerboardDrawQuad));
+        break;
+      case DrawQuad::DEBUG_BORDER:
+        largest = std::max(largest, sizeof(DebugBorderDrawQuad));
+        break;
+      case DrawQuad::IO_SURFACE_CONTENT:
+        largest = std::max(largest, sizeof(IOSurfaceDrawQuad));
+        break;
+      case DrawQuad::PICTURE_CONTENT:
+        largest = std::max(largest, sizeof(PictureDrawQuad));
+        break;
+      case DrawQuad::TEXTURE_CONTENT:
+        largest = std::max(largest, sizeof(TextureDrawQuad));
+        break;
+      case DrawQuad::RENDER_PASS:
+        largest = std::max(largest, sizeof(RenderPassDrawQuad));
+        break;
+      case DrawQuad::SOLID_COLOR:
+        largest = std::max(largest, sizeof(SolidColorDrawQuad));
+        break;
+      case DrawQuad::SURFACE_CONTENT:
+        largest = std::max(largest, sizeof(SurfaceDrawQuad));
+        break;
+      case DrawQuad::TILED_CONTENT:
+        largest = std::max(largest, sizeof(TileDrawQuad));
+        break;
+      case DrawQuad::STREAM_VIDEO_CONTENT:
+        largest = std::max(largest, sizeof(StreamVideoDrawQuad));
+        break;
+      case DrawQuad::YUV_VIDEO_CONTENT:
+        largest = std::max(largest, sizeof(YUVVideoDrawQuad));
+        break;
+      case DrawQuad::INVALID:
+        break;
+    }
+  }
+  EXPECT_EQ(sizeof(kLargestDrawQuad), largest);
+
+  if (!HasFailure())
+    return;
+
+  // On failure, output the size of all quads for debugging.
+  LOG(ERROR) << "largest " << largest;
+  LOG(ERROR) << "kLargestDrawQuad " << sizeof(kLargestDrawQuad);
+  for (int i = 0; i <= DrawQuad::MATERIAL_LAST; ++i) {
+    switch (static_cast<DrawQuad::Material>(i)) {
+      case DrawQuad::CHECKERBOARD:
+        LOG(ERROR) << "CheckerboardDrawQuad " << sizeof(CheckerboardDrawQuad);
+        break;
+      case DrawQuad::DEBUG_BORDER:
+        LOG(ERROR) << "DebugBorderDrawQuad " << sizeof(DebugBorderDrawQuad);
+        break;
+      case DrawQuad::IO_SURFACE_CONTENT:
+        LOG(ERROR) << "IOSurfaceDrawQuad " << sizeof(IOSurfaceDrawQuad);
+        break;
+      case DrawQuad::PICTURE_CONTENT:
+        LOG(ERROR) << "PictureDrawQuad " << sizeof(PictureDrawQuad);
+        break;
+      case DrawQuad::TEXTURE_CONTENT:
+        LOG(ERROR) << "TextureDrawQuad " << sizeof(TextureDrawQuad);
+        break;
+      case DrawQuad::RENDER_PASS:
+        LOG(ERROR) << "RenderPassDrawQuad " << sizeof(RenderPassDrawQuad);
+        break;
+      case DrawQuad::SOLID_COLOR:
+        LOG(ERROR) << "SolidColorDrawQuad " << sizeof(SolidColorDrawQuad);
+        break;
+      case DrawQuad::SURFACE_CONTENT:
+        LOG(ERROR) << "SurfaceDrawQuad " << sizeof(SurfaceDrawQuad);
+        break;
+      case DrawQuad::TILED_CONTENT:
+        LOG(ERROR) << "TileDrawQuad " << sizeof(TileDrawQuad);
+        break;
+      case DrawQuad::STREAM_VIDEO_CONTENT:
+        LOG(ERROR) << "StreamVideoDrawQuad " << sizeof(StreamVideoDrawQuad);
+        break;
+      case DrawQuad::YUV_VIDEO_CONTENT:
+        LOG(ERROR) << "YUVVideoDrawQuad " << sizeof(YUVVideoDrawQuad);
+        break;
+      case DrawQuad::INVALID:
+        break;
+    }
+  }
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/quads/largest_draw_quad.h b/cc/quads/largest_draw_quad.h
new file mode 100644
index 0000000..d14906a
--- /dev/null
+++ b/cc/quads/largest_draw_quad.h
@@ -0,0 +1,20 @@
+// 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.
+
+#ifndef CC_QUADS_LARGEST_DRAW_QUAD_H_
+#define CC_QUADS_LARGEST_DRAW_QUAD_H_
+
+namespace cc {
+class StreamVideoDrawQuad;
+class RenderPassDrawQuad;
+
+#if defined(ARCH_CPU_64_BITS)
+typedef RenderPassDrawQuad kLargestDrawQuad;
+#else
+typedef StreamVideoDrawQuad kLargestDrawQuad;
+#endif
+
+}  // namespace cc
+
+#endif  // CC_QUADS_LARGEST_DRAW_QUAD_H_
diff --git a/cc/quads/render_pass_draw_quad.cc b/cc/quads/render_pass_draw_quad.cc
index bcafb03..aad279e 100644
--- a/cc/quads/render_pass_draw_quad.cc
+++ b/cc/quads/render_pass_draw_quad.cc
@@ -14,7 +14,6 @@
 
 RenderPassDrawQuad::RenderPassDrawQuad()
     : render_pass_id(RenderPass::Id(-1, -1)),
-      is_replica(false),
       mask_resource_id(static_cast<ResourceProvider::ResourceId>(-1)) {
 }
 
@@ -26,9 +25,7 @@
     const gfx::Rect& rect,
     const gfx::Rect& visible_rect,
     RenderPass::Id render_pass_id,
-    bool is_replica,
     ResourceProvider::ResourceId mask_resource_id,
-    const gfx::Rect& contents_changed_since_last_frame,
     const gfx::RectF& mask_uv_rect,
     const FilterOperations& filters,
     const gfx::Vector2dF& filters_scale,
@@ -44,9 +41,7 @@
          visible_rect,
          needs_blending,
          render_pass_id,
-         is_replica,
          mask_resource_id,
-         contents_changed_since_last_frame,
          mask_uv_rect,
          filters,
          filters_scale,
@@ -60,9 +55,7 @@
     const gfx::Rect& visible_rect,
     bool needs_blending,
     RenderPass::Id render_pass_id,
-    bool is_replica,
     ResourceProvider::ResourceId mask_resource_id,
-    const gfx::Rect& contents_changed_since_last_frame,
     const gfx::RectF& mask_uv_rect,
     const FilterOperations& filters,
     const gfx::Vector2dF& filters_scale,
@@ -73,9 +66,7 @@
   DrawQuad::SetAll(shared_quad_state, DrawQuad::RENDER_PASS, rect, opaque_rect,
                    visible_rect, needs_blending);
   this->render_pass_id = render_pass_id;
-  this->is_replica = is_replica;
   this->mask_resource_id = mask_resource_id;
-  this->contents_changed_since_last_frame = contents_changed_since_last_frame;
   this->mask_uv_rect = mask_uv_rect;
   this->filters = filters;
   this->filters_scale = filters_scale;
@@ -96,13 +87,8 @@
 
 void RenderPassDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
   TracedValue::SetIDRef(render_pass_id.AsTracingId(), value, "render_pass_id");
-  value->SetBoolean("is_replica", is_replica);
   value->SetInteger("mask_resource_id", mask_resource_id);
 
-  value->BeginArray("contents_changed_since_last_frame");
-  MathUtil::AddToTracedValue(contents_changed_since_last_frame, value);
-  value->EndArray();
-
   value->BeginArray("mask_uv_rect");
   MathUtil::AddToTracedValue(mask_uv_rect, value);
   value->EndArray();
diff --git a/cc/quads/render_pass_draw_quad.h b/cc/quads/render_pass_draw_quad.h
index aaf7cf28..9cc4ba3 100644
--- a/cc/quads/render_pass_draw_quad.h
+++ b/cc/quads/render_pass_draw_quad.h
@@ -24,9 +24,7 @@
               const gfx::Rect& rect,
               const gfx::Rect& visible_rect,
               RenderPass::Id render_pass_id,
-              bool is_replica,
               ResourceProvider::ResourceId mask_resource_id,
-              const gfx::Rect& contents_changed_since_last_frame,
               const gfx::RectF& mask_uv_rect,
               const FilterOperations& filters,
               const gfx::Vector2dF& filters_scale,
@@ -38,18 +36,14 @@
               const gfx::Rect& visible_rect,
               bool needs_blending,
               RenderPass::Id render_pass_id,
-              bool is_replica,
               ResourceProvider::ResourceId mask_resource_id,
-              const gfx::Rect& contents_changed_since_last_frame,
               const gfx::RectF& mask_uv_rect,
               const FilterOperations& filters,
               const gfx::Vector2dF& filters_scale,
               const FilterOperations& background_filters);
 
   RenderPass::Id render_pass_id;
-  bool is_replica;
   ResourceProvider::ResourceId mask_resource_id;
-  gfx::Rect contents_changed_since_last_frame;
   gfx::RectF mask_uv_rect;
 
   // Post-processing filters, applied to the pixels in the render pass' texture.
diff --git a/cc/quads/render_pass_unittest.cc b/cc/quads/render_pass_unittest.cc
index 053271a..4e555b8 100644
--- a/cc/quads/render_pass_unittest.cc
+++ b/cc/quads/render_pass_unittest.cc
@@ -218,9 +218,7 @@
                     contrib_output_rect,
                     contrib_output_rect,
                     contrib_id,
-                    false,  // is_replica
                     0,      // mask_resource_id
-                    contrib_damage_rect,
                     gfx::RectF(),  // mask_uv_rect
                     FilterOperations(),
                     gfx::Vector2dF(),  // filters_scale
diff --git a/cc/surfaces/surface_aggregator_test_helpers.cc b/cc/surfaces/surface_aggregator_test_helpers.cc
index 829bc75..f5b623b4 100644
--- a/cc/surfaces/surface_aggregator_test_helpers.cc
+++ b/cc/surfaces/surface_aggregator_test_helpers.cc
@@ -69,9 +69,7 @@
                output_rect,
                output_rect,
                render_pass_id,
-               false,
                0,
-               output_rect,
                gfx::RectF(),
                FilterOperations(),
                gfx::Vector2dF(),
diff --git a/cc/test/render_pass_test_common.cc b/cc/test/render_pass_test_common.cc
index ebab7c4a..8e81320 100644
--- a/cc/test/render_pass_test_common.cc
+++ b/cc/test/render_pass_test_common.cc
@@ -104,9 +104,7 @@
                              rect,
                              visible_rect,
                              child_pass,
-                             false,
                              resource5,
-                             rect,
                              gfx::RectF(),
                              FilterOperations(),
                              gfx::Vector2dF(),
@@ -118,9 +116,7 @@
                                      rect,
                                      visible_rect,
                                      child_pass,
-                                     true,
                                      resource5,
-                                     rect,
                                      gfx::RectF(),
                                      FilterOperations(),
                                      gfx::Vector2dF(),
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc
index bbbb3d1..95eb4ba 100644
--- a/cc/test/render_pass_test_utils.cc
+++ b/cc/test/render_pass_test_utils.cc
@@ -99,9 +99,7 @@
                output_rect,
                output_rect,
                contributing_pass->id,
-               false,
                0,
-               output_rect,
                gfx::RectF(),
                FilterOperations(),
                gfx::Vector2dF(),
@@ -129,9 +127,7 @@
                output_rect,
                output_rect,
                contributing_pass->id,
-               false,
                mask_resource_id,
-               output_rect,
                gfx::RectF(),
                filters,
                gfx::Vector2dF(),
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 92166b9..0f3968034 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -5137,7 +5137,6 @@
               frame.render_passes[0]->quad_list[1]->material);
     const RenderPassDrawQuad* replica_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]);
-    EXPECT_TRUE(replica_quad->is_replica);
     EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(),
               replica_quad->rect.ToString());
     EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
@@ -5165,7 +5164,6 @@
               frame.render_passes[0]->quad_list[1]->material);
     const RenderPassDrawQuad* replica_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]);
-    EXPECT_TRUE(replica_quad->is_replica);
     EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
               replica_quad->rect.ToString());
     EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
@@ -5196,7 +5194,6 @@
               frame.render_passes[0]->quad_list[1]->material);
     const RenderPassDrawQuad* replica_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]);
-    EXPECT_TRUE(replica_quad->is_replica);
     EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
               replica_quad->rect.ToString());
     EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
@@ -5222,7 +5219,6 @@
               frame.render_passes[0]->quad_list[1]->material);
     const RenderPassDrawQuad* replica_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]);
-    EXPECT_TRUE(replica_quad->is_replica);
     EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
               replica_quad->rect.ToString());
     EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
@@ -5300,7 +5296,6 @@
               frame.render_passes[0]->quad_list[0]->material);
     const RenderPassDrawQuad* render_pass_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
-    EXPECT_FALSE(render_pass_quad->is_replica);
     EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(),
               render_pass_quad->rect.ToString());
 
@@ -5309,7 +5304,6 @@
               frame.render_passes[0]->quad_list[1]->material);
     const RenderPassDrawQuad* replica_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]);
-    EXPECT_TRUE(replica_quad->is_replica);
     EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(),
               replica_quad->rect.ToString());
     EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(),
@@ -5334,7 +5328,6 @@
               frame.render_passes[0]->quad_list[0]->material);
     const RenderPassDrawQuad* render_pass_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
-    EXPECT_FALSE(render_pass_quad->is_replica);
     EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(),
               render_pass_quad->rect.ToString());
 
@@ -5343,7 +5336,6 @@
               frame.render_passes[0]->quad_list[1]->material);
     const RenderPassDrawQuad* replica_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]);
-    EXPECT_TRUE(replica_quad->is_replica);
     EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(),
               replica_quad->rect.ToString());
     EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(),
@@ -5428,7 +5420,6 @@
               frame.render_passes[0]->quad_list[0]->material);
     const RenderPassDrawQuad* render_pass_quad =
         RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
-    EXPECT_FALSE(render_pass_quad->is_replica);
     EXPECT_EQ(gfx::Rect(20, 10, 10, 20).ToString(),
               render_pass_quad->rect.ToString());
 
diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc
index 32d11d7..1607b71c 100644
--- a/cc/trees/layer_tree_host_unittest_delegated.cc
+++ b/cc/trees/layer_tree_host_unittest_delegated.cc
@@ -190,9 +190,7 @@
                  output_rect,
                  output_rect,
                  id,
-                 false,  // is_replica
                  0,      // mask_resource_id
-                 damage_rect,
                  gfx::Rect(0, 0, 1, 1),  // mask_uv_rect
                  filters,
                  gfx::Vector2dF(),
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc
index 1e2d741..77ba68b 100644
--- a/content/common/cc_messages.cc
+++ b/content/common/cc_messages.cc
@@ -6,6 +6,7 @@
 
 #include "cc/output/compositor_frame.h"
 #include "cc/output/filter_operations.h"
+#include "cc/quads/largest_draw_quad.h"
 #include "content/public/common/common_param_traits.h"
 #include "third_party/skia/include/core/SkData.h"
 #include "third_party/skia/include/core/SkFlattenableSerialization.h"
@@ -388,7 +389,7 @@
   to_reserve += p.quad_list.size() * sizeof(size_t);
 
   // The largest quad type, verified by a unit test.
-  to_reserve += p.quad_list.size() * sizeof(cc::RenderPassDrawQuad);
+  to_reserve += p.quad_list.size() * sizeof(cc::kLargestDrawQuad);
   return to_reserve;
 }
 
diff --git a/content/common/cc_messages.h b/content/common/cc_messages.h
index d936cef9..5a84551e 100644
--- a/content/common/cc_messages.h
+++ b/content/common/cc_messages.h
@@ -176,9 +176,7 @@
 IPC_STRUCT_TRAITS_BEGIN(cc::RenderPassDrawQuad)
   IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad)
   IPC_STRUCT_TRAITS_MEMBER(render_pass_id)
-  IPC_STRUCT_TRAITS_MEMBER(is_replica)
   IPC_STRUCT_TRAITS_MEMBER(mask_resource_id)
-  IPC_STRUCT_TRAITS_MEMBER(contents_changed_since_last_frame)
   IPC_STRUCT_TRAITS_MEMBER(mask_uv_rect)
   IPC_STRUCT_TRAITS_MEMBER(filters)
   IPC_STRUCT_TRAITS_MEMBER(filters_scale)
diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc
index 145e1340..054e079ac 100644
--- a/content/common/cc_messages_unittest.cc
+++ b/content/common/cc_messages_unittest.cc
@@ -143,10 +143,7 @@
 
   void Compare(const RenderPassDrawQuad* a, const RenderPassDrawQuad* b) {
     EXPECT_EQ(a->render_pass_id, b->render_pass_id);
-    EXPECT_EQ(a->is_replica, b->is_replica);
     EXPECT_EQ(a->mask_resource_id, b->mask_resource_id);
-    EXPECT_EQ(a->contents_changed_since_last_frame,
-              b->contents_changed_since_last_frame);
     EXPECT_EQ(a->mask_uv_rect.ToString(), b->mask_uv_rect.ToString());
     EXPECT_EQ(a->filters.size(), b->filters.size());
     for (size_t i = 0; i < a->filters.size(); ++i) {
@@ -367,9 +364,7 @@
                         arbitrary_rect1_inside_rect1,
                         arbitrary_bool1,
                         arbitrary_id,
-                        arbitrary_bool2,
                         arbitrary_resourceid2,
-                        arbitrary_rect1,
                         arbitrary_rectf1,
                         arbitrary_filters1,
                         arbitrary_vector2df1,
@@ -692,58 +687,6 @@
   Compare(arbitrary_resource2, frame_out.resource_list[1]);
 }
 
-TEST_F(CCMessagesTest, LargestQuadType) {
-  size_t largest = 0;
-
-  bool done = false;
-  for (int i = 0; !done; ++i) {
-    switch (static_cast<DrawQuad::Material>(i)) {
-      case cc::DrawQuad::CHECKERBOARD:
-        largest = std::max(largest, sizeof(cc::CheckerboardDrawQuad));
-        break;
-      case cc::DrawQuad::DEBUG_BORDER:
-        largest = std::max(largest, sizeof(cc::DebugBorderDrawQuad));
-        break;
-      case cc::DrawQuad::IO_SURFACE_CONTENT:
-        largest = std::max(largest, sizeof(cc::IOSurfaceDrawQuad));
-        break;
-      case cc::DrawQuad::PICTURE_CONTENT:
-        largest = std::max(largest, sizeof(cc::PictureDrawQuad));
-        break;
-      case cc::DrawQuad::TEXTURE_CONTENT:
-        largest = std::max(largest, sizeof(cc::TextureDrawQuad));
-        break;
-      case cc::DrawQuad::RENDER_PASS:
-        largest = std::max(largest, sizeof(cc::RenderPassDrawQuad));
-        break;
-      case cc::DrawQuad::SOLID_COLOR:
-        largest = std::max(largest, sizeof(cc::SolidColorDrawQuad));
-        break;
-      case cc::DrawQuad::SURFACE_CONTENT:
-        largest = std::max(largest, sizeof(cc::SurfaceDrawQuad));
-        break;
-      case cc::DrawQuad::TILED_CONTENT:
-        largest = std::max(largest, sizeof(cc::TileDrawQuad));
-        break;
-      case cc::DrawQuad::STREAM_VIDEO_CONTENT:
-        largest = std::max(largest, sizeof(cc::StreamVideoDrawQuad));
-        break;
-      case cc::DrawQuad::YUV_VIDEO_CONTENT:
-        largest = std::max(largest, sizeof(cc::YUVVideoDrawQuad));
-        break;
-      case cc::DrawQuad::INVALID:
-        break;
-      default:
-        done = true;
-    }
-  }
-
-  // Verify the largest DrawQuad type is RenderPassDrawQuad. If this ever
-  // changes, then the ReserveSizeForRenderPassWrite() method needs to be
-  // updated as well to use the new largest quad.
-  EXPECT_EQ(sizeof(RenderPassDrawQuad), largest);
-}
-
 TEST_F(CCMessagesTest, SoftwareFrameData) {
   cc::SoftwareFrameData frame_in;
   frame_in.id = 3;
