Chromium Code Reviews| Index: cc/tiles/tile_manager.cc |
| diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc |
| index a59d208cb9d53b548929059b93243f9539474745..e56230df3f6c18ad4193624ca021f3e01b79bd8f 100644 |
| --- a/cc/tiles/tile_manager.cc |
| +++ b/cc/tiles/tile_manager.cc |
| @@ -41,10 +41,13 @@ class RasterTaskImpl : public RasterTask { |
| const Resource* resource, |
| RasterSource* raster_source, |
| const gfx::Rect& content_rect, |
| + const gfx::Rect& invalid_content_rect, |
| float contents_scale, |
| TileResolution tile_resolution, |
| int layer_id, |
| - const void* tile_id, |
| + const void* tile, |
| + uint64_t new_content_id, |
| + uint64_t previous_content_id, |
| int source_frame_number, |
| bool analyze_picture, |
| const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)>& |
| @@ -53,10 +56,13 @@ class RasterTaskImpl : public RasterTask { |
| : RasterTask(resource, dependencies), |
| raster_source_(raster_source), |
| content_rect_(content_rect), |
| + invalid_content_rect_(invalid_content_rect), |
| contents_scale_(contents_scale), |
| tile_resolution_(tile_resolution), |
| layer_id_(layer_id), |
| - tile_id_(tile_id), |
| + tile_(tile), |
| + new_content_id_(new_content_id), |
| + previous_content_id_(previous_content_id), |
| source_frame_number_(source_frame_number), |
| analyze_picture_(analyze_picture), |
| reply_(reply) {} |
| @@ -80,7 +86,8 @@ class RasterTaskImpl : public RasterTask { |
| // Overridden from TileTask: |
| void ScheduleOnOriginThread(TileTaskClient* client) override { |
| DCHECK(!raster_buffer_); |
| - raster_buffer_ = client->AcquireBufferForRaster(resource()); |
| + raster_buffer_ = client->AcquireBufferForRaster(resource(), new_content_id_, |
| + previous_content_id_); |
| } |
| void CompleteOnOriginThread(TileTaskClient* client) override { |
| client->ReleaseBufferForRaster(raster_buffer_.Pass()); |
| @@ -96,7 +103,7 @@ class RasterTaskImpl : public RasterTask { |
| private: |
| void Analyze(const RasterSource* raster_source) { |
| frame_viewer_instrumentation::ScopedAnalyzeTask analyze_task( |
| - tile_id_, tile_resolution_, source_frame_number_, layer_id_); |
| + tile_, tile_resolution_, source_frame_number_, layer_id_); |
| DCHECK(raster_source); |
| @@ -108,23 +115,26 @@ class RasterTaskImpl : public RasterTask { |
| void Raster(const RasterSource* raster_source) { |
| frame_viewer_instrumentation::ScopedRasterTask raster_task( |
| - tile_id_, tile_resolution_, source_frame_number_, layer_id_); |
| + tile_, tile_resolution_, source_frame_number_, layer_id_); |
| ScopedRasterTaskTimer timer; |
| timer.SetArea(content_rect_.size().GetArea()); |
| DCHECK(raster_source); |
| raster_buffer_->Playback(raster_source_.get(), content_rect_, |
| - contents_scale_); |
| + invalid_content_rect_, contents_scale_); |
| } |
| RasterSource::SolidColorAnalysis analysis_; |
| scoped_refptr<RasterSource> raster_source_; |
| gfx::Rect content_rect_; |
| + gfx::Rect invalid_content_rect_; |
| float contents_scale_; |
| TileResolution tile_resolution_; |
| int layer_id_; |
| - const void* tile_id_; |
| + const void* tile_; |
| + uint64_t new_content_id_; |
| + uint64_t previous_content_id_; |
| int source_frame_number_; |
| bool analyze_picture_; |
| const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)> |
| @@ -585,7 +595,7 @@ void TileManager::AssignGpuMemoryToTiles( |
| void TileManager::FreeResourcesForTile(Tile* tile) { |
| TileDrawInfo& draw_info = tile->draw_info(); |
| if (draw_info.resource_) |
| - resource_pool_->ReleaseResource(draw_info.resource_.Pass()); |
| + resource_pool_->ReleaseResource(draw_info.resource_.Pass(), tile->id()); |
|
reveman
2015/05/29 14:50:27
just to make sure I understand the code. we could
danakj
2015/05/29 17:16:07
yes. this is a different pool.
|
| } |
| void TileManager::FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw( |
| @@ -689,8 +699,9 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask( |
| return make_scoped_refptr(new RasterTaskImpl( |
| const_resource, prioritized_tile.raster_source(), tile->content_rect(), |
| - tile->contents_scale(), prioritized_tile.priority().resolution, |
| - tile->layer_id(), static_cast<const void*>(tile), |
| + tile->invalidated_content_rect(), tile->contents_scale(), |
| + prioritized_tile.priority().resolution, tile->layer_id(), |
| + static_cast<const void*>(tile), tile->id(), tile->invalidated_id(), |
| tile->source_frame_number(), tile->use_picture_analysis(), |
| base::Bind(&TileManager::OnRasterTaskCompleted, base::Unretained(this), |
| tile->id(), base::Passed(&resource)), |
| @@ -731,7 +742,7 @@ void TileManager::OnRasterTaskCompleted( |
| if (was_canceled) { |
| ++update_visible_tiles_stats_.canceled_count; |
| - resource_pool_->ReleaseResource(resource.Pass()); |
| + resource_pool_->ReleaseResource(resource.Pass(), Tile::Id(0)); |
| return; |
| } |
| @@ -748,8 +759,11 @@ void TileManager::UpdateTileDrawInfo( |
| if (analysis.is_solid_color) { |
| draw_info.set_solid_color(analysis.solid_color); |
| - if (resource) |
| - resource_pool_->ReleaseResource(resource.Pass()); |
| + if (resource) { |
| + // Pass no tile id here because the tile is solid color so we did not |
| + // raster anything into the tile resource. |
| + resource_pool_->ReleaseResource(resource.Pass(), Tile::Id(0)); |
| + } |
| } else { |
| DCHECK(resource); |
| draw_info.set_use_resource(); |