diff options
author | senorblanco@chromium.org <senorblanco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 04:45:45 +0000 |
---|---|---|
committer | senorblanco@chromium.org <senorblanco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 04:45:45 +0000 |
commit | 4000abf6e302ba8ad6129b2e21e0261b197a561f (patch) | |
tree | a2e2f6131d620d29f2e8e304fe289b6921ac787d /cc/damage_tracker_unittest.cc | |
parent | 17b0006c5d67977ef7acb21fde2a2dc19dd4e32c (diff) | |
download | chromium_src-4000abf6e302ba8ad6129b2e21e0261b197a561f.zip chromium_src-4000abf6e302ba8ad6129b2e21e0261b197a561f.tar.gz chromium_src-4000abf6e302ba8ad6129b2e21e0261b197a561f.tar.bz2 |
Implement SkImageFilter support in the compositor.
Review URL: https://chromiumcodereview.appspot.com/11175009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163507 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/damage_tracker_unittest.cc')
-rw-r--r-- | cc/damage_tracker_unittest.cc | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/cc/damage_tracker_unittest.cc b/cc/damage_tracker_unittest.cc index 5f1ed01..dbc0fb0 100644 --- a/cc/damage_tracker_unittest.cc +++ b/cc/damage_tracker_unittest.cc @@ -13,6 +13,7 @@ #include "cc/single_thread_proxy.h" #include "cc/test/geometry_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/skia/include/effects/SkBlurImageFilter.h" #include <public/WebFilterOperation.h> #include <public/WebFilterOperations.h> @@ -59,7 +60,7 @@ void emulateDrawingOneFrame(LayerImpl* root) // Iterate back-to-front, so that damage correctly propagates from descendant surfaces to ancestors. for (int i = renderSurfaceLayerList.size() - 1; i >= 0; --i) { RenderSurfaceImpl* 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,37 @@ TEST_F(DamageTrackerTest, verifyDamageForBlurredSurface) EXPECT_FLOAT_RECT_EQ(expectedDamageRect, rootDamageRect); } +TEST_F(DamageTrackerTest, verifyDamageForImageFilter) +{ + scoped_ptr<LayerImpl> root = createAndSetUpTestTreeWithOneSurface(); + LayerImpl* child = root->children()[0]; + FloatRect rootDamageRect, childDamageRect; + + // 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(); + childDamageRect = child->renderSurface()->damageTracker()->currentDamageRect(); + EXPECT_FLOAT_RECT_EQ(FloatRect(100, 100, 30, 30), rootDamageRect); + EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 30, 30), childDamageRect); + + // CASE 1: Setting the update rect should damage the whole surface (for now) + clearDamageForAllSurfaces(root.get()); + child->setUpdateRect(FloatRect(0, 0, 1, 1)); + emulateDrawingOneFrame(root.get()); + + rootDamageRect = root->renderSurface()->damageTracker()->currentDamageRect(); + childDamageRect = child->renderSurface()->damageTracker()->currentDamageRect(); + EXPECT_FLOAT_RECT_EQ(FloatRect(100, 100, 30, 30), rootDamageRect); + EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 30, 30), childDamageRect); +} + TEST_F(DamageTrackerTest, verifyDamageForBackgroundBlurredChild) { scoped_ptr<LayerImpl> root = createAndSetUpTestTreeWithTwoSurfaces(); @@ -1095,7 +1127,7 @@ TEST_F(DamageTrackerTest, verifyDamageForEmptyLayerList) ASSERT_TRUE(root == root->renderTarget()); RenderSurfaceImpl* 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()); |