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

Side by Side Diff: ui/compositor/compositor.cc

Issue 1405613002: Support vsync-aligned wheel event dispatch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@input_cleanup_todo
Patch Set: Rebase Created 5 years, 2 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 | « ui/compositor/compositor.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/compositor/compositor.h" 5 #include "ui/compositor/compositor.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 187
188 CancelCompositorLock(); 188 CancelCompositorLock();
189 DCHECK(!compositor_lock_); 189 DCHECK(!compositor_lock_);
190 190
191 FOR_EACH_OBSERVER(CompositorObserver, observer_list_, 191 FOR_EACH_OBSERVER(CompositorObserver, observer_list_,
192 OnCompositingShuttingDown(this)); 192 OnCompositingShuttingDown(this));
193 193
194 FOR_EACH_OBSERVER(CompositorAnimationObserver, animation_observer_list_, 194 FOR_EACH_OBSERVER(CompositorAnimationObserver, animation_observer_list_,
195 OnCompositingShuttingDown(this)); 195 OnCompositingShuttingDown(this));
196 196
197 DCHECK(begin_frame_observer_list_.empty());
198
199 if (root_layer_) 197 if (root_layer_)
200 root_layer_->ResetCompositor(); 198 root_layer_->ResetCompositor();
201 199
202 // Stop all outstanding draws before telling the ContextFactory to tear 200 // Stop all outstanding draws before telling the ContextFactory to tear
203 // down any contexts that the |host_| may rely upon. 201 // down any contexts that the |host_| may rely upon.
204 host_.reset(); 202 host_.reset();
205 203
206 context_factory_->RemoveCompositor(this); 204 context_factory_->RemoveCompositor(this);
207 } 205 }
208 206
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 CompositorAnimationObserver* observer) { 350 CompositorAnimationObserver* observer) {
353 animation_observer_list_.RemoveObserver(observer); 351 animation_observer_list_.RemoveObserver(observer);
354 } 352 }
355 353
356 bool Compositor::HasAnimationObserver( 354 bool Compositor::HasAnimationObserver(
357 const CompositorAnimationObserver* observer) const { 355 const CompositorAnimationObserver* observer) const {
358 return animation_observer_list_.HasObserver(observer); 356 return animation_observer_list_.HasObserver(observer);
359 } 357 }
360 358
361 void Compositor::AddBeginFrameObserver(CompositorBeginFrameObserver* observer) { 359 void Compositor::AddBeginFrameObserver(CompositorBeginFrameObserver* observer) {
362 DCHECK(std::find(begin_frame_observer_list_.begin(), 360 if (!begin_frame_observer_list_.might_have_observers())
363 begin_frame_observer_list_.end(), observer) == 361 host_->SetChildrenNeedBeginFrames(true);
364 begin_frame_observer_list_.end());
365 362
366 if (begin_frame_observer_list_.empty()) 363 begin_frame_observer_list_.AddObserver(observer);
367 host_->SetChildrenNeedBeginFrames(true);
368 364
369 if (missed_begin_frame_args_.IsValid()) 365 if (missed_begin_frame_args_.IsValid())
370 observer->OnSendBeginFrame(missed_begin_frame_args_); 366 observer->OnSendBeginFrame(missed_begin_frame_args_);
371
372 begin_frame_observer_list_.push_back(observer);
373 } 367 }
374 368
375 void Compositor::RemoveBeginFrameObserver( 369 void Compositor::RemoveBeginFrameObserver(
376 CompositorBeginFrameObserver* observer) { 370 CompositorBeginFrameObserver* observer) {
377 auto it = std::find(begin_frame_observer_list_.begin(), 371 begin_frame_observer_list_.RemoveObserver(observer);
378 begin_frame_observer_list_.end(), observer);
379 DCHECK(it != begin_frame_observer_list_.end());
380 begin_frame_observer_list_.erase(it);
381 372
382 if (begin_frame_observer_list_.empty()) { 373 if (!begin_frame_observer_list_.might_have_observers()) {
383 host_->SetChildrenNeedBeginFrames(false); 374 host_->SetChildrenNeedBeginFrames(false);
384 missed_begin_frame_args_ = cc::BeginFrameArgs(); 375 missed_begin_frame_args_ = cc::BeginFrameArgs();
385 } 376 }
386 } 377 }
387 378
388 void Compositor::BeginMainFrame(const cc::BeginFrameArgs& args) { 379 void Compositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
389 FOR_EACH_OBSERVER(CompositorAnimationObserver, 380 FOR_EACH_OBSERVER(CompositorAnimationObserver,
390 animation_observer_list_, 381 animation_observer_list_,
391 OnAnimationStep(args.frame_time)); 382 OnAnimationStep(args.frame_time));
392 if (animation_observer_list_.might_have_observers()) 383 if (animation_observer_list_.might_have_observers())
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 OnCompositingStarted(this, start_time)); 436 OnCompositingStarted(this, start_time));
446 } 437 }
447 438
448 void Compositor::DidAbortSwapBuffers() { 439 void Compositor::DidAbortSwapBuffers() {
449 FOR_EACH_OBSERVER(CompositorObserver, 440 FOR_EACH_OBSERVER(CompositorObserver,
450 observer_list_, 441 observer_list_,
451 OnCompositingAborted(this)); 442 OnCompositingAborted(this));
452 } 443 }
453 444
454 void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) { 445 void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) {
455 for (auto observer : begin_frame_observer_list_) 446 FOR_EACH_OBSERVER(CompositorBeginFrameObserver, begin_frame_observer_list_,
456 observer->OnSendBeginFrame(args); 447 OnSendBeginFrame(args));
457 448
458 missed_begin_frame_args_ = args; 449 missed_begin_frame_args_ = args;
459 missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; 450 missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED;
460 } 451 }
461 452
462 const cc::LayerTreeDebugState& Compositor::GetLayerTreeDebugState() const { 453 const cc::LayerTreeDebugState& Compositor::GetLayerTreeDebugState() const {
463 return host_->debug_state(); 454 return host_->debug_state();
464 } 455 }
465 456
466 void Compositor::SetLayerTreeDebugState( 457 void Compositor::SetLayerTreeDebugState(
(...skipping 24 matching lines...) Expand all
491 observer_list_, 482 observer_list_,
492 OnCompositingLockStateChanged(this)); 483 OnCompositingLockStateChanged(this));
493 } 484 }
494 485
495 void Compositor::CancelCompositorLock() { 486 void Compositor::CancelCompositorLock() {
496 if (compositor_lock_) 487 if (compositor_lock_)
497 compositor_lock_->CancelLock(); 488 compositor_lock_->CancelLock();
498 } 489 }
499 490
500 } // namespace ui 491 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/compositor.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698