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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 14417014: cc: Add tile-free software compositing mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to 199251 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/resources/tile_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 RenderPass::Id target_render_pass_id = 591 RenderPass::Id target_render_pass_id =
592 it.target_render_surface_layer()->render_surface()->RenderPassId(); 592 it.target_render_surface_layer()->render_surface()->RenderPassId();
593 RenderPass* target_render_pass = 593 RenderPass* target_render_pass =
594 frame->render_passes_by_id[target_render_pass_id]; 594 frame->render_passes_by_id[target_render_pass_id];
595 595
596 bool prevent_occlusion = 596 bool prevent_occlusion =
597 it.target_render_surface_layer()->HasRequestCopyCallback(); 597 it.target_render_surface_layer()->HasRequestCopyCallback();
598 occlusion_tracker.EnterLayer(it, prevent_occlusion); 598 occlusion_tracker.EnterLayer(it, prevent_occlusion);
599 599
600 AppendQuadsData append_quads_data(target_render_pass->id); 600 AppendQuadsData append_quads_data(target_render_pass->id);
601 if (output_surface_->ForcedDrawToSoftwareDevice())
602 append_quads_data.allow_tile_draw_quads = false;
601 603
602 if (it.represents_target_render_surface()) { 604 if (it.represents_target_render_surface()) {
603 if (it->HasRequestCopyCallback()) { 605 if (it->HasRequestCopyCallback()) {
604 have_copy_request = true; 606 have_copy_request = true;
605 it->TakeRequestCopyCallbacks(&target_render_pass->copy_callbacks); 607 it->TakeRequestCopyCallbacks(&target_render_pass->copy_callbacks);
606 } 608 }
607 } else if (it.represents_contributing_render_surface()) { 609 } else if (it.represents_contributing_render_surface()) {
608 RenderPass::Id contributing_render_pass_id = 610 RenderPass::Id contributing_render_pass_id =
609 it->render_surface()->RenderPassId(); 611 it->render_surface()->RenderPassId();
610 RenderPass* contributing_render_pass = 612 RenderPass* contributing_render_pass =
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 active_tree_->background_color(), 704 active_tree_->background_color(),
703 occlusion_tracker); 705 occlusion_tracker);
704 } 706 }
705 707
706 if (draw_frame) 708 if (draw_frame)
707 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); 709 occlusion_tracker.overdraw_metrics()->RecordMetrics(this);
708 else 710 else
709 DCHECK(!have_copy_request); 711 DCHECK(!have_copy_request);
710 712
711 RemoveRenderPasses(CullRenderPassesWithNoQuads(), frame); 713 RemoveRenderPasses(CullRenderPassesWithNoQuads(), frame);
712 renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes); 714 if (!output_surface_->ForcedDrawToSoftwareDevice())
715 renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes);
713 RemoveRenderPasses(CullRenderPassesWithCachedTextures(renderer_.get()), 716 RemoveRenderPasses(CullRenderPassesWithCachedTextures(renderer_.get()),
714 frame); 717 frame);
715 718
716 // If we're making a frame to draw, it better have at least one render pass. 719 // If we're making a frame to draw, it better have at least one render pass.
717 DCHECK(!frame->render_passes.empty()); 720 DCHECK(!frame->render_passes.empty());
718 return draw_frame; 721 return draw_frame;
719 } 722 }
720 723
721 void LayerTreeHostImpl::UpdateBackgroundAnimateTicking( 724 void LayerTreeHostImpl::UpdateBackgroundAnimateTicking(
722 bool should_background_tick) { 725 bool should_background_tick) {
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 "cc.debug", "cc::LayerTreeHostImpl", this, 1108 "cc.debug", "cc::LayerTreeHostImpl", this,
1106 TracedValue::FromValue(AsValue().release())); 1109 TracedValue::FromValue(AsValue().release()));
1107 } 1110 }
1108 1111
1109 // Because the contents of the HUD depend on everything else in the frame, the 1112 // Because the contents of the HUD depend on everything else in the frame, the
1110 // contents of its texture are updated as the last thing before the frame is 1113 // contents of its texture are updated as the last thing before the frame is
1111 // drawn. 1114 // drawn.
1112 if (active_tree_->hud_layer()) 1115 if (active_tree_->hud_layer())
1113 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get()); 1116 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get());
1114 1117
1115 renderer_->DrawFrame(&frame->render_passes); 1118 if (output_surface_->ForcedDrawToSoftwareDevice()) {
1119 scoped_ptr<SoftwareRenderer> temp_software_renderer =
1120 SoftwareRenderer::Create(this, output_surface_.get(), NULL);
1121 temp_software_renderer->DrawFrame(&frame->render_passes);
1122 } else {
1123 renderer_->DrawFrame(&frame->render_passes);
1124 }
1116 // The render passes should be consumed by the renderer. 1125 // The render passes should be consumed by the renderer.
1117 DCHECK(frame->render_passes.empty()); 1126 DCHECK(frame->render_passes.empty());
1118 frame->render_passes_by_id.clear(); 1127 frame->render_passes_by_id.clear();
1119 1128
1120 // The next frame should start by assuming nothing has changed, and changes 1129 // The next frame should start by assuming nothing has changed, and changes
1121 // are noted as they occur. 1130 // are noted as they occur.
1122 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) { 1131 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) {
1123 (*frame->render_surface_layer_list)[i]->render_surface()->damage_tracker()-> 1132 (*frame->render_surface_layer_list)[i]->render_surface()->damage_tracker()->
1124 DidDrawDamagedArea(); 1133 DidDrawDamagedArea();
1125 } 1134 }
(...skipping 1026 matching lines...) Expand 10 before | Expand all | Expand 10 after
2152 } 2161 }
2153 2162
2154 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { 2163 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) {
2155 if (debug_state_.continuous_painting != debug_state.continuous_painting) 2164 if (debug_state_.continuous_painting != debug_state.continuous_painting)
2156 paint_time_counter_->ClearHistory(); 2165 paint_time_counter_->ClearHistory();
2157 2166
2158 debug_state_ = debug_state; 2167 debug_state_ = debug_state;
2159 } 2168 }
2160 2169
2161 } // namespace cc 2170 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698