Index: cc/resources/tile_manager.cc |
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
index f3179ba164e5e5f03aea39e0dbaad33aa8fad453..19006115a9f11a93c0ed91b14619bc346dd68d4b 100644 |
--- a/cc/resources/tile_manager.cc |
+++ b/cc/resources/tile_manager.cc |
@@ -39,7 +39,6 @@ class RasterTaskImpl : public RasterTask { |
PicturePileImpl* picture_pile, |
const gfx::Rect& content_rect, |
float contents_scale, |
- RasterMode raster_mode, |
TileResolution tile_resolution, |
int layer_id, |
const void* tile_id, |
@@ -52,7 +51,6 @@ class RasterTaskImpl : public RasterTask { |
picture_pile_(picture_pile), |
content_rect_(content_rect), |
contents_scale_(contents_scale), |
- raster_mode_(raster_mode), |
tile_resolution_(tile_resolution), |
layer_id_(layer_id), |
tile_id_(tile_id), |
@@ -113,30 +111,13 @@ class RasterTaskImpl : public RasterTask { |
void Raster(const PicturePileImpl* picture_pile) { |
frame_viewer_instrumentation::ScopedRasterTask raster_task( |
- tile_id_, |
- tile_resolution_, |
- source_frame_number_, |
- layer_id_, |
- raster_mode_); |
+ tile_id_, tile_resolution_, source_frame_number_, layer_id_); |
devtools_instrumentation::ScopedLayerTask layer_task( |
devtools_instrumentation::kRasterTask, layer_id_); |
skia::RefPtr<SkCanvas> canvas = raster_buffer_->AcquireSkCanvas(); |
DCHECK(canvas); |
- skia::RefPtr<SkDrawFilter> draw_filter; |
- switch (raster_mode_) { |
- case LOW_QUALITY_RASTER_MODE: |
- draw_filter = skia::AdoptRef(new skia::PaintSimplifier); |
danakj
2014/09/26 22:38:21
shall we inform skia folks that this is not used n
vmpstr
2014/09/26 22:51:39
PaintSimplifier is a skia/ext thing... so I'm not
danakj
2014/09/26 23:01:44
should we remove it then after this?
|
- break; |
- case HIGH_QUALITY_RASTER_MODE: |
- break; |
- case NUM_RASTER_MODES: |
- default: |
- NOTREACHED(); |
- } |
- canvas->setDrawFilter(draw_filter.get()); |
- |
base::TimeDelta prev_rasterize_time = |
rendering_stats_->impl_thread_rendering_stats().rasterize_time; |
@@ -168,7 +149,6 @@ class RasterTaskImpl : public RasterTask { |
scoped_refptr<PicturePileImpl> picture_pile_; |
gfx::Rect content_rect_; |
float contents_scale_; |
- RasterMode raster_mode_; |
TileResolution tile_resolution_; |
int layer_id_; |
const void* tile_id_; |
@@ -524,15 +504,14 @@ void TileManager::DidFinishRunningTasks(TaskSet task_set) { |
for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { |
Tile* tile = it->second; |
ManagedTileState& mts = tile->managed_state(); |
- ManagedTileState::TileVersion& tile_version = |
- mts.tile_versions[mts.raster_mode]; |
+ ManagedTileState::TileDrawInfo& draw_info = mts.draw_info_; |
- if (tile->required_for_activation() && !tile_version.IsReadyToDraw()) { |
+ if (tile->required_for_activation() && !draw_info.IsReadyToDraw()) { |
// If we can't raster on demand, give up early (and don't activate). |
if (!allow_rasterize_on_demand) |
return; |
- tile_version.set_rasterize_on_demand(); |
+ draw_info.set_rasterize_on_demand(); |
client_->NotifyTileStateChanged(tile); |
} |
} |
@@ -572,11 +551,10 @@ void TileManager::GetTilesWithAssignedBins(PrioritizedTileSet* tiles) { |
Tile* tile = it->second; |
ManagedTileState& mts = tile->managed_state(); |
- const ManagedTileState::TileVersion& tile_version = |
- tile->GetTileVersionForDrawing(); |
- bool tile_is_ready_to_draw = tile_version.IsReadyToDraw(); |
- bool tile_is_active = tile_is_ready_to_draw || |
- mts.tile_versions[mts.raster_mode].raster_task_.get(); |
+ const ManagedTileState::TileDrawInfo& draw_info = tile->GetTileDrawInfo(); |
+ bool tile_is_ready_to_draw = draw_info.IsReadyToDraw(); |
+ bool tile_is_active = |
+ tile_is_ready_to_draw || mts.draw_info_.raster_task_.get(); |
// Get the active priority and bin. |
TilePriority active_priority = tile->priority(ACTIVE_TREE); |
@@ -661,8 +639,7 @@ void TileManager::GetTilesWithAssignedBins(PrioritizedTileSet* tiles) { |
// can release the resources early. If it does have the task however, we |
// should keep it in the prioritized tile set to ensure that AssignGpuMemory |
// can visit it. |
- if (mts.bin == NEVER_BIN && |
- !mts.tile_versions[mts.raster_mode].raster_task_.get()) { |
+ if (mts.bin == NEVER_BIN && !mts.draw_info_.raster_task_.get()) { |
FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile); |
continue; |
} |
@@ -796,13 +773,10 @@ void TileManager::AssignGpuMemoryToTiles( |
mts.scheduled_priority = schedule_priority++; |
- mts.raster_mode = tile->DetermineOverallRasterMode(); |
- |
- ManagedTileState::TileVersion& tile_version = |
- mts.tile_versions[mts.raster_mode]; |
+ ManagedTileState::TileDrawInfo& draw_info = mts.draw_info_; |
// If this tile doesn't need a resource, then nothing to do. |
- if (!tile_version.requires_resource()) |
+ if (!draw_info.requires_resource()) |
continue; |
// If the tile is not needed, free it up. |
@@ -826,11 +800,9 @@ void TileManager::AssignGpuMemoryToTiles( |
size_t tile_resources = 0; |
// It costs to maintain a resource. |
- for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) { |
- if (mts.tile_versions[mode].resource_) { |
- tile_bytes += bytes_if_allocated; |
- tile_resources++; |
- } |
+ if (mts.draw_info_.resource_) { |
+ tile_bytes += bytes_if_allocated; |
+ tile_resources++; |
} |
// Allow lower priority tiles with initialized resources to keep |
@@ -841,7 +813,7 @@ void TileManager::AssignGpuMemoryToTiles( |
if (!reached_scheduled_raster_tasks_limit) { |
// If we don't have the required version, and it's not in flight |
// then we'll have to pay to create a new task. |
- if (!tile_version.resource_ && !tile_version.raster_task_.get()) { |
+ if (!draw_info.resource_ && !draw_info.raster_task_.get()) { |
tile_bytes += bytes_if_allocated; |
tile_resources++; |
} |
@@ -855,7 +827,7 @@ void TileManager::AssignGpuMemoryToTiles( |
// released. In order to prevent checkerboarding, set this tile as |
// rasterize on demand immediately. |
if (mts.visible_and_ready_to_draw) |
- tile_version.set_rasterize_on_demand(); |
+ draw_info.set_rasterize_on_demand(); |
oomed_soft = true; |
if (tile_uses_hard_limit) { |
@@ -867,11 +839,11 @@ void TileManager::AssignGpuMemoryToTiles( |
hard_bytes_left -= tile_bytes; |
soft_bytes_left = |
(soft_bytes_left > tile_bytes) ? soft_bytes_left - tile_bytes : 0; |
- if (tile_version.resource_) |
+ if (draw_info.resource_) |
continue; |
} |
- DCHECK(!tile_version.resource_); |
+ DCHECK(!draw_info.resource_); |
// Tile shouldn't be rasterized if |tiles_that_need_to_be_rasterized| |
// has reached it's limit or we've failed to assign gpu memory to this |
@@ -917,10 +889,10 @@ void TileManager::AssignGpuMemoryToTiles( |
memory_stats_from_last_assign_.bytes_over = bytes_that_exceeded_memory_budget; |
} |
-void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) { |
+void TileManager::FreeResourcesForTile(Tile* tile) { |
ManagedTileState& mts = tile->managed_state(); |
- if (mts.tile_versions[mode].resource_) { |
- resource_pool_->ReleaseResource(mts.tile_versions[mode].resource_.Pass()); |
+ if (mts.draw_info_.resource_) { |
+ resource_pool_->ReleaseResource(mts.draw_info_.resource_.Pass()); |
DCHECK_GE(bytes_releasable_, BytesConsumedIfAllocated(tile)); |
DCHECK_GE(resources_releasable_, 1u); |
@@ -930,29 +902,6 @@ void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) { |
} |
} |
-void TileManager::FreeResourcesForTile(Tile* tile) { |
- for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) { |
- FreeResourceForTile(tile, static_cast<RasterMode>(mode)); |
- } |
-} |
- |
-void TileManager::FreeUnusedResourcesForTile(Tile* tile) { |
- DCHECK(tile->IsReadyToDraw()); |
- ManagedTileState& mts = tile->managed_state(); |
- RasterMode used_mode = LOW_QUALITY_RASTER_MODE; |
- for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) { |
- if (mts.tile_versions[mode].IsReadyToDraw()) { |
- used_mode = static_cast<RasterMode>(mode); |
- break; |
- } |
- } |
- |
- for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) { |
- if (mode != used_mode) |
- FreeResourceForTile(tile, static_cast<RasterMode>(mode)); |
- } |
-} |
- |
void TileManager::FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw( |
Tile* tile) { |
bool was_ready_to_draw = tile->IsReadyToDraw(); |
@@ -979,21 +928,20 @@ void TileManager::ScheduleTasks( |
++it) { |
Tile* tile = *it; |
ManagedTileState& mts = tile->managed_state(); |
- ManagedTileState::TileVersion& tile_version = |
- mts.tile_versions[mts.raster_mode]; |
+ ManagedTileState::TileDrawInfo& draw_info = mts.draw_info_; |
- DCHECK(tile_version.requires_resource()); |
- DCHECK(!tile_version.resource_); |
+ DCHECK(draw_info.requires_resource()); |
+ DCHECK(!draw_info.resource_); |
- if (!tile_version.raster_task_.get()) |
- tile_version.raster_task_ = CreateRasterTask(tile); |
+ if (!draw_info.raster_task_.get()) |
+ draw_info.raster_task_ = CreateRasterTask(tile); |
TaskSetCollection task_sets; |
if (tile->required_for_activation()) |
task_sets.set(REQUIRED_FOR_ACTIVATION); |
task_sets.set(ALL); |
raster_queue_.items.push_back( |
- RasterTaskQueue::Item(tile_version.raster_task_.get(), task_sets)); |
+ RasterTaskQueue::Item(draw_info.raster_task_.get(), task_sets)); |
} |
// We must reduce the amount of unused resoruces before calling |
@@ -1062,7 +1010,6 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { |
tile->picture_pile(), |
tile->content_rect(), |
tile->contents_scale(), |
- mts.raster_mode, |
mts.resolution, |
tile->layer_id(), |
static_cast<const void*>(tile), |
@@ -1072,8 +1019,7 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { |
base::Bind(&TileManager::OnRasterTaskCompleted, |
base::Unretained(this), |
tile->id(), |
- base::Passed(&resource), |
- mts.raster_mode), |
+ base::Passed(&resource)), |
&decode_tasks)); |
} |
@@ -1100,17 +1046,16 @@ void TileManager::OnImageDecodeTaskCompleted(int layer_id, |
void TileManager::OnRasterTaskCompleted( |
Tile::Id tile_id, |
scoped_ptr<ScopedResource> resource, |
- RasterMode raster_mode, |
const PicturePileImpl::Analysis& analysis, |
bool was_canceled) { |
DCHECK(tiles_.find(tile_id) != tiles_.end()); |
Tile* tile = tiles_[tile_id]; |
ManagedTileState& mts = tile->managed_state(); |
- ManagedTileState::TileVersion& tile_version = mts.tile_versions[raster_mode]; |
- DCHECK(tile_version.raster_task_.get()); |
- orphan_raster_tasks_.push_back(tile_version.raster_task_); |
- tile_version.raster_task_ = NULL; |
+ ManagedTileState::TileDrawInfo& draw_info = mts.draw_info_; |
+ DCHECK(draw_info.raster_task_.get()); |
+ orphan_raster_tasks_.push_back(draw_info.raster_task_); |
+ draw_info.raster_task_ = NULL; |
if (was_canceled) { |
++update_visible_tiles_stats_.canceled_count; |
@@ -1121,17 +1066,16 @@ void TileManager::OnRasterTaskCompleted( |
++update_visible_tiles_stats_.completed_count; |
if (analysis.is_solid_color) { |
- tile_version.set_solid_color(analysis.solid_color); |
+ draw_info.set_solid_color(analysis.solid_color); |
resource_pool_->ReleaseResource(resource.Pass()); |
} else { |
- tile_version.set_use_resource(); |
- tile_version.resource_ = resource.Pass(); |
+ draw_info.set_use_resource(); |
+ draw_info.resource_ = resource.Pass(); |
bytes_releasable_ += BytesConsumedIfAllocated(tile); |
++resources_releasable_; |
} |
- FreeUnusedResourcesForTile(tile); |
if (tile->priority(ACTIVE_TREE).distance_to_visible == 0.f) |
did_initialize_visible_tile_ = true; |