OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/scheduler/begin_frame_source.h" | 5 #include "cc/scheduler/begin_frame_source.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 const_cast<bool*>(&inside_as_value_into_), true); | 130 const_cast<bool*>(&inside_as_value_into_), true); |
131 dict->BeginDictionary("observer"); | 131 dict->BeginDictionary("observer"); |
132 observer_->AsValueInto(dict); | 132 observer_->AsValueInto(dict); |
133 dict->EndDictionary(); | 133 dict->EndDictionary(); |
134 } else { | 134 } else { |
135 dict->SetString("observer", "NULL"); | 135 dict->SetString("observer", "NULL"); |
136 } | 136 } |
137 dict->SetBoolean("needs_begin_frames", NeedsBeginFrames()); | 137 dict->SetBoolean("needs_begin_frames", NeedsBeginFrames()); |
138 } | 138 } |
139 | 139 |
| 140 // ProxyBeginFrameSource |
| 141 ProxyBeginFrameSource::ProxyBeginFrameSource() : delegate_(nullptr) { |
| 142 } |
| 143 |
| 144 ProxyBeginFrameSource::~ProxyBeginFrameSource() { |
| 145 DCHECK(!observer_list_.might_have_observers()); |
| 146 } |
| 147 |
| 148 bool ProxyBeginFrameSource::NeedsBeginFrames() const { |
| 149 return observer_list_.might_have_observers(); |
| 150 } |
| 151 |
| 152 void ProxyBeginFrameSource::AddObserver(BeginFrameObserver* obs) { |
| 153 // If |missed_begin_frame_args_| is still effective, send it to the new |
| 154 // |obs| immediately. |
| 155 if (!obs->LastUsedBeginFrameArgs().deadline.is_null() && |
| 156 obs->LastUsedBeginFrameArgs() != missed_begin_frame_args_) { |
| 157 missed_begin_frame_args_.type = BeginFrameArgs::MISSED; |
| 158 obs->OnBeginFrame(missed_begin_frame_args_); |
| 159 } |
| 160 |
| 161 if (!observer_list_.might_have_observers() && delegate_) |
| 162 delegate_->SetChildrenNeedBeginFrames(true); |
| 163 observer_list_.AddObserver(obs); |
| 164 } |
| 165 |
| 166 void ProxyBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) { |
| 167 DCHECK(observer_list_.HasObserver(obs)); |
| 168 observer_list_.RemoveObserver(obs); |
| 169 |
| 170 if (!observer_list_.might_have_observers() && delegate_) |
| 171 delegate_->SetChildrenNeedBeginFrames(false); |
| 172 } |
| 173 |
| 174 void ProxyBeginFrameSource::AsValueInto(base::debug::TracedValue* dict) const { |
| 175 dict->SetString("type", "ProxyBeginFrameSource"); |
| 176 dict->SetBoolean("has_observers", observer_list_.might_have_observers()); |
| 177 } |
| 178 |
| 179 void ProxyBeginFrameSource::BeginFrames(const BeginFrameArgs& args) { |
| 180 FOR_EACH_OBSERVER(BeginFrameObserver, |
| 181 observer_list_, |
| 182 OnBeginFrame(args)); |
| 183 missed_begin_frame_args_ = args; |
| 184 } |
| 185 |
140 // BackToBackBeginFrameSourceMixIn -------------------------------------------- | 186 // BackToBackBeginFrameSourceMixIn -------------------------------------------- |
141 scoped_ptr<BackToBackBeginFrameSource> BackToBackBeginFrameSource::Create( | 187 scoped_ptr<BackToBackBeginFrameSource> BackToBackBeginFrameSource::Create( |
142 base::SingleThreadTaskRunner* task_runner) { | 188 base::SingleThreadTaskRunner* task_runner) { |
143 return make_scoped_ptr(new BackToBackBeginFrameSource(task_runner)); | 189 return make_scoped_ptr(new BackToBackBeginFrameSource(task_runner)); |
144 } | 190 } |
145 | 191 |
146 BackToBackBeginFrameSource::BackToBackBeginFrameSource( | 192 BackToBackBeginFrameSource::BackToBackBeginFrameSource( |
147 base::SingleThreadTaskRunner* task_runner) | 193 base::SingleThreadTaskRunner* task_runner) |
148 : BeginFrameSourceMixIn(), | 194 : BeginFrameSourceMixIn(), |
149 task_runner_(task_runner), | 195 task_runner_(task_runner), |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 if (!observer_->LastUsedBeginFrameArgs().IsValid()) | 529 if (!observer_->LastUsedBeginFrameArgs().IsValid()) |
484 return true; | 530 return true; |
485 | 531 |
486 // Only allow new args have a *strictly bigger* frame_time value and statisfy | 532 // Only allow new args have a *strictly bigger* frame_time value and statisfy |
487 // minimum interval requirement. | 533 // minimum interval requirement. |
488 return (args.frame_time >= | 534 return (args.frame_time >= |
489 observer_->LastUsedBeginFrameArgs().frame_time + minimum_interval_); | 535 observer_->LastUsedBeginFrameArgs().frame_time + minimum_interval_); |
490 } | 536 } |
491 | 537 |
492 } // namespace cc | 538 } // namespace cc |
OLD | NEW |