Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Unified Diff: cc/quads/largest_draw_quad.cc

Issue 2324083003: Fix kLargestDrawQuadSize (Closed)
Patch Set: use a recursive variadic template Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/quads/draw_quad_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/quads/largest_draw_quad.cc
diff --git a/cc/quads/largest_draw_quad.cc b/cc/quads/largest_draw_quad.cc
index 35c64314c6d87965e331a478f83e3537f3af7487..68221da17a99aa89835b584fcb2aa5d605a817d0 100644
--- a/cc/quads/largest_draw_quad.cc
+++ b/cc/quads/largest_draw_quad.cc
@@ -19,40 +19,34 @@
#include "cc/quads/yuv_video_draw_quad.h"
namespace {
-const size_t kLargestDrawQuadSize =
- sizeof(cc::YUVVideoDrawQuad) + sizeof(gfx::ColorSpace);
+template <typename...>
+struct MaxSize {};
+template <class T, class... Args>
+struct MaxSize<T, Args...> {
+ static const size_t value = sizeof(T) > MaxSize<Args...>::value
+ ? sizeof(T)
+ : MaxSize<Args...>::value;
+};
+template <>
+struct MaxSize<> {
+ static const size_t value = 0;
+};
+
+const size_t kLargestDrawQuadSize = MaxSize<cc::DebugBorderDrawQuad,
+ cc::PictureDrawQuad,
+ cc::RenderPassDrawQuad,
+ cc::SolidColorDrawQuad,
+ cc::StreamVideoDrawQuad,
+ cc::SurfaceDrawQuad,
+ cc::TextureDrawQuad,
+ cc::TileDrawQuad,
+ cc::YUVVideoDrawQuad>::value;
+
} // namespace
namespace cc {
size_t LargestDrawQuadSize() {
- // Currently the largest quad is either a RenderPassDrawQuad or a
- // StreamVideoDrawQuad depends on hardware structure.
-
- // Use compile assert to make sure largest is actually larger than all other
- // type of draw quads.
- static_assert(sizeof(DebugBorderDrawQuad) <= kLargestDrawQuadSize,
- "Largest Draw Quad size needs update. DebugBorderDrawQuad is "
- "currently largest.");
- static_assert(sizeof(PictureDrawQuad) <= kLargestDrawQuadSize,
- "Largest Draw Quad size needs update. PictureDrawQuad is "
- "currently largest.");
- static_assert(sizeof(TextureDrawQuad) <= kLargestDrawQuadSize,
- "Largest Draw Quad size needs update. TextureDrawQuad is "
- "currently largest.");
- static_assert(sizeof(SolidColorDrawQuad) <= kLargestDrawQuadSize,
- "Largest Draw Quad size needs update. SolidColorDrawQuad is "
- "currently largest.");
- static_assert(sizeof(SurfaceDrawQuad) <= kLargestDrawQuadSize,
- "Largest Draw Quad size needs update. SurfaceDrawQuad is "
- "currently largest.");
- static_assert(sizeof(TileDrawQuad) <= kLargestDrawQuadSize,
- "Largest Draw Quad size needs update. TileDrawQuad is "
- "currently largest.");
- static_assert(sizeof(YUVVideoDrawQuad) <= kLargestDrawQuadSize,
- "Largest Draw Quad size needs update. YUVVideoDrawQuad is "
- "currently largest.");
-
return kLargestDrawQuadSize;
}
« no previous file with comments | « cc/quads/draw_quad_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698