| Index: cc/layers/picture_layer_impl.cc
|
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
|
| index 3a0753f5da627c156836ea8d7a77240927261e75..f62a8664ff89f7e84467dc68813ae18ee56b99c0 100644
|
| --- a/cc/layers/picture_layer_impl.cc
|
| +++ b/cc/layers/picture_layer_impl.cc
|
| @@ -153,7 +153,6 @@ void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) {
|
| }
|
|
|
| void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
| - const Occlusion& occlusion_in_content_space,
|
| AppendQuadsData* append_quads_data) {
|
| // The bounds and the pile size may differ if the pile wasn't updated (ie.
|
| // PictureLayer::Update didn't happen). In that case the pile will be empty.
|
| @@ -172,50 +171,35 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
| render_pass, bounds(), shared_quad_state, append_quads_data);
|
|
|
| SolidColorLayerImpl::AppendSolidQuads(
|
| - render_pass, occlusion_in_content_space, shared_quad_state,
|
| - visible_content_rect(), raster_source_->GetSolidColor(),
|
| - append_quads_data);
|
| + render_pass, draw_properties().occlusion_in_content_space,
|
| + shared_quad_state, visible_content_rect(),
|
| + raster_source_->GetSolidColor(), append_quads_data);
|
| return;
|
| }
|
|
|
| float max_contents_scale = MaximumTilingContentsScale();
|
| - gfx::Transform scaled_draw_transform = draw_transform();
|
| - scaled_draw_transform.Scale(SK_MScalar1 / max_contents_scale,
|
| - SK_MScalar1 / max_contents_scale);
|
| - gfx::Size scaled_content_bounds =
|
| - gfx::ToCeiledSize(gfx::ScaleSize(bounds(), max_contents_scale));
|
| - gfx::Rect scaled_visible_content_rect =
|
| - gfx::ScaleToEnclosingRect(visible_content_rect(), max_contents_scale);
|
| - scaled_visible_content_rect.Intersect(gfx::Rect(scaled_content_bounds));
|
| + PopulateScaledSharedQuadState(shared_quad_state, max_contents_scale);
|
| Occlusion scaled_occlusion =
|
| - occlusion_in_content_space.GetOcclusionWithGivenDrawTransform(
|
| - scaled_draw_transform);
|
| -
|
| - shared_quad_state->SetAll(
|
| - scaled_draw_transform, scaled_content_bounds, scaled_visible_content_rect,
|
| - draw_properties().clip_rect, draw_properties().is_clipped,
|
| - draw_properties().opacity, draw_properties().blend_mode,
|
| - sorting_context_id_);
|
| + draw_properties()
|
| + .occlusion_in_content_space.GetOcclusionWithGivenDrawTransform(
|
| + shared_quad_state->content_to_target_transform);
|
|
|
| if (current_draw_mode_ == DRAW_MODE_RESOURCELESS_SOFTWARE) {
|
| AppendDebugBorderQuad(
|
| - render_pass,
|
| - scaled_content_bounds,
|
| - shared_quad_state,
|
| - append_quads_data,
|
| - DebugColors::DirectPictureBorderColor(),
|
| + render_pass, shared_quad_state->content_bounds, shared_quad_state,
|
| + append_quads_data, DebugColors::DirectPictureBorderColor(),
|
| DebugColors::DirectPictureBorderWidth(layer_tree_impl()));
|
|
|
| - gfx::Rect geometry_rect = scaled_visible_content_rect;
|
| + gfx::Rect geometry_rect = shared_quad_state->visible_content_rect;
|
| gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect();
|
| gfx::Rect visible_geometry_rect =
|
| scaled_occlusion.GetUnoccludedContentRect(geometry_rect);
|
| if (visible_geometry_rect.IsEmpty())
|
| return;
|
|
|
| - gfx::Size texture_size = scaled_visible_content_rect.size();
|
| + gfx::Rect quad_content_rect = shared_quad_state->visible_content_rect;
|
| + gfx::Size texture_size = quad_content_rect.size();
|
| gfx::RectF texture_rect = gfx::RectF(texture_size);
|
| - gfx::Rect quad_content_rect = scaled_visible_content_rect;
|
|
|
| PictureDrawQuad* quad =
|
| render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
|
| @@ -226,17 +210,14 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
| return;
|
| }
|
|
|
| - AppendDebugBorderQuad(
|
| - render_pass, scaled_content_bounds, shared_quad_state, append_quads_data);
|
| + AppendDebugBorderQuad(render_pass, shared_quad_state->content_bounds,
|
| + shared_quad_state, append_quads_data);
|
|
|
| if (ShowDebugBorders()) {
|
| for (PictureLayerTilingSet::CoverageIterator iter(
|
| - tilings_.get(),
|
| - max_contents_scale,
|
| - scaled_visible_content_rect,
|
| - ideal_contents_scale_);
|
| - iter;
|
| - ++iter) {
|
| + tilings_.get(), max_contents_scale,
|
| + shared_quad_state->visible_content_rect, ideal_contents_scale_);
|
| + iter; ++iter) {
|
| SkColor color;
|
| float width;
|
| if (*iter && iter->IsReadyToDraw()) {
|
| @@ -290,12 +271,10 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
| size_t missing_tile_count = 0u;
|
| size_t on_demand_missing_tile_count = 0u;
|
| only_used_low_res_last_append_quads_ = true;
|
| - for (PictureLayerTilingSet::CoverageIterator iter(tilings_.get(),
|
| - max_contents_scale,
|
| - scaled_visible_content_rect,
|
| - ideal_contents_scale_);
|
| - iter;
|
| - ++iter) {
|
| + for (PictureLayerTilingSet::CoverageIterator iter(
|
| + tilings_.get(), max_contents_scale,
|
| + shared_quad_state->visible_content_rect, ideal_contents_scale_);
|
| + iter; ++iter) {
|
| gfx::Rect geometry_rect = iter.geometry_rect();
|
| gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect();
|
| gfx::Rect visible_geometry_rect =
|
| @@ -429,8 +408,7 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
| CleanUpTilingsOnActiveLayer(last_append_quads_tilings_);
|
| }
|
|
|
| -bool PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
|
| - bool resourceless_software_draw) {
|
| +bool PictureLayerImpl::UpdateTiles(bool resourceless_software_draw) {
|
| DCHECK_EQ(1.f, contents_scale_x());
|
| DCHECK_EQ(1.f, contents_scale_y());
|
|
|
| @@ -452,7 +430,7 @@ bool PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
|
| // only have one or two tilings (high and low res), so only clean up the
|
| // active layer. This cleans it up here in case AppendQuads didn't run.
|
| // If it did run, this would not remove any additional tilings.
|
| - if (GetTree() == ACTIVE_TREE)
|
| + if (layer_tree_impl()->IsActiveTree())
|
| CleanUpTilingsOnActiveLayer(last_append_quads_tilings_);
|
|
|
| UpdateIdealScales();
|
| @@ -473,12 +451,6 @@ bool PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
|
|
|
| if (draw_transform_is_animating())
|
| raster_source_->SetShouldAttemptToUseDistanceFieldText();
|
| - return UpdateTilePriorities(occlusion_in_content_space);
|
| -}
|
| -
|
| -bool PictureLayerImpl::UpdateTilePriorities(
|
| - const Occlusion& occlusion_in_content_space) {
|
| - DCHECK_IMPLIES(raster_source_->IsSolidColor(), tilings_->num_tilings() == 0);
|
|
|
| double current_frame_time_in_seconds =
|
| (layer_tree_impl()->CurrentBeginFrameArgs().frame_time -
|
| @@ -501,6 +473,12 @@ bool PictureLayerImpl::UpdateTilePriorities(
|
| !only_used_low_res_last_append_quads_ || RequiresHighResToDraw() ||
|
| !layer_tree_impl()->SmoothnessTakesPriority();
|
|
|
| + static const Occlusion kEmptyOcclusion;
|
| + const Occlusion& occlusion_in_content_space =
|
| + layer_tree_impl()->settings().use_occlusion_for_tile_prioritization
|
| + ? draw_properties().occlusion_in_content_space
|
| + : kEmptyOcclusion;
|
| +
|
| // Pass |occlusion_in_content_space| for |occlusion_in_layer_space| since
|
| // they are the same space in picture layer, as contents scale is always 1.
|
| bool updated = tilings_->UpdateTilePriorities(
|
| @@ -1139,7 +1117,7 @@ PictureLayerImpl::CreatePictureLayerTilingSet() {
|
| return PictureLayerTilingSet::Create(
|
| this, settings.max_tiles_for_interest_area,
|
| layer_tree_impl()->use_gpu_rasterization()
|
| - ? 0.f
|
| + ? settings.gpu_rasterization_skewport_target_time_in_seconds
|
| : settings.skewport_target_time_in_seconds,
|
| settings.skewport_extrapolation_limit_in_content_pixels);
|
| }
|
| @@ -1180,7 +1158,8 @@ void PictureLayerImpl::GetAllTilesForTracing(
|
| tilings_->GetAllTilesForTracing(tiles);
|
| }
|
|
|
| -void PictureLayerImpl::AsValueInto(base::debug::TracedValue* state) const {
|
| +void PictureLayerImpl::AsValueInto(
|
| + base::trace_event::TracedValue* state) const {
|
| LayerImpl::AsValueInto(state);
|
| state->SetDouble("ideal_contents_scale", ideal_contents_scale_);
|
| state->SetDouble("geometry_contents_scale", MaximumTilingContentsScale());
|
|
|