summaryrefslogtreecommitdiffstats
path: root/cc/damage_tracker_unittest.cc
diff options
context:
space:
mode:
authorsenorblanco@chromium.org <senorblanco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 04:45:45 +0000
committersenorblanco@chromium.org <senorblanco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 04:45:45 +0000
commit4000abf6e302ba8ad6129b2e21e0261b197a561f (patch)
treea2e2f6131d620d29f2e8e304fe289b6921ac787d /cc/damage_tracker_unittest.cc
parent17b0006c5d67977ef7acb21fde2a2dc19dd4e32c (diff)
downloadchromium_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.cc36
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());