Index: cc/resources/tile_manager.cc |
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
index b752303a193e2327433db7e05f58ad5fb07c56b6..87f5d84f034ac05de4be0fa3342d08d62e84d837 100644 |
--- a/cc/resources/tile_manager.cc |
+++ b/cc/resources/tile_manager.cc |
@@ -35,10 +35,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 tile_id, |
+ uint64_t previous_frame_tile_id, |
int source_frame_number, |
bool analyze_picture, |
const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)>& |
@@ -47,10 +50,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_(tile), |
tile_id_(tile_id), |
+ previous_frame_tile_id_(previous_frame_tile_id), |
source_frame_number_(source_frame_number), |
analyze_picture_(analyze_picture), |
reply_(reply) {} |
@@ -74,7 +80,9 @@ class RasterTaskImpl : public RasterTask { |
// Overridden from TileTask: |
void ScheduleOnOriginThread(TileTaskClient* client) override { |
DCHECK(!raster_buffer_); |
- raster_buffer_ = client->AcquireBufferForRaster(resource()); |
+ TileTaskData data(resource(), tile_id_, previous_frame_tile_id_, |
+ invalid_content_rect_); |
+ raster_buffer_ = client->AcquireBufferForRaster(data); |
} |
void CompleteOnOriginThread(TileTaskClient* client) override { |
client->ReleaseBufferForRaster(raster_buffer_.Pass()); |
@@ -90,7 +98,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); |
@@ -102,7 +110,7 @@ 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_); |
DCHECK(raster_source); |
@@ -113,10 +121,13 @@ class RasterTaskImpl : public RasterTask { |
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 tile_id_; |
+ uint64_t previous_frame_tile_id_; |
int source_frame_number_; |
bool analyze_picture_; |
const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)> |
@@ -577,7 +588,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()); |
} |
void TileManager::FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw( |
@@ -681,9 +692,10 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask( |
return make_scoped_refptr(new RasterTaskImpl( |
const_resource, tile->raster_source(), tile->content_rect(), |
- tile->contents_scale(), prioritized_tile.priority().resolution, |
- tile->layer_id(), static_cast<const void*>(tile), |
- tile->source_frame_number(), tile->use_picture_analysis(), |
+ tile->invalidated_content_rect(), tile->contents_scale(), |
+ prioritized_tile.priority().resolution, tile->layer_id(), 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)), |
&decode_tasks)); |
@@ -723,7 +735,7 @@ void TileManager::OnRasterTaskCompleted( |
if (was_canceled) { |
++update_visible_tiles_stats_.canceled_count; |
- resource_pool_->ReleaseResource(resource.Pass()); |
+ resource_pool_->ReleaseResource(resource.Pass(), 0); |
return; |
} |
@@ -741,7 +753,7 @@ void TileManager::UpdateTileDrawInfo( |
if (analysis.is_solid_color) { |
draw_info.set_solid_color(analysis.solid_color); |
if (resource) |
- resource_pool_->ReleaseResource(resource.Pass()); |
+ resource_pool_->ReleaseResource(resource.Pass(), tile->id()); |
vmpstr
2015/05/14 23:11:46
This should be 0, because it's solid color: we mig
danakj
2015/05/14 23:22:42
Thanks, added comment too.
|
} else { |
DCHECK(resource); |
draw_info.set_use_resource(); |