Chromium Code Reviews| Index: cc/damage_tracker_unittest.cc |
| diff --git a/cc/damage_tracker_unittest.cc b/cc/damage_tracker_unittest.cc |
| index 17f7d2f54f382192f14665a2a2126e56df3be8dd..a0425d83964a05333f60adaab55f7736168577e3 100644 |
| --- a/cc/damage_tracker_unittest.cc |
| +++ b/cc/damage_tracker_unittest.cc |
| @@ -9,6 +9,7 @@ |
| #include "CCLayerImpl.h" |
| #include "CCLayerSorter.h" |
| #include "CCLayerTreeHostCommon.h" |
| +#include "SkBlurImageFilter.h" |
| #include "cc/math_util.h" |
| #include "cc/single_thread_proxy.h" |
| #include "cc/test/geometry_test_utils.h" |
| @@ -59,7 +60,7 @@ void emulateDrawingOneFrame(CCLayerImpl* root) |
| // Iterate back-to-front, so that damage correctly propagates from descendant surfaces to ancestors. |
| for (int i = renderSurfaceLayerList.size() - 1; i >= 0; --i) { |
| CCRenderSurface* targetSurface = renderSurfaceLayerList[i]->renderSurface(); |
| - targetSurface->damageTracker()->updateDamageTrackingState(targetSurface->layerList(), targetSurface->owningLayerId(), targetSurface->surfacePropertyChangedOnlyFromDescendant(), targetSurface->contentRect(), renderSurfaceLayerList[i]->maskLayer(), renderSurfaceLayerList[i]->filters()); |
| + targetSurface->damageTracker()->updateDamageTrackingState(targetSurface->layerList(), targetSurface->owningLayerId(), targetSurface->surfacePropertyChangedOnlyFromDescendant(), targetSurface->contentRect(), renderSurfaceLayerList[i]->maskLayer(), renderSurfaceLayerList[i]->filters(), renderSurfaceLayerList[i]->filter()); |
| } |
| root->resetAllChangeTrackingForSubtree(); |
| @@ -392,6 +393,33 @@ TEST_F(CCDamageTrackerTest, verifyDamageForBlurredSurface) |
| EXPECT_FLOAT_RECT_EQ(expectedDamageRect, rootDamageRect); |
| } |
| +TEST_F(CCDamageTrackerTest, verifyDamageForImageFilter) |
| +{ |
| + scoped_ptr<CCLayerImpl> root = createAndSetUpTestTreeWithOneSurface(); |
| + CCLayerImpl* child = root->children()[0]; |
| + FloatRect rootDamageRect; |
| + |
| + // Allow us to set damage on child too. |
| + child->setDrawsContent(true); |
| + |
| + SkAutoTUnref<SkImageFilter> filter(new SkBlurImageFilter(SkIntToScalar(2), |
| + SkIntToScalar(2))); |
| + // Setting the filter will damage the whole surface. |
| + clearDamageForAllSurfaces(root.get()); |
| + child->setFilter(filter); |
| + emulateDrawingOneFrame(root.get()); |
| + rootDamageRect = root->renderSurface()->damageTracker()->currentDamageRect(); |
| + EXPECT_FLOAT_RECT_EQ(FloatRect(100, 100, 30, 30), rootDamageRect); |
| + |
| + // CASE 1: Setting the update rect should damage the whole surface (for now) |
| + clearDamageForAllSurfaces(root.get()); |
| + root->setUpdateRect(FloatRect(297, 297, 2, 2)); |
|
danakj
2012/10/22 18:56:02
This is a copy/paste from background filters. Does
|
| + emulateDrawingOneFrame(root.get()); |
| + |
| + rootDamageRect = root->renderSurface()->damageTracker()->currentDamageRect(); |
| + EXPECT_FLOAT_RECT_EQ(FloatRect(100, 100, 199, 199), rootDamageRect); |
| +} |
| + |
| TEST_F(CCDamageTrackerTest, verifyDamageForBackgroundBlurredChild) |
| { |
| scoped_ptr<CCLayerImpl> root = createAndSetUpTestTreeWithTwoSurfaces(); |
| @@ -1095,7 +1123,7 @@ TEST_F(CCDamageTrackerTest, verifyDamageForEmptyLayerList) |
| ASSERT_TRUE(root == root->renderTarget()); |
| CCRenderSurface* targetSurface = root->renderSurface(); |
| targetSurface->clearLayerLists(); |
| - targetSurface->damageTracker()->updateDamageTrackingState(targetSurface->layerList(), targetSurface->owningLayerId(), false, IntRect(), 0, WebFilterOperations()); |
| + targetSurface->damageTracker()->updateDamageTrackingState(targetSurface->layerList(), targetSurface->owningLayerId(), false, IntRect(), 0, WebFilterOperations(), 0); |
| FloatRect damageRect = targetSurface->damageTracker()->currentDamageRect(); |
| EXPECT_TRUE(damageRect.isEmpty()); |