| Index: trunk/src/cc/layers/picture_layer_impl.cc
|
| ===================================================================
|
| --- trunk/src/cc/layers/picture_layer_impl.cc (revision 272659)
|
| +++ trunk/src/cc/layers/picture_layer_impl.cc (working copy)
|
| @@ -233,8 +233,7 @@
|
| // unused can be considered for removal.
|
| std::vector<PictureLayerTiling*> seen_tilings;
|
|
|
| - size_t missing_tile_count = 0u;
|
| - size_t on_demand_missing_tile_count = 0u;
|
| + bool had_checkerboard_quads = false;
|
| for (PictureLayerTilingSet::CoverageIterator iter(
|
| tilings_.get(), contents_scale_x(), rect, ideal_contents_scale_);
|
| iter;
|
| @@ -248,75 +247,8 @@
|
| append_quads_data->visible_content_area +=
|
| visible_geometry_rect.width() * visible_geometry_rect.height();
|
|
|
| - scoped_ptr<DrawQuad> draw_quad;
|
| - if (*iter && iter->IsReadyToDraw()) {
|
| - const ManagedTileState::TileVersion& tile_version =
|
| - iter->GetTileVersionForDrawing();
|
| - switch (tile_version.mode()) {
|
| - case ManagedTileState::TileVersion::RESOURCE_MODE: {
|
| - gfx::RectF texture_rect = iter.texture_rect();
|
| - gfx::Rect opaque_rect = iter->opaque_rect();
|
| - opaque_rect.Intersect(geometry_rect);
|
| -
|
| - if (iter->contents_scale() != ideal_contents_scale_)
|
| - append_quads_data->had_incomplete_tile = true;
|
| -
|
| - scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create();
|
| - quad->SetNew(shared_quad_state,
|
| - geometry_rect,
|
| - opaque_rect,
|
| - visible_geometry_rect,
|
| - tile_version.get_resource_id(),
|
| - texture_rect,
|
| - iter.texture_size(),
|
| - tile_version.contents_swizzled());
|
| - draw_quad = quad.PassAs<DrawQuad>();
|
| - break;
|
| - }
|
| - case ManagedTileState::TileVersion::PICTURE_PILE_MODE: {
|
| - if (!layer_tree_impl()
|
| - ->GetRendererCapabilities()
|
| - .allow_rasterize_on_demand) {
|
| - ++on_demand_missing_tile_count;
|
| - break;
|
| - }
|
| -
|
| - gfx::RectF texture_rect = iter.texture_rect();
|
| - gfx::Rect opaque_rect = iter->opaque_rect();
|
| - opaque_rect.Intersect(geometry_rect);
|
| -
|
| - ResourceProvider* resource_provider =
|
| - layer_tree_impl()->resource_provider();
|
| - ResourceFormat format =
|
| - resource_provider->memory_efficient_texture_format();
|
| - scoped_ptr<PictureDrawQuad> quad = PictureDrawQuad::Create();
|
| - quad->SetNew(shared_quad_state,
|
| - geometry_rect,
|
| - opaque_rect,
|
| - visible_geometry_rect,
|
| - texture_rect,
|
| - iter.texture_size(),
|
| - format,
|
| - iter->content_rect(),
|
| - iter->contents_scale(),
|
| - pile_);
|
| - draw_quad = quad.PassAs<DrawQuad>();
|
| - break;
|
| - }
|
| - case ManagedTileState::TileVersion::SOLID_COLOR_MODE: {
|
| - scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
|
| - quad->SetNew(shared_quad_state,
|
| - geometry_rect,
|
| - visible_geometry_rect,
|
| - tile_version.get_solid_color(),
|
| - false);
|
| - draw_quad = quad.PassAs<DrawQuad>();
|
| - break;
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (!draw_quad) {
|
| + if (!*iter || !iter->IsReadyToDraw()) {
|
| + had_checkerboard_quads = true;
|
| if (draw_checkerboard_for_missing_tiles()) {
|
| scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create();
|
| SkColor color = DebugColors::DefaultCheckerboardColor();
|
| @@ -338,10 +270,69 @@
|
| append_quads_data->had_incomplete_tile = true;
|
| append_quads_data->approximated_visible_content_area +=
|
| visible_geometry_rect.width() * visible_geometry_rect.height();
|
| - ++missing_tile_count;
|
| continue;
|
| }
|
|
|
| + const ManagedTileState::TileVersion& tile_version =
|
| + iter->GetTileVersionForDrawing();
|
| + scoped_ptr<DrawQuad> draw_quad;
|
| + switch (tile_version.mode()) {
|
| + case ManagedTileState::TileVersion::RESOURCE_MODE: {
|
| + gfx::RectF texture_rect = iter.texture_rect();
|
| + gfx::Rect opaque_rect = iter->opaque_rect();
|
| + opaque_rect.Intersect(geometry_rect);
|
| +
|
| + if (iter->contents_scale() != ideal_contents_scale_)
|
| + append_quads_data->had_incomplete_tile = true;
|
| +
|
| + scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create();
|
| + quad->SetNew(shared_quad_state,
|
| + geometry_rect,
|
| + opaque_rect,
|
| + visible_geometry_rect,
|
| + tile_version.get_resource_id(),
|
| + texture_rect,
|
| + iter.texture_size(),
|
| + tile_version.contents_swizzled());
|
| + draw_quad = quad.PassAs<DrawQuad>();
|
| + break;
|
| + }
|
| + case ManagedTileState::TileVersion::PICTURE_PILE_MODE: {
|
| + gfx::RectF texture_rect = iter.texture_rect();
|
| + gfx::Rect opaque_rect = iter->opaque_rect();
|
| + opaque_rect.Intersect(geometry_rect);
|
| +
|
| + ResourceProvider* resource_provider =
|
| + layer_tree_impl()->resource_provider();
|
| + ResourceFormat format =
|
| + resource_provider->memory_efficient_texture_format();
|
| + scoped_ptr<PictureDrawQuad> quad = PictureDrawQuad::Create();
|
| + quad->SetNew(shared_quad_state,
|
| + geometry_rect,
|
| + opaque_rect,
|
| + visible_geometry_rect,
|
| + texture_rect,
|
| + iter.texture_size(),
|
| + format,
|
| + iter->content_rect(),
|
| + iter->contents_scale(),
|
| + pile_);
|
| + draw_quad = quad.PassAs<DrawQuad>();
|
| + break;
|
| + }
|
| + case ManagedTileState::TileVersion::SOLID_COLOR_MODE: {
|
| + scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
|
| + quad->SetNew(shared_quad_state,
|
| + geometry_rect,
|
| + visible_geometry_rect,
|
| + tile_version.get_solid_color(),
|
| + false);
|
| + draw_quad = quad.PassAs<DrawQuad>();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + DCHECK(draw_quad);
|
| quad_sink->Append(draw_quad.Pass());
|
|
|
| if (iter->priority(ACTIVE_TREE).resolution != HIGH_RESOLUTION) {
|
| @@ -353,14 +344,10 @@
|
| seen_tilings.push_back(iter.CurrentTiling());
|
| }
|
|
|
| - if (missing_tile_count) {
|
| - TRACE_EVENT_INSTANT2("cc",
|
| + if (had_checkerboard_quads) {
|
| + TRACE_EVENT_INSTANT0("cc",
|
| "PictureLayerImpl::AppendQuads checkerboard",
|
| - TRACE_EVENT_SCOPE_THREAD,
|
| - "missing_tile_count",
|
| - missing_tile_count,
|
| - "on_demand_missing_tile_count",
|
| - on_demand_missing_tile_count);
|
| + TRACE_EVENT_SCOPE_THREAD);
|
| }
|
|
|
| // Aggressively remove any tilings that are not seen to save memory. Note
|
| @@ -442,7 +429,7 @@
|
| layer_tree_impl()->DidModifyTilePriorities();
|
| }
|
|
|
| -void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) {
|
| +void PictureLayerImpl::NotifyTileInitialized(const Tile* tile) {
|
| if (layer_tree_impl()->IsActiveTree()) {
|
| gfx::RectF layer_damage_rect =
|
| gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale());
|
| @@ -1367,37 +1354,6 @@
|
| return !layer_tree_impl()->IsRecycleTree();
|
| }
|
|
|
| -bool PictureLayerImpl::AllTilesRequiredForActivationAreReadyToDraw() const {
|
| - if (!layer_tree_impl()->IsPendingTree())
|
| - return true;
|
| -
|
| - if (!tilings_)
|
| - return true;
|
| -
|
| - for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
|
| - PictureLayerTiling* tiling = tilings_->tiling_at(i);
|
| - if (tiling->resolution() != HIGH_RESOLUTION &&
|
| - tiling->resolution() != LOW_RESOLUTION)
|
| - continue;
|
| -
|
| - gfx::Rect rect(visible_content_rect());
|
| - for (PictureLayerTiling::CoverageIterator iter(
|
| - tiling, contents_scale_x(), rect);
|
| - iter;
|
| - ++iter) {
|
| - const Tile* tile = *iter;
|
| - // A null tile (i.e. missing recording) can just be skipped.
|
| - if (!tile)
|
| - continue;
|
| -
|
| - if (tile->required_for_activation() && !tile->IsReadyToDraw())
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| PictureLayerImpl::LayerRasterTileIterator::LayerRasterTileIterator()
|
| : layer_(NULL) {}
|
|
|
|
|