Chromium Code Reviews| Index: third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp |
| diff --git a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..67cc99685dbae65a4ae0647f30fe13d0efff793c |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp |
| @@ -0,0 +1,83 @@ |
| +// Copyright 2016 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 "core/HTMLNames.h" |
| +#include "core/frame/FrameView.h" |
| +#include "core/layout/LayoutTestHelper.h" |
| +#include "core/layout/LayoutView.h" |
| +#include "core/paint/PaintLayer.h" |
| +#include "platform/graphics/GraphicsLayer.h" |
| +#include "platform/graphics/paint/RasterInvalidationTracking.h" |
| + |
| +namespace blink { |
| + |
| +class BoxPaintInvalidatorTest : public RenderingTest { |
| + protected: |
| + const RasterInvalidationTracking* getRasterInvalidationTracking() const { |
| + // TODO(wangxianzhu): Test SPv2. |
| + return layoutView() |
| + .layer() |
| + ->graphicsLayerBacking() |
| + ->getRasterInvalidationTracking(); |
| + } |
| + |
| + private: |
| + void SetUp() override { |
| + RenderingTest::SetUp(); |
| + enableCompositing(); |
| + setBodyInnerHTML( |
| + "<style>" |
| + " body { margin: 0 }" |
| + " #target {" |
| + " width: 50px;" |
| + " height: 100px;" |
| + " border-width: 20px 10px;" |
| + " border-style: solid;" |
| + " border-color: red;" |
| + " }" |
| + "</style>" |
| + "<div id='target'></div>"); |
| + } |
| +}; |
| + |
| +TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationExpand) { |
| + document().view()->setTracksPaintInvalidations(true); |
| + Element* target = document().getElementById("target"); |
| + target->setAttribute(HTMLNames::styleAttr, "width: 100px; height: 200px"); |
| + document().view()->updateAllLifecyclePhases(); |
| + const auto* rasterInvalidations = |
| + &getRasterInvalidationTracking()->trackedRasterInvalidations; |
| + EXPECT_EQ(2u, rasterInvalidations->size()); |
| + EXPECT_EQ(IntRect(60, 0, 60, 240), (*rasterInvalidations)[0].rect); |
|
chrishtr
2016/10/21 17:18:27
Check that the paint invalidation reason matches a
Xianzhu
2016/10/21 17:53:38
Done.
|
| + EXPECT_EQ(IntRect(0, 120, 120, 120), (*rasterInvalidations)[1].rect); |
| + document().view()->setTracksPaintInvalidations(false); |
| +} |
| + |
| +TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationShrink) { |
| + document().view()->setTracksPaintInvalidations(true); |
| + Element* target = document().getElementById("target"); |
| + target->setAttribute(HTMLNames::styleAttr, "width: 20px; height: 80px"); |
| + document().view()->updateAllLifecyclePhases(); |
| + const auto* rasterInvalidations = |
| + &getRasterInvalidationTracking()->trackedRasterInvalidations; |
| + EXPECT_EQ(2u, rasterInvalidations->size()); |
| + EXPECT_EQ(IntRect(30, 0, 40, 140), (*rasterInvalidations)[0].rect); |
| + EXPECT_EQ(IntRect(0, 100, 70, 40), (*rasterInvalidations)[1].rect); |
| + document().view()->setTracksPaintInvalidations(false); |
| +} |
| + |
| +TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationMixed) { |
| + document().view()->setTracksPaintInvalidations(true); |
| + Element* target = document().getElementById("target"); |
| + target->setAttribute(HTMLNames::styleAttr, "width: 100px; height: 80px"); |
| + document().view()->updateAllLifecyclePhases(); |
| + const auto* rasterInvalidations = |
| + &getRasterInvalidationTracking()->trackedRasterInvalidations; |
| + EXPECT_EQ(2u, rasterInvalidations->size()); |
| + EXPECT_EQ(IntRect(60, 0, 60, 120), (*rasterInvalidations)[0].rect); |
| + EXPECT_EQ(IntRect(0, 100, 70, 40), (*rasterInvalidations)[1].rect); |
| + document().view()->setTracksPaintInvalidations(false); |
| +} |
| + |
| +} // namespace blink |