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

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

Issue 16304003: Unified OutputSurface::SwapBuffers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: SynchronousCompositorOutputSurface::DemandDrawSw Created 7 years, 6 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
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 910 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 device_viewport_damage_rect.Union(viewport_damage_rect_); 921 device_viewport_damage_rect.Union(viewport_damage_rect_);
922 viewport_damage_rect_ = gfx::Rect(); 922 viewport_damage_rect_ = gfx::Rect();
923 923
924 active_tree_->root_layer()->render_surface()->damage_tracker()-> 924 active_tree_->root_layer()->render_surface()->damage_tracker()->
925 AddDamageNextUpdate(device_viewport_damage_rect); 925 AddDamageNextUpdate(device_viewport_damage_rect);
926 } 926 }
927 927
928 if (!CalculateRenderPasses(frame)) 928 if (!CalculateRenderPasses(frame))
929 return false; 929 return false;
930 930
931 frame->latency_info = active_tree_->GetLatencyInfo();
932
933 // If we return true, then we expect DrawLayers() to be called before this 931 // If we return true, then we expect DrawLayers() to be called before this
934 // function is called again. 932 // function is called again.
935 return true; 933 return true;
936 } 934 }
937 935
938 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( 936 void LayerTreeHostImpl::EnforceManagedMemoryPolicy(
939 const ManagedMemoryPolicy& policy) { 937 const ManagedMemoryPolicy& policy) {
940 938
941 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread( 939 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread(
942 visible_ ? policy.bytes_limit_when_visible 940 visible_ ? policy.bytes_limit_when_visible
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 1054
1057 void LayerTreeHostImpl::OnVSyncParametersChanged(base::TimeTicks timebase, 1055 void LayerTreeHostImpl::OnVSyncParametersChanged(base::TimeTicks timebase,
1058 base::TimeDelta interval) { 1056 base::TimeDelta interval) {
1059 client_->OnVSyncParametersChanged(timebase, interval); 1057 client_->OnVSyncParametersChanged(timebase, interval);
1060 } 1058 }
1061 1059
1062 void LayerTreeHostImpl::BeginFrame(base::TimeTicks frame_time) { 1060 void LayerTreeHostImpl::BeginFrame(base::TimeTicks frame_time) {
1063 client_->BeginFrameOnImplThread(frame_time); 1061 client_->BeginFrameOnImplThread(frame_time);
1064 } 1062 }
1065 1063
1066 void LayerTreeHostImpl::OnSendFrameToParentCompositorAck( 1064 void LayerTreeHostImpl::OnSwapBuffersComplete(
1067 const CompositorFrameAck& ack) { 1065 const CompositorFrameAck* ack) {
1068 if (!renderer_)
1069 return;
1070
1071 // TODO(piman): We may need to do some validation on this ack before 1066 // TODO(piman): We may need to do some validation on this ack before
1072 // processing it. 1067 // processing it.
1073 renderer_->ReceiveCompositorFrameAck(ack); 1068 if (ack && renderer_)
1069 renderer_->ReceiveSwapBuffersAck(*ack);
1074 1070
1075 // When using compositor frame data, the ack doubles as a swap complete ack. 1071 client_->OnSwapBuffersCompleteOnImplThread();
1076 OnSwapBuffersComplete();
1077 } 1072 }
1078 1073
1079 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { 1074 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() {
1080 client_->OnCanDrawStateChanged(CanDraw()); 1075 client_->OnCanDrawStateChanged(CanDraw());
1081 } 1076 }
1082 1077
1083 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { 1078 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const {
1084 CompositorFrameMetadata metadata; 1079 CompositorFrameMetadata metadata;
1085 metadata.device_scale_factor = device_scale_factor_; 1080 metadata.device_scale_factor = device_scale_factor_;
1086 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); 1081 metadata.page_scale_factor = active_tree_->total_page_scale_factor();
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 return renderer_ && renderer_->IsContextLost(); 1213 return renderer_ && renderer_->IsContextLost();
1219 } 1214 }
1220 1215
1221 const RendererCapabilities& LayerTreeHostImpl::GetRendererCapabilities() const { 1216 const RendererCapabilities& LayerTreeHostImpl::GetRendererCapabilities() const {
1222 return renderer_->Capabilities(); 1217 return renderer_->Capabilities();
1223 } 1218 }
1224 1219
1225 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { 1220 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) {
1226 if (frame.has_no_damage) 1221 if (frame.has_no_damage)
1227 return false; 1222 return false;
1228 renderer_->SwapBuffers(frame.latency_info); 1223 renderer_->SwapBuffers();
1229 active_tree_->ClearLatencyInfo(); 1224 active_tree_->ClearLatencyInfo();
piman 2013/06/10 19:52:25 Here as well, is there any potential trouble if we
1230 return true; 1225 return true;
1231 } 1226 }
1232 1227
1233 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) { 1228 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) {
1234 if (output_surface_) 1229 if (output_surface_)
1235 output_surface_->SetNeedsBeginFrame(enable); 1230 output_surface_->SetNeedsBeginFrame(enable);
1236 } 1231 }
1237 1232
1238 float LayerTreeHostImpl::DeviceScaleFactor() const { 1233 float LayerTreeHostImpl::DeviceScaleFactor() const {
1239 return device_scale_factor_; 1234 return device_scale_factor_;
(...skipping 21 matching lines...) Expand all
1261 } 1256 }
1262 1257
1263 void LayerTreeHostImpl::DidLoseOutputSurface() { 1258 void LayerTreeHostImpl::DidLoseOutputSurface() {
1264 // TODO(jamesr): The renderer_ check is needed to make some of the 1259 // TODO(jamesr): The renderer_ check is needed to make some of the
1265 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or 1260 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or
1266 // important) in production. We should adjust the test to not need this. 1261 // important) in production. We should adjust the test to not need this.
1267 if (renderer_) 1262 if (renderer_)
1268 client_->DidLoseOutputSurfaceOnImplThread(); 1263 client_->DidLoseOutputSurfaceOnImplThread();
1269 } 1264 }
1270 1265
1271 void LayerTreeHostImpl::OnSwapBuffersComplete() {
1272 client_->OnSwapBuffersCompleteOnImplThread();
1273 }
1274
1275 void LayerTreeHostImpl::Readback(void* pixels, 1266 void LayerTreeHostImpl::Readback(void* pixels,
1276 gfx::Rect rect_in_device_viewport) { 1267 gfx::Rect rect_in_device_viewport) {
1277 DCHECK(renderer_); 1268 DCHECK(renderer_);
1278 renderer_->GetFramebufferPixels(pixels, rect_in_device_viewport); 1269 renderer_->GetFramebufferPixels(pixels, rect_in_device_viewport);
1279 } 1270 }
1280 1271
1281 bool LayerTreeHostImpl::HaveRootScrollLayer() const { 1272 bool LayerTreeHostImpl::HaveRootScrollLayer() const {
1282 return !!RootScrollLayer(); 1273 return !!RootScrollLayer();
1283 } 1274 }
1284 1275
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 !is_deferred_init) { 1462 !is_deferred_init) {
1472 // TODO(joth): Defer creating the Renderer too, until GL is initialized. 1463 // TODO(joth): Defer creating the Renderer too, until GL is initialized.
1473 // See http://crbug.com/230197 1464 // See http://crbug.com/230197
1474 renderer_ = SoftwareRenderer::Create(this, output_surface.get(), NULL); 1465 renderer_ = SoftwareRenderer::Create(this, output_surface.get(), NULL);
1475 } else { 1466 } else {
1476 scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create( 1467 scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create(
1477 output_surface.get(), settings_.highp_threshold_min); 1468 output_surface.get(), settings_.highp_threshold_min);
1478 if (!resource_provider) 1469 if (!resource_provider)
1479 return false; 1470 return false;
1480 1471
1481 if (output_surface->capabilities().has_parent_compositor) { 1472 if (output_surface->capabilities().delegated_rendering) {
1482 renderer_ = DelegatingRenderer::Create(this, output_surface.get(), 1473 renderer_ = DelegatingRenderer::Create(this, output_surface.get(),
1483 resource_provider.get()); 1474 resource_provider.get());
1484 } else if (output_surface->context3d()) { 1475 } else if (output_surface->context3d()) {
1485 renderer_ = GLRenderer::Create(this, 1476 renderer_ = GLRenderer::Create(this,
1486 output_surface.get(), 1477 output_surface.get(),
1487 resource_provider.get(), 1478 resource_provider.get(),
1488 settings_.highp_threshold_min, 1479 settings_.highp_threshold_min,
1489 settings_.force_direct_layer_drawing); 1480 settings_.force_direct_layer_drawing);
1490 } else if (output_surface->software_device()) { 1481 } else if (output_surface->software_device()) {
1491 renderer_ = SoftwareRenderer::Create(this, 1482 renderer_ = SoftwareRenderer::Create(this,
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after
2312 } 2303 }
2313 2304
2314 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { 2305 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) {
2315 if (debug_state_.continuous_painting != debug_state.continuous_painting) 2306 if (debug_state_.continuous_painting != debug_state.continuous_painting)
2316 paint_time_counter_->ClearHistory(); 2307 paint_time_counter_->ClearHistory();
2317 2308
2318 debug_state_ = debug_state; 2309 debug_state_ = debug_state;
2319 } 2310 }
2320 2311
2321 } // namespace cc 2312 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698