[go: nahoru, domu]

Choose largest DrawQuad type, no longer dependent on compiler flag

Use template to choose between RenderPassDrawQuad and
StreamVideoDrawQuad for LargestDrawQuad.

BUG=429552

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

Cr-Commit-Position: refs/heads/master@{#302833}
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 32d6aed..a578b61c 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -293,6 +293,7 @@
     "quads/io_surface_draw_quad.cc",
     "quads/io_surface_draw_quad.h",
     "quads/largest_draw_quad.h",
+    "quads/largest_draw_quad.cc",
     "quads/list_container.cc",
     "quads/list_container.h",
     "quads/picture_draw_quad.cc",
diff --git a/cc/cc.gyp b/cc/cc.gyp
index 3c457f9..308a61d 100644
--- a/cc/cc.gyp
+++ b/cc/cc.gyp
@@ -321,6 +321,7 @@
         'quads/io_surface_draw_quad.cc',
         'quads/io_surface_draw_quad.h',
         'quads/largest_draw_quad.h',
+        'quads/largest_draw_quad.cc',
         'quads/list_container.cc',
         'quads/list_container.h',
         'quads/picture_draw_quad.cc',
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc
index 1d09307..d3753ca5 100644
--- a/cc/quads/draw_quad_unittest.cc
+++ b/cc/quads/draw_quad_unittest.cc
@@ -102,13 +102,13 @@
       render_pass->CreateAndAppendSharedQuadState();                       \
   copy_shared_state->CopyFrom(shared_state);
 
-#define QUAD_DATA \
-    gfx::Rect quad_rect(30, 40, 50, 60); \
-    gfx::Rect quad_visible_rect(40, 50, 30, 20); \
-    gfx::Rect quad_opaque_rect( 60, 55, 10, 10); \
-    ALLOW_UNUSED_LOCAL(quad_opaque_rect); \
-    bool needs_blending = true; \
-    ALLOW_UNUSED_LOCAL(needs_blending);
+#define QUAD_DATA                              \
+  gfx::Rect quad_rect(30, 40, 50, 60);         \
+  gfx::Rect quad_visible_rect(40, 50, 30, 20); \
+  gfx::Rect quad_opaque_rect(60, 55, 10, 10);  \
+  ALLOW_UNUSED_LOCAL(quad_opaque_rect);        \
+  bool needs_blending = true;                  \
+  ALLOW_UNUSED_LOCAL(needs_blending);
 
 #define SETUP_AND_COPY_QUAD_NEW(Type, quad)                                \
   DrawQuad* copy_new =                                                     \
@@ -979,14 +979,14 @@
         break;
     }
   }
-  EXPECT_EQ(sizeof(kLargestDrawQuad), largest);
+  EXPECT_EQ(LargestDrawQuadSize(), largest);
 
   if (!HasFailure())
     return;
 
   // On failure, output the size of all quads for debugging.
   LOG(ERROR) << "largest " << largest;
-  LOG(ERROR) << "kLargestDrawQuad " << sizeof(kLargestDrawQuad);
+  LOG(ERROR) << "kLargestDrawQuad " << LargestDrawQuadSize();
   for (int i = 0; i <= DrawQuad::MATERIAL_LAST; ++i) {
     switch (static_cast<DrawQuad::Material>(i)) {
       case DrawQuad::CHECKERBOARD:
diff --git a/cc/quads/largest_draw_quad.cc b/cc/quads/largest_draw_quad.cc
new file mode 100644
index 0000000..55fcb22
--- /dev/null
+++ b/cc/quads/largest_draw_quad.cc
@@ -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.
+
+#include "cc/quads/largest_draw_quad.h"
+
+#include <algorithm>
+
+#include "cc/quads/render_pass_draw_quad.h"
+#include "cc/quads/stream_video_draw_quad.h"
+
+namespace cc {
+
+size_t LargestDrawQuadSize() {
+  // The largest quad is either a RenderPassDrawQuad or a StreamVideoDrawQuad
+  // depends on hardware structure.
+  return std::max(sizeof(RenderPassDrawQuad), sizeof(StreamVideoDrawQuad));
+}
+
+}  // namespace cc
diff --git a/cc/quads/largest_draw_quad.h b/cc/quads/largest_draw_quad.h
index d14906a..85d9f17 100644
--- a/cc/quads/largest_draw_quad.h
+++ b/cc/quads/largest_draw_quad.h
@@ -5,15 +5,12 @@
 #ifndef CC_QUADS_LARGEST_DRAW_QUAD_H_
 #define CC_QUADS_LARGEST_DRAW_QUAD_H_
 
-namespace cc {
-class StreamVideoDrawQuad;
-class RenderPassDrawQuad;
+#include "base/basictypes.h"
+#include "cc/base/cc_export.h"
 
-#if defined(ARCH_CPU_64_BITS)
-typedef RenderPassDrawQuad kLargestDrawQuad;
-#else
-typedef StreamVideoDrawQuad kLargestDrawQuad;
-#endif
+namespace cc {
+
+CC_EXPORT size_t LargestDrawQuadSize();
 
 }  // namespace cc
 
diff --git a/cc/quads/list_container.h b/cc/quads/list_container.h
index a61a6e0c..dd313fc8 100644
--- a/cc/quads/list_container.h
+++ b/cc/quads/list_container.h
@@ -20,7 +20,7 @@
 // pointer will continue to be valid.  This class is used to contain
 // SharedQuadState or DrawQuad. Since the size of each DrawQuad varies, to hold
 // DrawQuads, the allocations size of each element in this class is
-// kLargestDrawQuad while BaseElementType is DrawQuad.
+// LargestDrawQuadSize while BaseElementType is DrawQuad.
 template <class BaseElementType>
 class CC_EXPORT ListContainer {
  public:
diff --git a/cc/quads/list_container_unittest.cc b/cc/quads/list_container_unittest.cc
index d68ab59..3ef677c 100644
--- a/cc/quads/list_container_unittest.cc
+++ b/cc/quads/list_container_unittest.cc
@@ -64,7 +64,7 @@
 };
 
 TEST(ListContainerTest, ConstructorCalledInAllocateAndConstruct) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad));
+  ListContainer<DrawQuad> list(LargestDrawQuadSize());
 
   size_t size = 2;
   SimpleDrawQuadConstructMagicNumberOne* dq_1 =
@@ -81,7 +81,7 @@
 }
 
 TEST(ListContainerTest, DestructorCalled) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad));
+  ListContainer<DrawQuad> list(LargestDrawQuadSize());
 
   size_t size = 1;
   MockDrawQuad* dq_1 = list.AllocateAndConstruct<MockDrawQuad>();
@@ -92,7 +92,7 @@
 }
 
 TEST(ListContainerTest, DestructorCalledOnceWhenClear) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad));
+  ListContainer<DrawQuad> list(LargestDrawQuadSize());
   size_t size = 1;
   MockDrawQuad* dq_1 = list.AllocateAndConstruct<MockDrawQuad>();
 
@@ -114,7 +114,7 @@
 }
 
 TEST(ListContainerTest, DestructorCalledOnceWhenErase) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad));
+  ListContainer<DrawQuad> list(LargestDrawQuadSize());
   size_t size = 1;
   MockDrawQuad* dq_1 = list.AllocateAndConstruct<MockDrawQuad>();
 
@@ -435,7 +435,7 @@
 }
 
 TEST(ListContainerTest, SimpleDeletion) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad));
+  ListContainer<DrawQuad> list(LargestDrawQuadSize());
   std::vector<SimpleDrawQuad*> sdq_list;
   size_t size = 10;
   for (size_t i = 0; i < size; ++i) {
@@ -457,7 +457,7 @@
 }
 
 TEST(ListContainerTest, SimpleIterationAndManipulation) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad));
+  ListContainer<DrawQuad> list(LargestDrawQuadSize());
   std::vector<SimpleDrawQuad*> sdq_list;
   size_t size = 10;
   for (size_t i = 0; i < size; ++i) {
@@ -482,7 +482,7 @@
 }
 
 TEST(ListContainerTest, SimpleManipulationWithIndexSimpleDrawQuad) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad));
+  ListContainer<DrawQuad> list(LargestDrawQuadSize());
   std::vector<SimpleDrawQuad*> dq_list;
   size_t size = 10;
   for (size_t i = 0; i < size; ++i) {
@@ -504,7 +504,7 @@
 
 TEST(ListContainerTest,
      SimpleManipulationWithIndexMoreThanOneAllocationSimpleDrawQuad) {
-  ListContainer<DrawQuad> list(sizeof(kLargestDrawQuad), 2);
+  ListContainer<DrawQuad> list(LargestDrawQuadSize(), 2);
   std::vector<SimpleDrawQuad*> dq_list;
   size_t size = 10;
   for (size_t i = 0; i < size; ++i) {
diff --git a/cc/quads/render_pass.cc b/cc/quads/render_pass.cc
index e311aec..a1426f5 100644
--- a/cc/quads/render_pass.cc
+++ b/cc/quads/render_pass.cc
@@ -34,8 +34,7 @@
 namespace cc {
 
 QuadList::QuadList(size_t default_size_to_reserve)
-    : ListContainer<DrawQuad>(sizeof(kLargestDrawQuad),
-                              default_size_to_reserve) {
+    : ListContainer<DrawQuad>(LargestDrawQuadSize(), default_size_to_reserve) {
 }
 
 scoped_ptr<RenderPass> RenderPass::Create() {
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc
index d2f4bd6..426cee21 100644
--- a/content/common/cc_messages.cc
+++ b/content/common/cc_messages.cc
@@ -379,7 +379,7 @@
   to_reserve += p.shared_quad_state_list.size() * sizeof(cc::SharedQuadState);
 
   // The largest quad type, verified by a unit test.
-  to_reserve += p.quad_list.size() * sizeof(cc::kLargestDrawQuad);
+  to_reserve += p.quad_list.size() * cc::LargestDrawQuadSize();
   return to_reserve;
 }