| Index: cc/test/layer_test_common.cc
|
| diff --git a/cc/test/layer_test_common.cc b/cc/test/layer_test_common.cc
|
| index 1a41eec210e8c4c46237f6d78aa82cbce9a6a136..72546dd11af09f296bb49cc6dd63556387795349 100644
|
| --- a/cc/test/layer_test_common.cc
|
| +++ b/cc/test/layer_test_common.cc
|
| @@ -7,6 +7,7 @@
|
| #include "cc/test/layer_test_common.h"
|
|
|
| #include "cc/draw_quad.h"
|
| +#include "cc/math_util.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace LayerTestCommon {
|
| @@ -14,13 +15,35 @@ namespace LayerTestCommon {
|
| // Align with expected and actual output
|
| const char* quadString = " Quad: ";
|
|
|
| +bool floatRectCanBeSafelyRoundedToIntRect(const cc::FloatRect& r)
|
| +{
|
| + // Ensure that range of float values is not beyond integer range.
|
| + if (!r.isExpressibleAsIntRect())
|
| + return false;
|
| +
|
| + // Ensure that the values are actually integers.
|
| + if (floorf(r.x()) == r.x()
|
| + && floorf(r.y()) == r.y()
|
| + && floorf(r.width()) == r.width()
|
| + && floorf(r.height()) == r.height())
|
| + return true;
|
| +
|
| + return false;
|
| +}
|
| +
|
| void verifyQuadsExactlyCoverRect(const cc::QuadList& quads,
|
| const cc::IntRect& rect) {
|
| cc::Region remaining(rect);
|
|
|
| for (size_t i = 0; i < quads.size(); ++i) {
|
| cc::DrawQuad* quad = quads[i];
|
| - cc::IntRect quadRect = cc::IntRect(quad->quadRect());
|
| + cc::FloatRect floatQuadRect = cc::MathUtil::mapClippedRect(quad->sharedQuadState()->quadTransform, cc::FloatRect(quad->quadRect()));
|
| +
|
| + // Before testing for exact coverage in the integer world, assert that rounding
|
| + // will not round the rect incorrectly.
|
| + ASSERT_TRUE(floatRectCanBeSafelyRoundedToIntRect(floatQuadRect));
|
| +
|
| + cc::IntRect quadRect = enclosingIntRect(floatQuadRect);
|
|
|
| EXPECT_TRUE(rect.contains(quadRect)) << quadString << i;
|
| EXPECT_TRUE(remaining.contains(quadRect)) << quadString << i;
|
|
|