From e0b723c4ffc47e8bf4242b8713b74c0005ecd6e8 Mon Sep 17 00:00:00 2001 From: vmpstr Date: Sat, 1 Nov 2014 12:45:27 -0700 Subject: [PATCH] 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} --- cc/resources/picture_layer_tiling.cc | 2 ++ cc/resources/picture_layer_tiling_unittest.cc | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc index 61b0362ee44c..d8885e7bc137 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 2952c6a22931..f793097b7f4b 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) { -- 2.11.4.GIT