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

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

Issue 1625473002: compositor-worker: blink->cc plumbing Base URL: https://chromium.googlesource.com/chromium/src.git@upstream-compositor-worker
Patch Set: Merge with landing of https://codereview.chromium.org/1599673002/ on master Created 4 years, 11 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 debug_rect_history_(DebugRectHistory::Create()), 219 debug_rect_history_(DebugRectHistory::Create()),
220 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())), 220 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())),
221 max_memory_needed_bytes_(0), 221 max_memory_needed_bytes_(0),
222 resourceless_software_draw_(false), 222 resourceless_software_draw_(false),
223 animation_registrar_(), 223 animation_registrar_(),
224 rendering_stats_instrumentation_(rendering_stats_instrumentation), 224 rendering_stats_instrumentation_(rendering_stats_instrumentation),
225 micro_benchmark_controller_(this), 225 micro_benchmark_controller_(this),
226 shared_bitmap_manager_(shared_bitmap_manager), 226 shared_bitmap_manager_(shared_bitmap_manager),
227 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 227 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
228 task_graph_runner_(task_graph_runner), 228 task_graph_runner_(task_graph_runner),
229 mutator_(nullptr),
229 id_(id), 230 id_(id),
230 requires_high_res_to_draw_(false), 231 requires_high_res_to_draw_(false),
231 is_likely_to_require_a_draw_(false), 232 is_likely_to_require_a_draw_(false),
232 frame_timing_tracker_(FrameTimingTracker::Create(this)) { 233 frame_timing_tracker_(FrameTimingTracker::Create(this)) {
233 if (settings.use_compositor_animation_timelines) { 234 if (settings.use_compositor_animation_timelines) {
234 if (settings.accelerated_animation_enabled) { 235 if (settings.accelerated_animation_enabled) {
235 animation_host_ = AnimationHost::Create(ThreadInstance::IMPL); 236 animation_host_ = AnimationHost::Create(ThreadInstance::IMPL);
236 animation_host_->SetMutatorHostClient(this); 237 animation_host_->SetMutatorHostClient(this);
237 animation_host_->SetSupportsScrollAnimations(SupportsImplScrolling()); 238 animation_host_->SetSupportsScrollAnimations(SupportsImplScrolling());
238 } 239 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 input_handler_client_->Animate(monotonic_time); 453 input_handler_client_->Animate(monotonic_time);
453 } 454 }
454 } 455 }
455 456
456 did_animate |= AnimatePageScale(monotonic_time); 457 did_animate |= AnimatePageScale(monotonic_time);
457 did_animate |= AnimateLayers(monotonic_time); 458 did_animate |= AnimateLayers(monotonic_time);
458 did_animate |= AnimateScrollbars(monotonic_time); 459 did_animate |= AnimateScrollbars(monotonic_time);
459 did_animate |= AnimateTopControls(monotonic_time); 460 did_animate |= AnimateTopControls(monotonic_time);
460 461
461 if (active_tree) { 462 if (active_tree) {
463 did_animate |= Mutate(monotonic_time);
464
462 // Animating stuff can change the root scroll offset, so inform the 465 // Animating stuff can change the root scroll offset, so inform the
463 // synchronous input handler. 466 // synchronous input handler.
464 UpdateRootLayerStateForSynchronousInputHandler(); 467 UpdateRootLayerStateForSynchronousInputHandler();
465 if (did_animate) { 468 if (did_animate) {
466 // If the tree changed, then we want to draw at the end of the current 469 // If the tree changed, then we want to draw at the end of the current
467 // frame. 470 // frame.
468 SetNeedsRedraw(); 471 SetNeedsRedraw();
469 } 472 }
470 } 473 }
471 } 474 }
472 475
476 bool LayerTreeHostImpl::Mutate(base::TimeTicks monotonic_time) {
477 if (!mutator_)
478 return false;
479 TRACE_EVENT0("compositor-worker", "LayerTreeHostImpl::Mutate");
480 if (mutator_->Mutate(monotonic_time, active_tree_.get()))
481 client_->SetNeedsOneBeginImplFrameOnImplThread();
482 return true;
483 }
484
485 void LayerTreeHostImpl::SetNeedsMutate() {
486 TRACE_EVENT0("compositor-worker", "LayerTreeHostImpl::SetNeedsMutate");
487 client_->SetNeedsOneBeginImplFrameOnImplThread();
488 }
489
473 bool LayerTreeHostImpl::PrepareTiles() { 490 bool LayerTreeHostImpl::PrepareTiles() {
474 if (!tile_priorities_dirty_) 491 if (!tile_priorities_dirty_)
475 return false; 492 return false;
476 493
477 client_->WillPrepareTiles(); 494 client_->WillPrepareTiles();
478 bool did_prepare_tiles = tile_manager_->PrepareTiles(global_tile_state_); 495 bool did_prepare_tiles = tile_manager_->PrepareTiles(global_tile_state_);
479 if (did_prepare_tiles) 496 if (did_prepare_tiles)
480 tile_priorities_dirty_ = false; 497 tile_priorities_dirty_ = false;
481 client_->DidPrepareTiles(); 498 client_->DidPrepareTiles();
482 return did_prepare_tiles; 499 return did_prepare_tiles;
(...skipping 1570 matching lines...) Expand 10 before | Expand all | Expand 10 after
2053 // tree, rename the pending tree the recycle tree so we can reuse it on the 2070 // tree, rename the pending tree the recycle tree so we can reuse it on the
2054 // next sync. 2071 // next sync.
2055 DCHECK(!recycle_tree_); 2072 DCHECK(!recycle_tree_);
2056 pending_tree_.swap(recycle_tree_); 2073 pending_tree_.swap(recycle_tree_);
2057 2074
2058 UpdateViewportContainerSizes(); 2075 UpdateViewportContainerSizes();
2059 2076
2060 // If we commit to the active tree directly, this is already done during 2077 // If we commit to the active tree directly, this is already done during
2061 // commit. 2078 // commit.
2062 ActivateAnimations(); 2079 ActivateAnimations();
2080 Mutate(CurrentBeginFrameArgs().frame_time);
2063 } else { 2081 } else {
2064 active_tree_->ProcessUIResourceRequestQueue(); 2082 active_tree_->ProcessUIResourceRequestQueue();
2065 } 2083 }
2066 2084
2067 // bounds_delta isn't a pushed property, so the newly-pushed property tree 2085 // bounds_delta isn't a pushed property, so the newly-pushed property tree
2068 // won't already account for current bounds_delta values. 2086 // won't already account for current bounds_delta values.
2069 active_tree_->UpdatePropertyTreesForBoundsDelta(); 2087 active_tree_->UpdatePropertyTreesForBoundsDelta();
2070 active_tree_->DidBecomeActive(); 2088 active_tree_->DidBecomeActive();
2071 client_->RenewTreePriority(); 2089 client_->RenewTreePriority();
2072 // If we have any picture layers, then by activating we also modified tile 2090 // If we have any picture layers, then by activating we also modified tile
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
2303 request_ids, start_time, end_time, active_tree_->source_frame_number()); 2321 request_ids, start_time, end_time, active_tree_->source_frame_number());
2304 } 2322 }
2305 2323
2306 void LayerTreeHostImpl::PostFrameTimingEvents( 2324 void LayerTreeHostImpl::PostFrameTimingEvents(
2307 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, 2325 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
2308 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { 2326 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
2309 client_->PostFrameTimingEventsOnImplThread(std::move(composite_events), 2327 client_->PostFrameTimingEventsOnImplThread(std::move(composite_events),
2310 std::move(main_frame_events)); 2328 std::move(main_frame_events));
2311 } 2329 }
2312 2330
2331 void LayerTreeHostImpl::SetLayerTreeMutator(LayerTreeMutator* mutator) {
2332 if (mutator == mutator_)
2333 return;
2334 TRACE_EVENT0("compositor-worker", "LayerTreeHostImpl::SetLayerTreeMutator");
2335 mutator_ = mutator;
2336 mutator_->SetClient(this);
2337 }
2338
2313 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() { 2339 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() {
2314 ClearUIResources(); 2340 ClearUIResources();
2315 tile_manager_->FinishTasksAndCleanUp(); 2341 tile_manager_->FinishTasksAndCleanUp();
2316 resource_pool_ = nullptr; 2342 resource_pool_ = nullptr;
2317 tile_task_worker_pool_ = nullptr; 2343 tile_task_worker_pool_ = nullptr;
2318 single_thread_synchronous_task_graph_runner_ = nullptr; 2344 single_thread_synchronous_task_graph_runner_ = nullptr;
2319 } 2345 }
2320 2346
2321 void LayerTreeHostImpl::ReleaseOutputSurface() { 2347 void LayerTreeHostImpl::ReleaseOutputSurface() {
2322 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface"); 2348 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface");
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
2974 scroll_result.did_overscroll_root = !unused_root_delta.IsZero(); 3000 scroll_result.did_overscroll_root = !unused_root_delta.IsZero();
2975 scroll_result.accumulated_root_overscroll = accumulated_root_overscroll_; 3001 scroll_result.accumulated_root_overscroll = accumulated_root_overscroll_;
2976 scroll_result.unused_scroll_delta = unused_root_delta; 3002 scroll_result.unused_scroll_delta = unused_root_delta;
2977 3003
2978 if (scroll_result.did_scroll) { 3004 if (scroll_result.did_scroll) {
2979 // Scrolling can change the root scroll offset, so inform the synchronous 3005 // Scrolling can change the root scroll offset, so inform the synchronous
2980 // input handler. 3006 // input handler.
2981 UpdateRootLayerStateForSynchronousInputHandler(); 3007 UpdateRootLayerStateForSynchronousInputHandler();
2982 } 3008 }
2983 3009
3010 // Update compositor worker mutations which may respond to scrolling.
3011 Mutate(CurrentBeginFrameArgs().frame_time);
3012
2984 return scroll_result; 3013 return scroll_result;
2985 } 3014 }
2986 3015
2987 // This implements scrolling by page as described here: 3016 // This implements scrolling by page as described here:
2988 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms645601(v=vs.85).asp x#_win32_The_Mouse_Wheel 3017 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms645601(v=vs.85).asp x#_win32_The_Mouse_Wheel
2989 // for events with WHEEL_PAGESCROLL set. 3018 // for events with WHEEL_PAGESCROLL set.
2990 bool LayerTreeHostImpl::ScrollVerticallyByPage(const gfx::Point& viewport_point, 3019 bool LayerTreeHostImpl::ScrollVerticallyByPage(const gfx::Point& viewport_point,
2991 ScrollDirection direction) { 3020 ScrollDirection direction) {
2992 DCHECK(wheel_scrolling_); 3021 DCHECK(wheel_scrolling_);
2993 3022
(...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after
3902 return task_runner_provider_->HasImplThread(); 3931 return task_runner_provider_->HasImplThread();
3903 } 3932 }
3904 3933
3905 bool LayerTreeHostImpl::CommitToActiveTree() const { 3934 bool LayerTreeHostImpl::CommitToActiveTree() const {
3906 // In single threaded mode we skip the pending tree and commit directly to the 3935 // In single threaded mode we skip the pending tree and commit directly to the
3907 // active tree. 3936 // active tree.
3908 return !task_runner_provider_->HasImplThread(); 3937 return !task_runner_provider_->HasImplThread();
3909 } 3938 }
3910 3939
3911 } // namespace cc 3940 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698