| Index: cc/trees/layer_tree_host_impl.cc
|
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
|
| index c3738e594734e6b5fd7df5d2fe9e6ca0191ba22e..b87440036e937a762db74f955fc8506a58bf7d65 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -246,7 +246,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(
|
| device_scale_factor_(1.f),
|
| overhang_ui_resource_id_(0),
|
| overdraw_bottom_height_(0.f),
|
| - device_viewport_valid_for_tile_management_(true),
|
| + resourceless_software_draw_(false),
|
| begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()),
|
| animation_registrar_(AnimationRegistrar::Create()),
|
| rendering_stats_instrumentation_(rendering_stats_instrumentation),
|
| @@ -569,17 +569,17 @@ void LayerTreeHostImpl::FrameData::AppendRenderPass(
|
| render_passes.push_back(render_pass.Pass());
|
| }
|
|
|
| -static DrawMode GetDrawMode(OutputSurface* output_surface) {
|
| - if (output_surface->ForcedDrawToSoftwareDevice()) {
|
| +DrawMode LayerTreeHostImpl::GetDrawMode() const {
|
| + if (resourceless_software_draw_) {
|
| return DRAW_MODE_RESOURCELESS_SOFTWARE;
|
| - } else if (output_surface->context_provider()) {
|
| + } else if (output_surface_->context_provider()) {
|
| return DRAW_MODE_HARDWARE;
|
| } else {
|
| - DCHECK_EQ(!output_surface->software_device(),
|
| - output_surface->capabilities().delegated_rendering &&
|
| - !output_surface->capabilities().deferred_gl_initialization)
|
| - << output_surface->capabilities().delegated_rendering << " "
|
| - << output_surface->capabilities().deferred_gl_initialization;
|
| + DCHECK_EQ(!output_surface_->software_device(),
|
| + output_surface_->capabilities().delegated_rendering &&
|
| + !output_surface_->capabilities().deferred_gl_initialization)
|
| + << output_surface_->capabilities().delegated_rendering << " "
|
| + << output_surface_->capabilities().deferred_gl_initialization;
|
| return DRAW_MODE_SOFTWARE;
|
| }
|
| }
|
| @@ -798,7 +798,7 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses(
|
|
|
| int layers_drawn = 0;
|
|
|
| - const DrawMode draw_mode = GetDrawMode(output_surface_.get());
|
| + const DrawMode draw_mode = GetDrawMode();
|
|
|
| LayerIteratorType end =
|
| LayerIteratorType::End(frame->render_surface_layer_list);
|
| @@ -935,8 +935,9 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses(
|
| DCHECK(!frame->render_passes.empty());
|
|
|
| // Should only have one render pass in resourceless software mode.
|
| - if (output_surface_->ForcedDrawToSoftwareDevice())
|
| - DCHECK_EQ(1u, frame->render_passes.size());
|
| + DCHECK(draw_mode != DRAW_MODE_RESOURCELESS_SOFTWARE ||
|
| + frame->render_passes.size() == 1u)
|
| + << frame->render_passes.size();
|
|
|
| return draw_result;
|
| }
|
| @@ -1325,15 +1326,16 @@ void LayerTreeHostImpl::SetExternalDrawConstraints(
|
| const gfx::Transform& transform,
|
| const gfx::Rect& viewport,
|
| const gfx::Rect& clip,
|
| - bool valid_for_tile_management) {
|
| - if (external_transform_ != transform || external_viewport_ != viewport) {
|
| + bool resourceless_software_draw) {
|
| + if (external_transform_ != transform || external_viewport_ != viewport ||
|
| + resourceless_software_draw_ != resourceless_software_draw) {
|
| active_tree_->set_needs_update_draw_properties();
|
| }
|
|
|
| external_transform_ = transform;
|
| external_viewport_ = viewport;
|
| external_clip_ = clip;
|
| - device_viewport_valid_for_tile_management_ = valid_for_tile_management;
|
| + resourceless_software_draw_ = resourceless_software_draw;
|
| }
|
|
|
| void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
|
| @@ -1476,16 +1478,18 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame,
|
| TracedValue::FromValue(AsValueWithFrame(frame).release()));
|
| }
|
|
|
| + const DrawMode draw_mode = GetDrawMode();
|
| +
|
| // Because the contents of the HUD depend on everything else in the frame, the
|
| // contents of its texture are updated as the last thing before the frame is
|
| // drawn.
|
| if (active_tree_->hud_layer()) {
|
| TRACE_EVENT0("cc", "DrawLayers.UpdateHudTexture");
|
| - active_tree_->hud_layer()->UpdateHudTexture(
|
| - GetDrawMode(output_surface_.get()), resource_provider_.get());
|
| + active_tree_->hud_layer()->UpdateHudTexture(draw_mode,
|
| + resource_provider_.get());
|
| }
|
|
|
| - if (output_surface_->ForcedDrawToSoftwareDevice()) {
|
| + if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) {
|
| bool disable_picture_quad_image_filtering =
|
| IsCurrentlyScrolling() || needs_animate_layers();
|
|
|
|
|