| Index: cc/resources/picture_layer_tiling.h
|
| diff --git a/cc/resources/picture_layer_tiling.h b/cc/resources/picture_layer_tiling.h
|
| index 2d0ae37c66800fadb7bb1968220d7406cf6b2fd1..3858f1d7b31b75049ca3b6653ebd987ec7460326 100644
|
| --- a/cc/resources/picture_layer_tiling.h
|
| +++ b/cc/resources/picture_layer_tiling.h
|
| @@ -50,6 +50,7 @@ class CC_EXPORT PictureLayerTilingClient {
|
| virtual float GetSkewportTargetTimeInSeconds() const = 0;
|
| virtual int GetSkewportExtrapolationLimitInContentPixels() const = 0;
|
| virtual WhichTree GetTree() const = 0;
|
| + virtual bool RequiresHighResToDraw() const = 0;
|
|
|
| protected:
|
| virtual ~PictureLayerTilingClient() {}
|
| @@ -69,7 +70,7 @@ class CC_EXPORT PictureLayerTiling {
|
| class CC_EXPORT TilingRasterTileIterator {
|
| public:
|
| TilingRasterTileIterator();
|
| - TilingRasterTileIterator(PictureLayerTiling* tiling, WhichTree tree);
|
| + explicit TilingRasterTileIterator(PictureLayerTiling* tiling);
|
| ~TilingRasterTileIterator();
|
|
|
| operator bool() const { return !!current_tile_; }
|
| @@ -101,13 +102,12 @@ class CC_EXPORT PictureLayerTiling {
|
|
|
| void AdvancePhase();
|
| bool TileNeedsRaster(Tile* tile) const {
|
| - return !tile->is_occluded(tree_) && !tile->IsReadyToDraw();
|
| + return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile);
|
| }
|
|
|
| PictureLayerTiling* tiling_;
|
|
|
| Phase phase_;
|
| - WhichTree tree_;
|
|
|
| Tile* current_tile_;
|
| TilingData::Iterator visible_iterator_;
|
| @@ -148,6 +148,9 @@ class CC_EXPORT PictureLayerTiling {
|
| void SetClient(PictureLayerTilingClient* client);
|
| void set_resolution(TileResolution resolution) { resolution_ = resolution; }
|
| TileResolution resolution() const { return resolution_; }
|
| + void set_can_require_tiles_for_activation(bool can_require_tiles) {
|
| + can_require_tiles_for_activation_ = can_require_tiles;
|
| + }
|
|
|
| gfx::Size tiling_size() const { return tiling_data_.tiling_size(); }
|
| gfx::Rect live_tiles_rect() const { return live_tiles_rect_; }
|
| @@ -167,12 +170,16 @@ class CC_EXPORT PictureLayerTiling {
|
|
|
| std::vector<Tile*> AllTilesForTesting() const {
|
| std::vector<Tile*> all_tiles;
|
| - for (TileMap::const_iterator it = tiles_.begin();
|
| - it != tiles_.end(); ++it)
|
| + for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it)
|
| all_tiles.push_back(it->second.get());
|
| return all_tiles;
|
| }
|
|
|
| + void UpdateAllTilePrioritiesForTesting() {
|
| + for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it)
|
| + UpdateTileAndTwinPriority(it->second.get());
|
| + }
|
| +
|
| std::vector<scoped_refptr<Tile> > AllRefTilesForTesting() const {
|
| std::vector<scoped_refptr<Tile> > all_tiles;
|
| for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it)
|
| @@ -180,10 +187,22 @@ class CC_EXPORT PictureLayerTiling {
|
| return all_tiles;
|
| }
|
|
|
| + void SetAllTilesOccludedForTesting() {
|
| + gfx::Rect viewport_in_layer_space =
|
| + ScaleToEnclosingRect(current_visible_rect_, 1.0f / contents_scale_);
|
| + current_occlusion_in_layer_space_ =
|
| + Occlusion(gfx::Transform(),
|
| + SimpleEnclosedRegion(viewport_in_layer_space),
|
| + SimpleEnclosedRegion(viewport_in_layer_space));
|
| + }
|
| +
|
| const gfx::Rect& GetCurrentVisibleRectForTesting() const {
|
| return current_visible_rect_;
|
| }
|
|
|
| + bool IsTileOccluded(const Tile* tile) const;
|
| + bool IsTileRequiredForActivation(const Tile* tile) const;
|
| +
|
| // Iterate over all tiles to fill content_rect. Even if tiles are invalid
|
| // (i.e. no valid resource) this tiling should still iterate over them.
|
| // The union of all geometry_rect calls for each element iterated over should
|
| @@ -235,23 +254,11 @@ class CC_EXPORT PictureLayerTiling {
|
|
|
| void Reset();
|
|
|
| - void UpdateTilePriorities(WhichTree tree,
|
| - const gfx::Rect& viewport_in_layer_space,
|
| - float ideal_contents_scale,
|
| - double current_frame_time_in_seconds,
|
| - const Occlusion& occlusion_in_layer_space);
|
| -
|
| - // Copies the src_tree priority into the dst_tree priority for all tiles.
|
| - // The src_tree priority is reset to the lowest priority possible. This
|
| - // also updates the pile on each tile to be the current client's pile.
|
| - void DidBecomeActive();
|
| -
|
| - // Resets the active priority for all tiles in a tiling, when an active
|
| - // tiling is becoming recycled. This may include some tiles which are
|
| - // not in the the pending tiling (due to invalidations). This must
|
| - // be called before DidBecomeActive, as it resets the active priority
|
| - // while DidBecomeActive promotes pending priority on a similar set of tiles.
|
| - void DidBecomeRecycled();
|
| + void ComputeTilePriorityRects(WhichTree tree,
|
| + const gfx::Rect& viewport_in_layer_space,
|
| + float ideal_contents_scale,
|
| + double current_frame_time_in_seconds,
|
| + const Occlusion& occlusion_in_layer_space);
|
|
|
| bool NeedsUpdateForFrameAtTime(double frame_time_in_seconds) {
|
| return frame_time_in_seconds != last_impl_frame_time_in_seconds_;
|
| @@ -315,6 +322,9 @@ class CC_EXPORT PictureLayerTiling {
|
| void DoInvalidate(const Region& layer_region,
|
| bool recreate_invalidated_tiles);
|
|
|
| + void UpdateTileAndTwinPriority(Tile* tile) const;
|
| + void UpdateTilePriority(Tile* tile) const;
|
| +
|
| // Given properties.
|
| float contents_scale_;
|
| gfx::Size layer_bounds_;
|
| @@ -329,6 +339,9 @@ class CC_EXPORT PictureLayerTiling {
|
| // State saved for computing velocities based upon finite differences.
|
| double last_impl_frame_time_in_seconds_;
|
| gfx::Rect last_visible_rect_in_content_space_;
|
| + float content_to_screen_scale_;
|
| +
|
| + bool can_require_tiles_for_activation_;
|
|
|
| // Iteration rects in content space
|
| gfx::Rect current_visible_rect_;
|
| @@ -341,6 +354,8 @@ class CC_EXPORT PictureLayerTiling {
|
| bool has_soon_border_rect_tiles_;
|
| bool has_eventually_rect_tiles_;
|
|
|
| + Occlusion current_occlusion_in_layer_space_;
|
| +
|
| // TODO(reveman): Remove this in favour of an array of eviction_tiles_ when we
|
| // change all enums to have a consistent way of getting the count/last
|
| // element.
|
|
|