diff options
author | vmpstr <vmpstr@chromium.org> | 2014-11-01 12:45:27 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-01 19:45:49 +0000 |
commit | e0b723c4ffc47e8bf4242b8713b74c0005ecd6e8 (patch) | |
tree | c0da6fbbe66e4af3df8266d9e050d7d324f20c6b /cc | |
parent | 5bab673bb8b4ddfbcc7ef996688d813afbd02ca4 (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | cc/resources/picture_layer_tiling_unittest.cc | 7 |
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) { |