OLD | NEW |
---|---|
(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 { | |
8 bool IsSameBeginFrameArgs(const cc::BeginFrameArgs arg1, | |
brianderson
2014/08/27 01:34:07
Can you move this to begin_frame_args.h, take in c
simonhong
2014/08/27 07:56:12
Done.
| |
9 const cc::BeginFrameArgs arg2) { | |
10 return (arg1.frame_time == arg2.frame_time && | |
11 arg1.deadline == arg2.deadline && | |
12 arg1.interval == arg2.interval); | |
13 } | |
14 } | |
15 | |
16 namespace cc { | |
17 | |
18 BeginFrameManager::BeginFrameManager() : delegate_(NULL), | |
19 num_of_observers_(0) {} | |
20 | |
21 BeginFrameManager::~BeginFrameManager() { | |
22 DCHECK_EQ(0, num_of_observers_); | |
23 } | |
24 | |
25 void BeginFrameManager::SendBeginFrameToChildren(const BeginFrameArgs& args) { | |
26 DCHECK(CalledOnValidThread()); | |
27 FOR_EACH_OBSERVER(Observer, | |
28 observer_list_, | |
29 OnSendBeginFrame(args)); | |
30 last_begin_frame_args_ = args; | |
31 } | |
32 | |
33 void BeginFrameManager::SetAuthoritativeVSyncInterval( | |
34 base::TimeDelta interval) const { | |
35 DCHECK(delegate_); | |
36 delegate_->SetAuthoritativeVSyncInterval(interval); | |
37 } | |
38 | |
39 void BeginFrameManager::AddObserver( | |
40 Observer* observer, | |
41 const BeginFrameArgs& last_begin_frame_args_sent_to_observer) { | |
42 DCHECK(CalledOnValidThread()); | |
43 DCHECK_GE(num_of_observers_, 0); | |
44 | |
45 observer_list_.AddObserver(observer); | |
46 if (++num_of_observers_ == 1) | |
47 delegate_->SetChildrenNeedBeginFrames(true); | |
48 | |
49 // If |last_begin_frame_args_| is still effective, send it to the new | |
50 // |observer| immediately. | |
51 if (!last_begin_frame_args_sent_to_observer.deadline.is_null() && | |
52 !IsSameBeginFrameArgs(last_begin_frame_args_, | |
53 last_begin_frame_args_sent_to_observer) && | |
54 last_begin_frame_args_.deadline > base::TimeTicks::Now()) | |
55 observer->OnSendBeginFrame(last_begin_frame_args_); | |
56 } | |
57 | |
58 void BeginFrameManager::RemoveObserver(Observer* observer) { | |
59 DCHECK(CalledOnValidThread()); | |
60 DCHECK_GE(num_of_observers_, 1); | |
61 | |
62 observer_list_.RemoveObserver(observer); | |
63 if (--num_of_observers_ == 0) | |
64 delegate_->SetChildrenNeedBeginFrames(false); | |
65 } | |
66 | |
67 } // namespace cc | |
OLD | NEW |