Chromium Code Reviews

Side by Side Diff: cc/scheduler/begin_frame_manager.cc

Issue 423773002: Unified BeginFrame scheduling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: WIP in mac and android Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cc/scheduler/begin_frame_manager.h"
6
7 namespace cc {
8
9 BeginFrameManager::BeginFrameManager() : delegate_(NULL),
10 num_of_observers_(0) {}
11
12 BeginFrameManager::~BeginFrameManager() {
13 DCHECK_EQ(0, num_of_observers_);
14 }
15
16 void BeginFrameManager::SendBeginFrameToChildren(const BeginFrameArgs& args) {
17 DCHECK(CalledOnValidThread());
18 FOR_EACH_OBSERVER(Observer,
19 observer_list_,
20 OnSendBeginFrame(args));
21 last_begin_frame_args_ = args;
22 }
23
24 void BeginFrameManager::SetAuthoritativeVSyncInterval(
25 base::TimeDelta interval) const {
26 DCHECK(delegate_);
27 delegate_->SetAuthoritativeVSyncInterval(interval);
28 }
29
30 void BeginFrameManager::AddObserver(
31 Observer* observer,
32 const BeginFrameArgs& last_begin_frame_args_sent_to_observer) {
33 DCHECK(CalledOnValidThread());
34 DCHECK_GE(num_of_observers_, 0);
35
36 observer_list_.AddObserver(observer);
37 if (++num_of_observers_ == 1)
38 delegate_->SetChildrenNeedBeginFrames(true);
39
40 // If |last_begin_frame_args_| is still effective, send it to the new
41 // |observer| immediately.
42 if (!last_begin_frame_args_sent_to_observer.deadline.is_null() &&
43 last_begin_frame_args_sent_to_observer != last_begin_frame_args_ &&
44 last_begin_frame_args_.deadline > base::TimeTicks::Now())
45 observer->OnSendBeginFrame(last_begin_frame_args_);
46 }
47
48 void BeginFrameManager::RemoveObserver(Observer* observer) {
49 DCHECK(CalledOnValidThread());
50 DCHECK_GE(num_of_observers_, 1);
51
52 observer_list_.RemoveObserver(observer);
53 if (--num_of_observers_ == 0)
54 delegate_->SetChildrenNeedBeginFrames(false);
55 }
56
57 } // namespace cc
OLDNEW

Powered by Google App Engine