Commit 1e323eed authored by ericrk's avatar ericrk Committed by Commit bot

Add PictureLayerTiling pointer to Tile

This is preperatory work which will allow for cheaper update of the
req'd for activation/draw status in the client side scheduler work.

BUG=673434
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2564433003
Cr-Commit-Position: refs/heads/master@{#437990}
parent 0c7a8ec9
...@@ -156,17 +156,14 @@ void PictureLayerTiling::TakeTilesAndPropertiesFrom( ...@@ -156,17 +156,14 @@ void PictureLayerTiling::TakeTilesAndPropertiesFrom(
SetLiveTilesRect(pending_twin->live_tiles_rect()); SetLiveTilesRect(pending_twin->live_tiles_rect());
} }
if (tiles_.empty()) { while (!pending_twin->tiles_.empty()) {
tiles_.swap(pending_twin->tiles_); auto pending_iter = pending_twin->tiles_.begin();
all_tiles_done_ = pending_twin->all_tiles_done_; pending_iter->second->set_tiling(this);
} else { tiles_[pending_iter->first] = std::move(pending_iter->second);
while (!pending_twin->tiles_.empty()) { pending_twin->tiles_.erase(pending_iter);
auto pending_iter = pending_twin->tiles_.begin();
tiles_[pending_iter->first] = std::move(pending_iter->second);
pending_twin->tiles_.erase(pending_iter);
}
all_tiles_done_ &= pending_twin->all_tiles_done_;
} }
all_tiles_done_ &= pending_twin->all_tiles_done_;
DCHECK(pending_twin->tiles_.empty()); DCHECK(pending_twin->tiles_.empty());
pending_twin->all_tiles_done_ = true; pending_twin->all_tiles_done_ = true;
...@@ -323,7 +320,7 @@ Tile::CreateInfo PictureLayerTiling::CreateInfoForTile(int i, int j) const { ...@@ -323,7 +320,7 @@ Tile::CreateInfo PictureLayerTiling::CreateInfoForTile(int i, int j) const {
tile_rect.set_size(tiling_data_.max_texture_size()); tile_rect.set_size(tiling_data_.max_texture_size());
gfx::Rect enclosing_layer_rect = gfx::ScaleToEnclosingRect( gfx::Rect enclosing_layer_rect = gfx::ScaleToEnclosingRect(
tile_rect, 1.f / raster_scales_.width(), 1.f / raster_scales_.height()); tile_rect, 1.f / raster_scales_.width(), 1.f / raster_scales_.height());
return Tile::CreateInfo(i, j, enclosing_layer_rect, tile_rect, return Tile::CreateInfo(this, i, j, enclosing_layer_rect, tile_rect,
raster_scales_); raster_scales_);
} }
......
...@@ -1062,5 +1062,32 @@ TEST_F(PictureLayerTilingIteratorTest, TightCover2) { ...@@ -1062,5 +1062,32 @@ TEST_F(PictureLayerTilingIteratorTest, TightCover2) {
VerifyTilesExactlyCoverRect(dest_scale, gfx::Rect(10001, 2)); VerifyTilesExactlyCoverRect(dest_scale, gfx::Rect(10001, 2));
} }
TEST_F(PictureLayerTilingIteratorTest, TilesStoreTilings) {
gfx::Size bounds(200, 200);
Initialize(gfx::Size(100, 100), 1.f, bounds);
SetLiveRectAndVerifyTiles(gfx::Rect(bounds));
// Get all tiles and ensure they are associated with |tiling_|.
std::vector<Tile*> tiles = tiling_->AllTilesForTesting();
EXPECT_TRUE(tiles.size());
for (const auto* tile : tiles) {
EXPECT_EQ(tile->tiling(), tiling_.get());
}
// Create an active tiling, transfer tiles to that tiling, and ensure that
// the tiles have their tiling updated.
scoped_refptr<FakeRasterSource> raster_source =
FakeRasterSource::CreateFilled(bounds);
auto active_tiling = TestablePictureLayerTiling::Create(
ACTIVE_TREE, 1.f, raster_source, &client_, LayerTreeSettings());
active_tiling->set_resolution(HIGH_RESOLUTION);
active_tiling->TakeTilesAndPropertiesFrom(tiling_.get(),
Region(gfx::Rect(bounds)));
for (const auto* tile : tiles) {
EXPECT_EQ(tile->tiling(), active_tiling.get());
}
}
} // namespace } // namespace
} // namespace cc } // namespace cc
...@@ -23,6 +23,7 @@ Tile::Tile(TileManager* tile_manager, ...@@ -23,6 +23,7 @@ Tile::Tile(TileManager* tile_manager,
int source_frame_number, int source_frame_number,
int flags) int flags)
: tile_manager_(tile_manager), : tile_manager_(tile_manager),
tiling_(info.tiling),
content_rect_(info.content_rect), content_rect_(info.content_rect),
enclosing_layer_rect_(info.enclosing_layer_rect), enclosing_layer_rect_(info.enclosing_layer_rect),
raster_scales_(info.raster_scales), raster_scales_(info.raster_scales),
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
namespace cc { namespace cc {
class PictureLayerTiling;
class TileManager; class TileManager;
class CC_EXPORT Tile { class CC_EXPORT Tile {
...@@ -28,18 +29,21 @@ class CC_EXPORT Tile { ...@@ -28,18 +29,21 @@ class CC_EXPORT Tile {
class CC_EXPORT CreateInfo { class CC_EXPORT CreateInfo {
public: public:
const PictureLayerTiling* tiling;
int tiling_i_index; int tiling_i_index;
int tiling_j_index; int tiling_j_index;
gfx::Rect enclosing_layer_rect; gfx::Rect enclosing_layer_rect;
gfx::Rect content_rect; gfx::Rect content_rect;
gfx::SizeF raster_scales; gfx::SizeF raster_scales;
CreateInfo(int tiling_i_index, CreateInfo(const PictureLayerTiling* tiling,
int tiling_i_index,
int tiling_j_index, int tiling_j_index,
const gfx::Rect& enclosing_layer_rect, const gfx::Rect& enclosing_layer_rect,
const gfx::Rect& content_rect, const gfx::Rect& content_rect,
const gfx::SizeF& raster_scales) const gfx::SizeF& raster_scales)
: tiling_i_index(tiling_i_index), : tiling(tiling),
tiling_i_index(tiling_i_index),
tiling_j_index(tiling_j_index), tiling_j_index(tiling_j_index),
enclosing_layer_rect(enclosing_layer_rect), enclosing_layer_rect(enclosing_layer_rect),
content_rect(content_rect), content_rect(content_rect),
...@@ -113,6 +117,9 @@ class CC_EXPORT Tile { ...@@ -113,6 +117,9 @@ class CC_EXPORT Tile {
return is_solid_color_analysis_performed_; return is_solid_color_analysis_performed_;
} }
const PictureLayerTiling* tiling() const { return tiling_; }
void set_tiling(const PictureLayerTiling* tiling) { tiling_ = tiling; }
private: private:
friend class TileManager; friend class TileManager;
friend class FakeTileManager; friend class FakeTileManager;
...@@ -127,6 +134,7 @@ class CC_EXPORT Tile { ...@@ -127,6 +134,7 @@ class CC_EXPORT Tile {
~Tile(); ~Tile();
TileManager* const tile_manager_; TileManager* const tile_manager_;
const PictureLayerTiling* tiling_;
const gfx::Rect content_rect_; const gfx::Rect content_rect_;
const gfx::Rect enclosing_layer_rect_; const gfx::Rect enclosing_layer_rect_;
const gfx::SizeF raster_scales_; const gfx::SizeF raster_scales_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment