| Index: cc/trees/layer_tree_host_impl.cc
|
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
|
| index a2f4f32c8b4138d6f1b5dab0fd6a95d9e71d09b9..e5638e71e81e367a1caa968b4f0482d35c1e0ed5 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -173,8 +173,8 @@ size_t GetMaxStagingResourceCount() {
|
|
|
| } // namespace
|
|
|
| -LayerTreeHostImpl::FrameData::FrameData()
|
| - : contains_incomplete_tile(false), has_no_damage(false) {}
|
| +LayerTreeHostImpl::FrameData::FrameData() : has_no_damage(false) {
|
| +}
|
|
|
| LayerTreeHostImpl::FrameData::~FrameData() {}
|
|
|
| @@ -238,11 +238,11 @@ LayerTreeHostImpl::LayerTreeHostImpl(
|
| animation_registrar_(AnimationRegistrar::Create()),
|
| rendering_stats_instrumentation_(rendering_stats_instrumentation),
|
| micro_benchmark_controller_(this),
|
| - need_to_update_visible_tiles_before_draw_(false),
|
| shared_bitmap_manager_(shared_bitmap_manager),
|
| gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
|
| id_(id),
|
| - requires_high_res_to_draw_(false) {
|
| + requires_high_res_to_draw_(false),
|
| + required_for_draw_tile_is_top_of_raster_queue_(false) {
|
| DCHECK(proxy_->IsImplThread());
|
| DidVisibilityChange(this, visible_);
|
| animation_registrar_->set_supports_scroll_animations(
|
| @@ -480,7 +480,6 @@ void LayerTreeHostImpl::TrackDamageForAllSurfaces(
|
|
|
| void LayerTreeHostImpl::FrameData::AsValueInto(
|
| base::debug::TracedValue* value) const {
|
| - value->SetBoolean("contains_incomplete_tile", contains_incomplete_tile);
|
| value->SetBoolean("has_no_damage", has_no_damage);
|
|
|
| // Quad data can be quite large, so only dump render passes if we select
|
| @@ -830,7 +829,6 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses(
|
|
|
| if (append_quads_data.num_incomplete_tiles ||
|
| append_quads_data.num_missing_tiles) {
|
| - frame->contains_incomplete_tile = true;
|
| if (RequiresHighResToDraw())
|
| draw_result = DRAW_ABORTED_MISSING_HIGH_RES_CONTENT;
|
| }
|
| @@ -1025,12 +1023,11 @@ DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) {
|
| "LayerTreeHostImpl::PrepareToDraw",
|
| "SourceFrameNumber",
|
| active_tree_->source_frame_number());
|
| -
|
| - if (need_to_update_visible_tiles_before_draw_ &&
|
| - tile_manager_ && tile_manager_->UpdateVisibleTiles()) {
|
| - DidInitializeVisibleTile();
|
| - }
|
| - need_to_update_visible_tiles_before_draw_ = true;
|
| + // This will cause NotifyTileStateChanged() to be called for any visible tiles
|
| + // that completed, which will add damage to the frame for them so they appear
|
| + // as part of the current frame being drawn.
|
| + if (settings().impl_side_painting)
|
| + tile_manager_->UpdateVisibleTiles();
|
|
|
| UMA_HISTOGRAM_CUSTOM_COUNTS(
|
| "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20);
|
| @@ -1042,7 +1039,6 @@ DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) {
|
| frame->render_passes.clear();
|
| frame->render_passes_by_id.clear();
|
| frame->will_draw_layers.clear();
|
| - frame->contains_incomplete_tile = false;
|
| frame->has_no_damage = false;
|
|
|
| if (active_tree_->root_layer()) {
|
| @@ -1073,13 +1069,6 @@ void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) {
|
| NOTREACHED();
|
| }
|
|
|
| -void LayerTreeHostImpl::DidInitializeVisibleTileForTesting() {
|
| - // Add arbitrary damage, to trigger prepare-to-draws.
|
| - // Here, setting damage as viewport size, used only for testing.
|
| - SetFullRootLayerDamage();
|
| - DidInitializeVisibleTile();
|
| -}
|
| -
|
| void LayerTreeHostImpl::ResetTreesForTesting() {
|
| if (active_tree_)
|
| active_tree_->DetachLayerTree();
|
| @@ -1171,11 +1160,6 @@ void LayerTreeHostImpl::DidModifyTilePriorities() {
|
| client_->SetNeedsManageTilesOnImplThread();
|
| }
|
|
|
| -void LayerTreeHostImpl::DidInitializeVisibleTile() {
|
| - if (client_ && !client_->IsInsideDraw())
|
| - client_->DidInitializeVisibleTileOnImplThread();
|
| -}
|
| -
|
| void LayerTreeHostImpl::GetPictureLayerImplPairs(
|
| std::vector<PictureLayerImpl::Pair>* layer_pairs) const {
|
| DCHECK(layer_pairs->empty());
|
| @@ -1214,6 +1198,13 @@ void LayerTreeHostImpl::BuildRasterQueue(RasterTilePriorityQueue* queue,
|
| picture_layer_pairs_.clear();
|
| GetPictureLayerImplPairs(&picture_layer_pairs_);
|
| queue->Build(picture_layer_pairs_, tree_priority);
|
| +
|
| + if (!queue->IsEmpty()) {
|
| + required_for_draw_tile_is_top_of_raster_queue_ =
|
| + queue->Top()->required_for_draw();
|
| + } else {
|
| + required_for_draw_tile_is_top_of_raster_queue_ = false;
|
| + }
|
| }
|
|
|
| void LayerTreeHostImpl::BuildEvictionQueue(EvictionTilePriorityQueue* queue,
|
| @@ -1234,6 +1225,11 @@ void LayerTreeHostImpl::NotifyReadyToActivate() {
|
| }
|
|
|
| void LayerTreeHostImpl::NotifyReadyToDraw() {
|
| + // Tiles that are ready will cause NotifyTileStateChanged() to be called so we
|
| + // don't need to schedule a draw here. Just stop WillBeginImplFrame() from
|
| + // causing optimistic requests to draw a frame.
|
| + required_for_draw_tile_is_top_of_raster_queue_ = false;
|
| +
|
| client_->NotifyReadyToDraw();
|
| }
|
|
|
| @@ -1253,6 +1249,13 @@ void LayerTreeHostImpl::NotifyTileStateChanged(const Tile* tile) {
|
| if (layer_impl)
|
| layer_impl->NotifyTileStateChanged(tile);
|
| }
|
| +
|
| + // Check for a non-null active tree to avoid doing this during shutdown.
|
| + if (active_tree_ && !client_->IsInsideDraw() && tile->required_for_draw()) {
|
| + // The LayerImpl::NotifyTileStateChanged() should damage the layer, so this
|
| + // redraw will make those tiles be displayed.
|
| + SetNeedsRedraw();
|
| + }
|
| }
|
|
|
| void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
|
| @@ -1591,6 +1594,13 @@ void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) {
|
| UpdateCurrentBeginFrameArgs(args);
|
| // Cache the begin impl frame interval
|
| begin_impl_frame_interval_ = args.interval;
|
| +
|
| + if (required_for_draw_tile_is_top_of_raster_queue_) {
|
| + // Optimistically schedule a draw, as a tile required for draw is at the top
|
| + // of the current raster queue. This will let us expect the tile to complete
|
| + // and draw it within the impl frame we are beginning now.
|
| + SetNeedsRedraw();
|
| + }
|
| }
|
|
|
| void LayerTreeHostImpl::UpdateViewportContainerSizes() {
|
| @@ -1718,15 +1728,7 @@ void LayerTreeHostImpl::CreatePendingTree() {
|
| TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
|
| }
|
|
|
| -void LayerTreeHostImpl::UpdateVisibleTiles() {
|
| - if (tile_manager_ && tile_manager_->UpdateVisibleTiles())
|
| - DidInitializeVisibleTile();
|
| - need_to_update_visible_tiles_before_draw_ = false;
|
| -}
|
| -
|
| void LayerTreeHostImpl::ActivateSyncTree() {
|
| - need_to_update_visible_tiles_before_draw_ = true;
|
| -
|
| if (pending_tree_) {
|
| TRACE_EVENT_ASYNC_END0("cc", "PendingTree:waiting", pending_tree_.get());
|
|
|
| @@ -1929,7 +1931,6 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| scheduled_raster_task_limit);
|
|
|
| UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
|
| - need_to_update_visible_tiles_before_draw_ = false;
|
| }
|
|
|
| void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
|
| @@ -2929,9 +2930,6 @@ void LayerTreeHostImpl::PinchGestureEnd() {
|
| // scales that we want when we're not inside a pinch.
|
| active_tree_->set_needs_update_draw_properties();
|
| SetNeedsRedraw();
|
| - // TODO(danakj): Don't set root damage. Just updating draw properties and
|
| - // getting new tiles rastered should be enough! crbug.com/427423
|
| - SetFullRootLayerDamage();
|
| }
|
|
|
| static void CollectScrollDeltas(ScrollAndScaleSet* scroll_info,
|
|
|