| Index: cc/tiles/tile_manager.cc
|
| diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
|
| index 400fff20646bf77374fab31801f7181d207551f6..da09aa731b057e35647c8aa86bf0271fa225ad2b 100644
|
| --- a/cc/tiles/tile_manager.cc
|
| +++ b/cc/tiles/tile_manager.cc
|
| @@ -55,10 +55,7 @@ class RasterTaskImpl : public RasterTask {
|
| uint64_t previous_content_id,
|
| uint64_t resource_content_id,
|
| int source_frame_number,
|
| - bool analyze_picture,
|
| - const base::Callback<
|
| - void(const DisplayListRasterSource::SolidColorAnalysis&,
|
| - bool)>& reply,
|
| + const base::Callback<void(bool)>& reply,
|
| ImageDecodeTask::Vector* dependencies)
|
| : RasterTask(dependencies),
|
| resource_(resource),
|
| @@ -74,7 +71,6 @@ class RasterTaskImpl : public RasterTask {
|
| previous_content_id_(previous_content_id),
|
| resource_content_id_(resource_content_id),
|
| source_frame_number_(source_frame_number),
|
| - analyze_picture_(analyze_picture),
|
| reply_(reply) {}
|
|
|
| // Overridden from Task:
|
| @@ -85,12 +81,6 @@ class RasterTaskImpl : public RasterTask {
|
| DCHECK(raster_source_.get());
|
| DCHECK(raster_buffer_);
|
|
|
| - if (analyze_picture_) {
|
| - Analyze(raster_source_.get());
|
| - if (analysis_.is_solid_color)
|
| - return;
|
| - }
|
| -
|
| Raster(raster_source_.get());
|
| }
|
|
|
| @@ -102,25 +92,13 @@ class RasterTaskImpl : public RasterTask {
|
| }
|
| void CompleteOnOriginThread(TileTaskClient* client) override {
|
| client->ReleaseBufferForRaster(std::move(raster_buffer_));
|
| - reply_.Run(analysis_, !HasFinishedRunning());
|
| + reply_.Run(!HasFinishedRunning());
|
| }
|
|
|
| protected:
|
| ~RasterTaskImpl() override { DCHECK(!raster_buffer_); }
|
|
|
| private:
|
| - void Analyze(const DisplayListRasterSource* raster_source) {
|
| - frame_viewer_instrumentation::ScopedAnalyzeTask analyze_task(
|
| - tile_, tile_resolution_, source_frame_number_, layer_id_);
|
| -
|
| - DCHECK(raster_source);
|
| -
|
| - raster_source->PerformSolidColorAnalysis(content_rect_, contents_scale_,
|
| - &analysis_);
|
| - // Clear the flag if we're not using the estimator.
|
| - analysis_.is_solid_color &= kUseColorEstimator;
|
| - }
|
| -
|
| void Raster(const DisplayListRasterSource* raster_source) {
|
| frame_viewer_instrumentation::ScopedRasterTask raster_task(
|
| tile_, tile_resolution_, source_frame_number_, layer_id_);
|
| @@ -136,7 +114,6 @@ class RasterTaskImpl : public RasterTask {
|
| }
|
|
|
| const Resource* resource_;
|
| - DisplayListRasterSource::SolidColorAnalysis analysis_;
|
| scoped_refptr<DisplayListRasterSource> raster_source_;
|
| gfx::Rect content_rect_;
|
| gfx::Rect invalid_content_rect_;
|
| @@ -149,9 +126,7 @@ class RasterTaskImpl : public RasterTask {
|
| uint64_t previous_content_id_;
|
| uint64_t resource_content_id_;
|
| int source_frame_number_;
|
| - bool analyze_picture_;
|
| - const base::Callback<void(const DisplayListRasterSource::SolidColorAnalysis&,
|
| - bool)> reply_;
|
| + const base::Callback<void(bool)> reply_;
|
| scoped_ptr<RasterBuffer> raster_buffer_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl);
|
| @@ -593,6 +568,23 @@ void TileManager::AssignGpuMemoryToTiles(
|
| break;
|
| }
|
|
|
| + if (tile->use_picture_analysis() && kUseColorEstimator) {
|
| + // We analyze for solid color here, to decide to continue
|
| + // or drop the tile for scheduling and raster.
|
| + // TODO(sohanjg): Check if we could use a shared analysis
|
| + // canvas which is reset between tiles.
|
| + SkColor color = SK_ColorTRANSPARENT;
|
| + bool is_solid_color =
|
| + prioritized_tile.raster_source()->PerformSolidColorAnalysis(
|
| + tile->content_rect(), tile->contents_scale(), &color);
|
| + if (is_solid_color) {
|
| + tile->draw_info().set_solid_color(color);
|
| + tile->draw_info().set_was_ever_ready_to_draw();
|
| + client_->NotifyTileStateChanged(tile);
|
| + continue;
|
| + }
|
| + }
|
| +
|
| // We won't be able to schedule this tile, so break out early.
|
| if (tiles_that_need_to_be_rasterized->size() >=
|
| scheduled_raster_task_limit) {
|
| @@ -826,7 +818,6 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask(
|
| prioritized_tile.priority().resolution, tile->layer_id(),
|
| prepare_tiles_count_, static_cast<const void*>(tile), tile->id(),
|
| tile->invalidated_id(), resource_content_id, tile->source_frame_number(),
|
| - tile->use_picture_analysis(),
|
| base::Bind(&TileManager::OnRasterTaskCompleted, base::Unretained(this),
|
| tile->id(), resource),
|
| &decode_tasks));
|
| @@ -835,11 +826,11 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask(
|
| void TileManager::OnRasterTaskCompleted(
|
| Tile::Id tile_id,
|
| Resource* resource,
|
| - const DisplayListRasterSource::SolidColorAnalysis& analysis,
|
| bool was_canceled) {
|
| DCHECK(tiles_.find(tile_id) != tiles_.end());
|
|
|
| Tile* tile = tiles_[tile_id];
|
| + TileDrawInfo& draw_info = tile->draw_info();
|
| DCHECK(tile->raster_task_.get());
|
| orphan_tasks_.push_back(tile->raster_task_);
|
| tile->raster_task_ = nullptr;
|
| @@ -854,32 +845,12 @@ void TileManager::OnRasterTaskCompleted(
|
| return;
|
| }
|
|
|
| - UpdateTileDrawInfo(tile, resource, analysis);
|
| -}
|
| -
|
| -void TileManager::UpdateTileDrawInfo(
|
| - Tile* tile,
|
| - Resource* resource,
|
| - const DisplayListRasterSource::SolidColorAnalysis& analysis) {
|
| - TileDrawInfo& draw_info = tile->draw_info();
|
| -
|
| ++flush_stats_.completed_count;
|
|
|
| - if (analysis.is_solid_color) {
|
| - draw_info.set_solid_color(analysis.solid_color);
|
| - if (resource) {
|
| - // TODO(ericrk): If more partial raster work is done in the future, it may
|
| - // be worth returning the resource to the pool with its previous ID (not
|
| - // currently tracked). crrev.com/1370333002/#ps40001 has a possible method
|
| - // of achieving this.
|
| - resource_pool_->ReleaseResource(resource, 0 /* content_id */);
|
| - }
|
| - } else {
|
| - DCHECK(resource);
|
| - draw_info.set_use_resource();
|
| - draw_info.resource_ = resource;
|
| - draw_info.contents_swizzled_ = DetermineResourceRequiresSwizzle(tile);
|
| - }
|
| + draw_info.set_use_resource();
|
| + draw_info.resource_ = resource;
|
| + draw_info.contents_swizzled_ = DetermineResourceRequiresSwizzle(tile);
|
| +
|
| DCHECK(draw_info.IsReadyToDraw());
|
| draw_info.set_was_ever_ready_to_draw();
|
|
|
|
|