[go: nahoru, domu]

Remove unused RenderPassDrawQuad fields

The contents_changed_since_last_frame and is_replica fields are not
used. Also removes RenderSurfaceImpl's ContentsChanged() as this method
was only used in determining the value of
contents_changed_since_last_frame.

Unfortunately now RenderPassDrawQuad is only the largest quad type on
64-bit builds. So, adds kLargestQuadType to cc/quads/ and moves the
largest-quad-type unit test there verifying that kLargestQuadType is
the largest now, instead of RenderPassDrawQuad.

R=enne
BUG=401481
NOTRY=true

Review URL: https://codereview.chromium.org/448133002

Cr-Commit-Position: refs/heads/master@{#289091}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289091 0039d316-1c4b-4281-b951-d872f2087c98
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;