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 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 pinch_gesture_active_(false), | 233 pinch_gesture_active_(false), |
234 pinch_gesture_end_should_clear_scrolling_layer_(false), | 234 pinch_gesture_end_should_clear_scrolling_layer_(false), |
235 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), | 235 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), |
236 paint_time_counter_(PaintTimeCounter::Create()), | 236 paint_time_counter_(PaintTimeCounter::Create()), |
237 memory_history_(MemoryHistory::Create()), | 237 memory_history_(MemoryHistory::Create()), |
238 debug_rect_history_(DebugRectHistory::Create()), | 238 debug_rect_history_(DebugRectHistory::Create()), |
239 texture_mailbox_deleter_(new TextureMailboxDeleter( | 239 texture_mailbox_deleter_(new TextureMailboxDeleter( |
240 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 240 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
241 : proxy_->MainThreadTaskRunner())), | 241 : proxy_->MainThreadTaskRunner())), |
242 max_memory_needed_bytes_(0), | 242 max_memory_needed_bytes_(0), |
243 last_sent_memory_visible_bytes_(0), | |
244 last_sent_memory_visible_and_nearby_bytes_(0), | |
245 last_sent_memory_use_bytes_(0), | |
246 zero_budget_(false), | 243 zero_budget_(false), |
247 device_scale_factor_(1.f), | 244 device_scale_factor_(1.f), |
248 overhang_ui_resource_id_(0), | 245 overhang_ui_resource_id_(0), |
249 overdraw_bottom_height_(0.f), | 246 overdraw_bottom_height_(0.f), |
250 device_viewport_valid_for_tile_management_(true), | 247 device_viewport_valid_for_tile_management_(true), |
251 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), | 248 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), |
252 animation_registrar_(AnimationRegistrar::Create()), | 249 animation_registrar_(AnimationRegistrar::Create()), |
253 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 250 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
254 micro_benchmark_controller_(this), | 251 micro_benchmark_controller_(this), |
255 need_to_update_visible_tiles_before_draw_(false), | 252 need_to_update_visible_tiles_before_draw_(false), |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 active_tree_->ProcessUIResourceRequestQueue(); | 340 active_tree_->ProcessUIResourceRequestQueue(); |
344 active_tree_->DidBecomeActive(); | 341 active_tree_->DidBecomeActive(); |
345 | 342 |
346 ActivateAnimations(); | 343 ActivateAnimations(); |
347 | 344 |
348 active_tree_->set_needs_update_draw_properties(); | 345 active_tree_->set_needs_update_draw_properties(); |
349 if (time_source_client_adapter_ && time_source_client_adapter_->Active()) | 346 if (time_source_client_adapter_ && time_source_client_adapter_->Active()) |
350 DCHECK(active_tree_->root_layer()); | 347 DCHECK(active_tree_->root_layer()); |
351 } | 348 } |
352 | 349 |
353 client_->SendManagedMemoryStats(); | |
354 | |
355 micro_benchmark_controller_.DidCompleteCommit(); | 350 micro_benchmark_controller_.DidCompleteCommit(); |
356 } | 351 } |
357 | 352 |
358 bool LayerTreeHostImpl::CanDraw() const { | 353 bool LayerTreeHostImpl::CanDraw() const { |
359 // Note: If you are changing this function or any other function that might | 354 // Note: If you are changing this function or any other function that might |
360 // affect the result of CanDraw, make sure to call | 355 // affect the result of CanDraw, make sure to call |
361 // client_->OnCanDrawStateChanged in the proper places and update the | 356 // client_->OnCanDrawStateChanged in the proper places and update the |
362 // NotifyIfCanDrawChanged test. | 357 // NotifyIfCanDrawChanged test. |
363 | 358 |
364 if (!renderer_) { | 359 if (!renderer_) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 | 413 |
419 void LayerTreeHostImpl::ManageTiles() { | 414 void LayerTreeHostImpl::ManageTiles() { |
420 if (!tile_manager_) | 415 if (!tile_manager_) |
421 return; | 416 return; |
422 if (!tile_priorities_dirty_) | 417 if (!tile_priorities_dirty_) |
423 return; | 418 return; |
424 | 419 |
425 tile_priorities_dirty_ = false; | 420 tile_priorities_dirty_ = false; |
426 tile_manager_->ManageTiles(global_tile_state_); | 421 tile_manager_->ManageTiles(global_tile_state_); |
427 | 422 |
428 size_t memory_required_bytes; | |
429 size_t memory_nice_to_have_bytes; | |
430 size_t memory_allocated_bytes; | |
431 size_t memory_used_bytes; | |
432 tile_manager_->GetMemoryStats(&memory_required_bytes, | |
433 &memory_nice_to_have_bytes, | |
434 &memory_allocated_bytes, | |
435 &memory_used_bytes); | |
436 SendManagedMemoryStats(memory_required_bytes, | |
437 memory_nice_to_have_bytes, | |
438 memory_used_bytes); | |
439 | |
440 client_->DidManageTiles(); | 423 client_->DidManageTiles(); |
441 } | 424 } |
442 | 425 |
443 void LayerTreeHostImpl::StartPageScaleAnimation( | 426 void LayerTreeHostImpl::StartPageScaleAnimation( |
444 const gfx::Vector2d& target_offset, | 427 const gfx::Vector2d& target_offset, |
445 bool anchor_point, | 428 bool anchor_point, |
446 float page_scale, | 429 float page_scale, |
447 base::TimeDelta duration) { | 430 base::TimeDelta duration) { |
448 if (!InnerViewportScrollLayer()) | 431 if (!InnerViewportScrollLayer()) |
449 return; | 432 return; |
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1167 visible_ ? policy.priority_cutoff_when_visible | 1150 visible_ ? policy.priority_cutoff_when_visible |
1168 : gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING)); | 1151 : gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING)); |
1169 if (evicted_resources) { | 1152 if (evicted_resources) { |
1170 active_tree_->SetContentsTexturesPurged(); | 1153 active_tree_->SetContentsTexturesPurged(); |
1171 if (pending_tree_) | 1154 if (pending_tree_) |
1172 pending_tree_->SetContentsTexturesPurged(); | 1155 pending_tree_->SetContentsTexturesPurged(); |
1173 client_->SetNeedsCommitOnImplThread(); | 1156 client_->SetNeedsCommitOnImplThread(); |
1174 client_->OnCanDrawStateChanged(CanDraw()); | 1157 client_->OnCanDrawStateChanged(CanDraw()); |
1175 client_->RenewTreePriority(); | 1158 client_->RenewTreePriority(); |
1176 } | 1159 } |
1177 client_->SendManagedMemoryStats(); | |
1178 | 1160 |
1179 UpdateTileManagerMemoryPolicy(policy); | 1161 UpdateTileManagerMemoryPolicy(policy); |
1180 } | 1162 } |
1181 | 1163 |
1182 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( | 1164 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( |
1183 const ManagedMemoryPolicy& policy) { | 1165 const ManagedMemoryPolicy& policy) { |
1184 if (!tile_manager_) | 1166 if (!tile_manager_) |
1185 return; | 1167 return; |
1186 | 1168 |
1187 global_tile_state_.hard_memory_limit_in_bytes = 0; | 1169 global_tile_state_.hard_memory_limit_in_bytes = 0; |
(...skipping 1707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2895 base::JSONWriter::WriteWithOptions( | 2877 base::JSONWriter::WriteWithOptions( |
2896 json.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &str); | 2878 json.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &str); |
2897 } | 2879 } |
2898 return str; | 2880 return str; |
2899 } | 2881 } |
2900 | 2882 |
2901 int LayerTreeHostImpl::SourceAnimationFrameNumber() const { | 2883 int LayerTreeHostImpl::SourceAnimationFrameNumber() const { |
2902 return fps_counter_->current_frame_number(); | 2884 return fps_counter_->current_frame_number(); |
2903 } | 2885 } |
2904 | 2886 |
2905 void LayerTreeHostImpl::SendManagedMemoryStats( | |
2906 size_t memory_visible_bytes, | |
2907 size_t memory_visible_and_nearby_bytes, | |
2908 size_t memory_use_bytes) { | |
2909 if (!renderer_) | |
2910 return; | |
2911 | |
2912 // Round the numbers being sent up to the next 8MB, to throttle the rate | |
2913 // at which we spam the GPU process. | |
2914 static const size_t rounding_step = 8 * 1024 * 1024; | |
2915 memory_visible_bytes = RoundUp(memory_visible_bytes, rounding_step); | |
2916 memory_visible_and_nearby_bytes = RoundUp(memory_visible_and_nearby_bytes, | |
2917 rounding_step); | |
2918 memory_use_bytes = RoundUp(memory_use_bytes, rounding_step); | |
2919 if (last_sent_memory_visible_bytes_ == memory_visible_bytes && | |
2920 last_sent_memory_visible_and_nearby_bytes_ == | |
2921 memory_visible_and_nearby_bytes && | |
2922 last_sent_memory_use_bytes_ == memory_use_bytes) { | |
2923 return; | |
2924 } | |
2925 last_sent_memory_visible_bytes_ = memory_visible_bytes; | |
2926 last_sent_memory_visible_and_nearby_bytes_ = memory_visible_and_nearby_bytes; | |
2927 last_sent_memory_use_bytes_ = memory_use_bytes; | |
2928 | |
2929 renderer_->SendManagedMemoryStats(last_sent_memory_visible_bytes_, | |
2930 last_sent_memory_visible_and_nearby_bytes_, | |
2931 last_sent_memory_use_bytes_); | |
2932 } | |
2933 | |
2934 void LayerTreeHostImpl::AnimateScrollbars(base::TimeTicks time) { | 2887 void LayerTreeHostImpl::AnimateScrollbars(base::TimeTicks time) { |
2935 AnimateScrollbarsRecursive(active_tree_->root_layer(), time); | 2888 AnimateScrollbarsRecursive(active_tree_->root_layer(), time); |
2936 } | 2889 } |
2937 | 2890 |
2938 void LayerTreeHostImpl::AnimateScrollbarsRecursive(LayerImpl* layer, | 2891 void LayerTreeHostImpl::AnimateScrollbarsRecursive(LayerImpl* layer, |
2939 base::TimeTicks time) { | 2892 base::TimeTicks time) { |
2940 if (!layer) | 2893 if (!layer) |
2941 return; | 2894 return; |
2942 | 2895 |
2943 ScrollbarAnimationController* scrollbar_controller = | 2896 ScrollbarAnimationController* scrollbar_controller = |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3153 } | 3106 } |
3154 | 3107 |
3155 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3108 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3156 std::vector<PictureLayerImpl*>::iterator it = | 3109 std::vector<PictureLayerImpl*>::iterator it = |
3157 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3110 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3158 DCHECK(it != picture_layers_.end()); | 3111 DCHECK(it != picture_layers_.end()); |
3159 picture_layers_.erase(it); | 3112 picture_layers_.erase(it); |
3160 } | 3113 } |
3161 | 3114 |
3162 } // namespace cc | 3115 } // namespace cc |
OLD | NEW |