| 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(); |
| 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 { |
| (...skipping 22 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 |