Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1610)

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 16211002: Skip drawing unsupported layers in forced software mode (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase on r203584 Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 84c43c20b1c3462b342036d0fbbc7311e9249e28..0dc624d6c4100253af4b363abb2375a00529a3dd 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -414,6 +414,17 @@ void LayerTreeHostImpl::FrameData::AppendRenderPass(
render_passes.push_back(render_pass.Pass());
}
+static DrawMode GetDrawMode(OutputSurface* output_surface) {
+ if (output_surface->ForcedDrawToSoftwareDevice()) {
+ return DRAW_MODE_RESOURCELESS_SOFTWARE;
+ } else if (output_surface->context3d()) {
+ return DRAW_MODE_HARDWARE;
+ } else {
+ DCHECK(output_surface->software_device());
+ return DRAW_MODE_SOFTWARE;
+ }
+}
+
static void AppendQuadsForLayer(RenderPass* target_render_pass,
LayerImpl* layer,
const OcclusionTrackerImpl& occlusion_tracker,
@@ -592,6 +603,8 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) {
int layers_drawn = 0;
+ const DrawMode draw_mode = GetDrawMode(output_surface_.get());
+
LayerIteratorType end =
LayerIteratorType::End(frame->render_surface_layer_list);
for (LayerIteratorType it =
@@ -607,8 +620,6 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) {
occlusion_tracker.EnterLayer(it, prevent_occlusion);
AppendQuadsData append_quads_data(target_render_pass->id);
- if (output_surface_->ForcedDrawToSoftwareDevice())
- append_quads_data.allow_tile_draw_quads = false;
if (it.represents_target_render_surface()) {
if (it->HasCopyRequest()) {
@@ -639,9 +650,9 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) {
&has_occlusion_from_outside_target_surface)) {
append_quads_data.had_occlusion_from_outside_target_surface |=
has_occlusion_from_outside_target_surface;
- } else {
+ } else if (it->WillDraw(draw_mode, resource_provider_.get())) {
DCHECK_EQ(active_tree_, it->layer_tree_impl());
- it->WillDraw(resource_provider_.get());
+
frame->will_draw_layers.push_back(*it);
if (it->HasContributingDelegatedRenderPasses()) {

Powered by Google App Engine
This is Rietveld 408576698