Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(827)

Side by Side Diff: cc/tiles/tile_manager.cc

Issue 1531013004: cc: Do solid color analysis before scheduling tiles. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/tiles/tile_manager.h" 5 #include "cc/tiles/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 reply_(reply) {} 74 reply_(reply) {}
75 75
76 // Overridden from Task: 76 // Overridden from Task:
77 void RunOnWorkerThread() override { 77 void RunOnWorkerThread() override {
78 TRACE_EVENT1("cc", "RasterizerTaskImpl::RunOnWorkerThread", 78 TRACE_EVENT1("cc", "RasterizerTaskImpl::RunOnWorkerThread",
79 "source_prepare_tiles_id", source_prepare_tiles_id_); 79 "source_prepare_tiles_id", source_prepare_tiles_id_);
80 80
81 DCHECK(raster_source_.get()); 81 DCHECK(raster_source_.get());
82 DCHECK(raster_buffer_); 82 DCHECK(raster_buffer_);
83 83
84 if (analyze_picture_) {
85 Analyze(raster_source_.get());
86 if (analysis_.is_solid_color)
87 return;
88 }
89
90 Raster(raster_source_.get()); 84 Raster(raster_source_.get());
91 } 85 }
92 86
93 // Overridden from TileTask: 87 // Overridden from TileTask:
94 void ScheduleOnOriginThread(TileTaskClient* client) override { 88 void ScheduleOnOriginThread(TileTaskClient* client) override {
95 DCHECK(!raster_buffer_); 89 DCHECK(!raster_buffer_);
96 raster_buffer_ = client->AcquireBufferForRaster( 90 raster_buffer_ = client->AcquireBufferForRaster(
97 resource_, resource_content_id_, previous_content_id_); 91 resource_, resource_content_id_, previous_content_id_);
98 } 92 }
99 void CompleteOnOriginThread(TileTaskClient* client) override { 93 void CompleteOnOriginThread(TileTaskClient* client) override {
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 CreateTaskSetFinishedTask(&TileManager::DidFinishRunningAllTileTasks); 709 CreateTaskSetFinishedTask(&TileManager::DidFinishRunningAllTileTasks);
716 710
717 // Build a new task queue containing all task currently needed. Tasks 711 // Build a new task queue containing all task currently needed. Tasks
718 // are added in order of priority, highest priority task first. 712 // are added in order of priority, highest priority task first.
719 for (auto& prioritized_tile : tiles_that_need_to_be_rasterized) { 713 for (auto& prioritized_tile : tiles_that_need_to_be_rasterized) {
720 Tile* tile = prioritized_tile.tile(); 714 Tile* tile = prioritized_tile.tile();
721 715
722 DCHECK(tile->draw_info().requires_resource()); 716 DCHECK(tile->draw_info().requires_resource());
723 DCHECK(!tile->draw_info().resource_); 717 DCHECK(!tile->draw_info().resource_);
724 718
719 SkColor color = SK_ColorTRANSPARENT;
720 bool is_solid_color = prioritized_tile.raster_source()->IsSolidColorTile(
vmpstr 2015/12/17 18:55:47 This is an OK spot to do this. When I was thinking
sohanjg 2015/12/18 12:50:00 Done.
721 tile->content_rect(), tile->contents_scale(), &color);
722 if (is_solid_color) {
723 tile->draw_info().set_solid_color(color);
724 continue;
725 }
726
725 if (!tile->raster_task_) { 727 if (!tile->raster_task_) {
726 tile->raster_task_ = CreateRasterTask(prioritized_tile); 728 tile->raster_task_ = CreateRasterTask(prioritized_tile);
727 } 729 }
728 730
729 RasterTask* task = tile->raster_task_.get(); 731 RasterTask* task = tile->raster_task_.get();
730 DCHECK(!task->HasCompleted()); 732 DCHECK(!task->HasCompleted());
731 733
732 if (!tile->raster_task_.get()) 734 if (!tile->raster_task_.get())
733 tile->raster_task_ = CreateRasterTask(prioritized_tile); 735 tile->raster_task_ = CreateRasterTask(prioritized_tile);
734 736
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 } 853 }
852 854
853 void TileManager::UpdateTileDrawInfo( 855 void TileManager::UpdateTileDrawInfo(
854 Tile* tile, 856 Tile* tile,
855 Resource* resource, 857 Resource* resource,
856 const DisplayListRasterSource::SolidColorAnalysis& analysis) { 858 const DisplayListRasterSource::SolidColorAnalysis& analysis) {
857 TileDrawInfo& draw_info = tile->draw_info(); 859 TileDrawInfo& draw_info = tile->draw_info();
858 860
859 ++flush_stats_.completed_count; 861 ++flush_stats_.completed_count;
860 862
861 if (analysis.is_solid_color) { 863 if (draw_info.mode() == TileDrawInfo::SOLID_COLOR_MODE) {
vmpstr 2015/12/17 18:55:47 This shouldn't be possible anymore, right? UpdateT
sohanjg 2015/12/18 12:50:00 Acknowledged.
862 draw_info.set_solid_color(analysis.solid_color);
863 if (resource) { 864 if (resource) {
864 // TODO(ericrk): If more partial raster work is done in the future, it may 865 // TODO(ericrk): If more partial raster work is done in the future, it may
865 // be worth returning the resource to the pool with its previous ID (not 866 // be worth returning the resource to the pool with its previous ID (not
866 // currently tracked). crrev.com/1370333002/#ps40001 has a possible method 867 // currently tracked). crrev.com/1370333002/#ps40001 has a possible method
867 // of achieving this. 868 // of achieving this.
868 resource_pool_->ReleaseResource(resource, 0 /* content_id */); 869 resource_pool_->ReleaseResource(resource, 0 /* content_id */);
869 } 870 }
870 } else { 871 } else {
871 DCHECK(resource); 872 DCHECK(resource);
872 draw_info.set_use_resource(); 873 draw_info.set_use_resource();
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 void TileManager::Signals::reset() { 1165 void TileManager::Signals::reset() {
1165 ready_to_activate = false; 1166 ready_to_activate = false;
1166 did_notify_ready_to_activate = false; 1167 did_notify_ready_to_activate = false;
1167 ready_to_draw = false; 1168 ready_to_draw = false;
1168 did_notify_ready_to_draw = false; 1169 did_notify_ready_to_draw = false;
1169 all_tile_tasks_completed = false; 1170 all_tile_tasks_completed = false;
1170 did_notify_all_tile_tasks_completed = false; 1171 did_notify_all_tile_tasks_completed = false;
1171 } 1172 }
1172 1173
1173 } // namespace cc 1174 } // namespace cc
OLDNEW
« cc/playback/display_list_raster_source.cc ('K') | « cc/playback/display_list_raster_source.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698