| 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 |