summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorvmpstr <vmpstr@chromium.org>2014-11-01 12:45:27 -0700
committerCommit bot <commit-bot@chromium.org>2014-11-01 19:45:49 +0000
commite0b723c4ffc47e8bf4242b8713b74c0005ecd6e8 (patch)
treec0da6fbbe66e4af3df8266d9e050d7d324f20c6b /cc
parent5bab673bb8b4ddfbcc7ef996688d813afbd02ca4 (diff)
downloadchromium_src-e0b723c4ffc47e8bf4242b8713b74c0005ecd6e8.zip
chromium_src-e0b723c4ffc47e8bf4242b8713b74c0005ecd6e8.tar.gz
chromium_src-e0b723c4ffc47e8bf4242b8713b74c0005ecd6e8.tar.bz2
cc: Invalidate eviction cache in cases where we remove/add tiles.
This patch adds more eviction cache invalidations in order to avoid use after free scenarios. This problem will be fixed by faster eviction since we won't need the cache, but until that is in place, this is a necessary fix. BUG=429201 R=danakj, reveman Review URL: https://codereview.chromium.org/687573003 Cr-Commit-Position: refs/heads/master@{#302393}
Diffstat (limited to 'cc')
-rw-r--r--cc/resources/picture_layer_tiling.cc2
-rw-r--r--cc/resources/picture_layer_tiling_unittest.cc7
2 files changed, 9 insertions, 0 deletions
diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc
index 61b0362..d8885e7 100644
--- a/cc/resources/picture_layer_tiling.cc
+++ b/cc/resources/picture_layer_tiling.cc
@@ -145,6 +145,7 @@ Tile* PictureLayerTiling::CreateTile(int i,
tile->set_tiling_index(i, j);
tiles_[key] = tile;
}
+ eviction_tiles_cache_valid_ = false;
return tile.get();
}
@@ -486,6 +487,7 @@ void PictureLayerTiling::Reset() {
recycled_twin->RemoveTileAt(it->first.first, it->first.second, NULL);
}
tiles_.clear();
+ eviction_tiles_cache_valid_ = false;
}
gfx::Rect PictureLayerTiling::ComputeSkewport(
diff --git a/cc/resources/picture_layer_tiling_unittest.cc b/cc/resources/picture_layer_tiling_unittest.cc
index 2952c6a..f793097 100644
--- a/cc/resources/picture_layer_tiling_unittest.cc
+++ b/cc/resources/picture_layer_tiling_unittest.cc
@@ -1346,6 +1346,13 @@ TEST(PictureLayerTilingTest, TilingEvictionTileIteratorStaticViewport) {
EXPECT_TRUE(tiling->eviction_tiles_cache_valid());
tiling->RemoveTileAt(0, 0, nullptr);
EXPECT_FALSE(tiling->eviction_tiles_cache_valid());
+
+ it = PictureLayerTiling::TilingEvictionTileIterator(
+ tiling.get(), SMOOTHNESS_TAKES_PRIORITY,
+ PictureLayerTiling::NOW_AND_REQUIRED_FOR_ACTIVATION);
+ EXPECT_TRUE(tiling->eviction_tiles_cache_valid());
+ tiling->Reset();
+ EXPECT_FALSE(tiling->eviction_tiles_cache_valid());
}
TEST_F(PictureLayerTilingIteratorTest, TilesExist) {