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 851885b80b3b9685c402507c93e96d2f54ffb7b8..3cae6fdb42d1c7b03eb2b4ee936fd90bf1555b68 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -244,6 +244,7 @@ LayerTreeHostImpl::LayerTreeHostImpl( |
device_scale_factor_(1.f), |
overhang_ui_resource_id_(0), |
overdraw_bottom_height_(0.f), |
+ resourceless_software_draw_(false), |
device_viewport_valid_for_tile_management_(true), |
begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), |
animation_registrar_(AnimationRegistrar::Create()), |
@@ -549,8 +550,9 @@ void LayerTreeHostImpl::FrameData::AppendRenderPass( |
render_passes.push_back(render_pass.Pass()); |
} |
-static DrawMode GetDrawMode(OutputSurface* output_surface) { |
- if (output_surface->ForcedDrawToSoftwareDevice()) { |
+static DrawMode GetDrawMode(bool resourceless_software, |
danakj
2014/07/09 17:21:07
how about making this not static, and stop passing
boliu
2014/07/09 20:59:50
Done.
|
+ OutputSurface* output_surface) { |
+ if (resourceless_software) { |
return DRAW_MODE_RESOURCELESS_SOFTWARE; |
} else if (output_surface->context_provider()) { |
return DRAW_MODE_HARDWARE; |
@@ -778,7 +780,8 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses( |
int layers_drawn = 0; |
- const DrawMode draw_mode = GetDrawMode(output_surface_.get()); |
+ const DrawMode draw_mode = |
+ GetDrawMode(resourceless_software_draw_, output_surface_.get()); |
LayerIteratorType end = |
LayerIteratorType::End(frame->render_surface_layer_list); |
@@ -915,7 +918,7 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses( |
DCHECK(!frame->render_passes.empty()); |
// Should only have one render pass in resourceless software mode. |
- if (output_surface_->ForcedDrawToSoftwareDevice()) |
+ if (resourceless_software_draw_) |
danakj
2014/07/09 17:21:07
can you change this to be based on the draw_mode,
boliu
2014/07/09 20:59:50
Done.
|
DCHECK_EQ(1u, frame->render_passes.size()); |
return draw_result; |
@@ -1305,14 +1308,17 @@ void LayerTreeHostImpl::SetExternalDrawConstraints( |
const gfx::Transform& transform, |
const gfx::Rect& viewport, |
const gfx::Rect& clip, |
+ bool resourceless_software_draw, |
bool valid_for_tile_management) { |
- if (external_transform_ != transform || external_viewport_ != viewport) { |
+ if (external_transform_ != transform || external_viewport_ != viewport || |
+ resourceless_software_draw_ != resourceless_software_draw) { |
brianderson
2014/07/08 21:26:12
Is this the part that fixes the bug?
Was the poin
boliu
2014/07/08 21:31:14
Yes
|
active_tree_->set_needs_update_draw_properties(); |
} |
external_transform_ = transform; |
external_viewport_ = viewport; |
external_clip_ = clip; |
+ resourceless_software_draw_ = resourceless_software_draw; |
device_viewport_valid_for_tile_management_ = valid_for_tile_management; |
} |
@@ -1462,10 +1468,11 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame, |
if (active_tree_->hud_layer()) { |
TRACE_EVENT0("cc", "DrawLayers.UpdateHudTexture"); |
active_tree_->hud_layer()->UpdateHudTexture( |
- GetDrawMode(output_surface_.get()), resource_provider_.get()); |
+ GetDrawMode(resourceless_software_draw_, output_surface_.get()), |
danakj
2014/07/09 17:21:07
can you move this GetDrawMode up above the if stat
boliu
2014/07/09 20:59:50
Done.
|
+ resource_provider_.get()); |
} |
- if (output_surface_->ForcedDrawToSoftwareDevice()) { |
+ if (resourceless_software_draw_) { |
bool disable_picture_quad_image_filtering = |
IsCurrentlyScrolling() || needs_animate_layers(); |