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

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: bool WillDraw(DrawMode) 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..ac94c997aa665b666752bc20141cdd899a8b2159 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -414,6 +414,18 @@ void LayerTreeHostImpl::FrameData::AppendRenderPass(
render_passes.push_back(render_pass.Pass());
}
+static DrawMode GetDrawMode(OutputSurface* output_surface) {
+ if (output_surface->software_device() && !output_surface->context3d()) {
+ if (output_surface->ForcedDrawToSoftwareDevice()) {
+ return DRAW_MODE_RESOURCELESS_SOFTWARE;
+ } else {
+ return DRAW_MODE_SOFTWARE;
+ }
+ } else {
+ return DRAW_MODE_HARDWARE;
+ }
+}
+
static void AppendQuadsForLayer(RenderPass* target_render_pass,
LayerImpl* layer,
const OcclusionTrackerImpl& occlusion_tracker,
@@ -592,6 +604,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 =
@@ -603,13 +617,11 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) {
RenderPass* target_render_pass =
frame->render_passes_by_id[target_render_pass_id];
+ AppendQuadsData append_quads_data(target_render_pass->id);
+
bool prevent_occlusion = it.target_render_surface_layer()->HasCopyRequest();
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()) {
have_copy_request = true;
@@ -639,9 +651,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