OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |