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()); |