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 915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 device_viewport_damage_rect.Union(viewport_damage_rect_); | 926 device_viewport_damage_rect.Union(viewport_damage_rect_); |
927 viewport_damage_rect_ = gfx::Rect(); | 927 viewport_damage_rect_ = gfx::Rect(); |
928 | 928 |
929 active_tree_->root_layer()->render_surface()->damage_tracker()-> | 929 active_tree_->root_layer()->render_surface()->damage_tracker()-> |
930 AddDamageNextUpdate(device_viewport_damage_rect); | 930 AddDamageNextUpdate(device_viewport_damage_rect); |
931 } | 931 } |
932 | 932 |
933 if (!CalculateRenderPasses(frame)) | 933 if (!CalculateRenderPasses(frame)) |
934 return false; | 934 return false; |
935 | 935 |
936 frame->latency_info = active_tree_->GetLatencyInfo(); | |
937 | |
938 // If we return true, then we expect DrawLayers() to be called before this | 936 // If we return true, then we expect DrawLayers() to be called before this |
939 // function is called again. | 937 // function is called again. |
940 return true; | 938 return true; |
941 } | 939 } |
942 | 940 |
943 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( | 941 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( |
944 const ManagedMemoryPolicy& policy) { | 942 const ManagedMemoryPolicy& policy) { |
945 | 943 |
946 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread( | 944 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread( |
947 visible_ ? policy.bytes_limit_when_visible | 945 visible_ ? policy.bytes_limit_when_visible |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1061 | 1059 |
1062 void LayerTreeHostImpl::OnVSyncParametersChanged(base::TimeTicks timebase, | 1060 void LayerTreeHostImpl::OnVSyncParametersChanged(base::TimeTicks timebase, |
1063 base::TimeDelta interval) { | 1061 base::TimeDelta interval) { |
1064 client_->OnVSyncParametersChanged(timebase, interval); | 1062 client_->OnVSyncParametersChanged(timebase, interval); |
1065 } | 1063 } |
1066 | 1064 |
1067 void LayerTreeHostImpl::BeginFrame(base::TimeTicks frame_time) { | 1065 void LayerTreeHostImpl::BeginFrame(base::TimeTicks frame_time) { |
1068 client_->BeginFrameOnImplThread(frame_time); | 1066 client_->BeginFrameOnImplThread(frame_time); |
1069 } | 1067 } |
1070 | 1068 |
1071 void LayerTreeHostImpl::OnSendFrameToParentCompositorAck( | 1069 void LayerTreeHostImpl::OnSwapBuffersComplete( |
1072 const CompositorFrameAck& ack) { | 1070 const CompositorFrameAck* ack) { |
1073 if (!renderer_) | |
1074 return; | |
1075 | |
1076 // TODO(piman): We may need to do some validation on this ack before | 1071 // TODO(piman): We may need to do some validation on this ack before |
1077 // processing it. | 1072 // processing it. |
1078 renderer_->ReceiveCompositorFrameAck(ack); | 1073 if (ack && renderer_) |
| 1074 renderer_->ReceiveSwapBuffersAck(*ack); |
1079 | 1075 |
1080 // When using compositor frame data, the ack doubles as a swap complete ack. | 1076 client_->OnSwapBuffersCompleteOnImplThread(); |
1081 OnSwapBuffersComplete(); | |
1082 } | 1077 } |
1083 | 1078 |
1084 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { | 1079 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { |
1085 client_->OnCanDrawStateChanged(CanDraw()); | 1080 client_->OnCanDrawStateChanged(CanDraw()); |
1086 } | 1081 } |
1087 | 1082 |
1088 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { | 1083 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { |
1089 CompositorFrameMetadata metadata; | 1084 CompositorFrameMetadata metadata; |
1090 metadata.device_scale_factor = device_scale_factor_; | 1085 metadata.device_scale_factor = device_scale_factor_; |
1091 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); | 1086 metadata.page_scale_factor = active_tree_->total_page_scale_factor(); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1223 return renderer_ && renderer_->IsContextLost(); | 1218 return renderer_ && renderer_->IsContextLost(); |
1224 } | 1219 } |
1225 | 1220 |
1226 const RendererCapabilities& LayerTreeHostImpl::GetRendererCapabilities() const { | 1221 const RendererCapabilities& LayerTreeHostImpl::GetRendererCapabilities() const { |
1227 return renderer_->Capabilities(); | 1222 return renderer_->Capabilities(); |
1228 } | 1223 } |
1229 | 1224 |
1230 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { | 1225 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { |
1231 if (frame.has_no_damage) | 1226 if (frame.has_no_damage) |
1232 return false; | 1227 return false; |
1233 renderer_->SwapBuffers(frame.latency_info); | 1228 renderer_->SwapBuffers(); |
1234 active_tree_->ClearLatencyInfo(); | 1229 active_tree_->ClearLatencyInfo(); |
1235 return true; | 1230 return true; |
1236 } | 1231 } |
1237 | 1232 |
1238 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) { | 1233 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) { |
1239 if (output_surface_) | 1234 if (output_surface_) |
1240 output_surface_->SetNeedsBeginFrame(enable); | 1235 output_surface_->SetNeedsBeginFrame(enable); |
1241 } | 1236 } |
1242 | 1237 |
1243 float LayerTreeHostImpl::DeviceScaleFactor() const { | 1238 float LayerTreeHostImpl::DeviceScaleFactor() const { |
(...skipping 22 matching lines...) Expand all Loading... |
1266 } | 1261 } |
1267 | 1262 |
1268 void LayerTreeHostImpl::DidLoseOutputSurface() { | 1263 void LayerTreeHostImpl::DidLoseOutputSurface() { |
1269 // TODO(jamesr): The renderer_ check is needed to make some of the | 1264 // TODO(jamesr): The renderer_ check is needed to make some of the |
1270 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or | 1265 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or |
1271 // important) in production. We should adjust the test to not need this. | 1266 // important) in production. We should adjust the test to not need this. |
1272 if (renderer_) | 1267 if (renderer_) |
1273 client_->DidLoseOutputSurfaceOnImplThread(); | 1268 client_->DidLoseOutputSurfaceOnImplThread(); |
1274 } | 1269 } |
1275 | 1270 |
1276 void LayerTreeHostImpl::OnSwapBuffersComplete() { | |
1277 client_->OnSwapBuffersCompleteOnImplThread(); | |
1278 } | |
1279 | |
1280 void LayerTreeHostImpl::Readback(void* pixels, | 1271 void LayerTreeHostImpl::Readback(void* pixels, |
1281 gfx::Rect rect_in_device_viewport) { | 1272 gfx::Rect rect_in_device_viewport) { |
1282 DCHECK(renderer_); | 1273 DCHECK(renderer_); |
1283 renderer_->GetFramebufferPixels(pixels, rect_in_device_viewport); | 1274 renderer_->GetFramebufferPixels(pixels, rect_in_device_viewport); |
1284 } | 1275 } |
1285 | 1276 |
1286 bool LayerTreeHostImpl::HaveRootScrollLayer() const { | 1277 bool LayerTreeHostImpl::HaveRootScrollLayer() const { |
1287 return !!RootScrollLayer(); | 1278 return !!RootScrollLayer(); |
1288 } | 1279 } |
1289 | 1280 |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1476 !is_deferred_init) { | 1467 !is_deferred_init) { |
1477 // TODO(joth): Defer creating the Renderer too, until GL is initialized. | 1468 // TODO(joth): Defer creating the Renderer too, until GL is initialized. |
1478 // See http://crbug.com/230197 | 1469 // See http://crbug.com/230197 |
1479 renderer_ = SoftwareRenderer::Create(this, output_surface.get(), NULL); | 1470 renderer_ = SoftwareRenderer::Create(this, output_surface.get(), NULL); |
1480 } else { | 1471 } else { |
1481 scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create( | 1472 scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create( |
1482 output_surface.get(), settings_.highp_threshold_min); | 1473 output_surface.get(), settings_.highp_threshold_min); |
1483 if (!resource_provider) | 1474 if (!resource_provider) |
1484 return false; | 1475 return false; |
1485 | 1476 |
1486 if (output_surface->capabilities().has_parent_compositor) { | 1477 if (output_surface->capabilities().delegated_rendering) { |
1487 renderer_ = DelegatingRenderer::Create(this, output_surface.get(), | 1478 renderer_ = DelegatingRenderer::Create(this, output_surface.get(), |
1488 resource_provider.get()); | 1479 resource_provider.get()); |
1489 } else if (output_surface->context3d()) { | 1480 } else if (output_surface->context3d()) { |
1490 renderer_ = GLRenderer::Create(this, | 1481 renderer_ = GLRenderer::Create(this, |
1491 output_surface.get(), | 1482 output_surface.get(), |
1492 resource_provider.get(), | 1483 resource_provider.get(), |
1493 settings_.highp_threshold_min, | 1484 settings_.highp_threshold_min, |
1494 settings_.force_direct_layer_drawing); | 1485 settings_.force_direct_layer_drawing); |
1495 } else if (output_surface->software_device()) { | 1486 } else if (output_surface->software_device()) { |
1496 renderer_ = SoftwareRenderer::Create(this, | 1487 renderer_ = SoftwareRenderer::Create(this, |
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2317 } | 2308 } |
2318 | 2309 |
2319 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { | 2310 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { |
2320 if (debug_state_.continuous_painting != debug_state.continuous_painting) | 2311 if (debug_state_.continuous_painting != debug_state.continuous_painting) |
2321 paint_time_counter_->ClearHistory(); | 2312 paint_time_counter_->ClearHistory(); |
2322 | 2313 |
2323 debug_state_ = debug_state; | 2314 debug_state_ = debug_state; |
2324 } | 2315 } |
2325 | 2316 |
2326 } // namespace cc | 2317 } // namespace cc |
OLD | NEW |