Chromium Code Reviews| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 std::unordered_set<BeginFrameObserver*> observers(observers_); | 171 std::unordered_set<BeginFrameObserver*> observers(observers_); |
| 172 for (auto* obs : observers) { | 172 for (auto* obs : observers) { |
| 173 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); | 173 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); |
| 174 if (!last_args.IsValid() || | 174 if (!last_args.IsValid() || |
| 175 (args.frame_time > | 175 (args.frame_time > |
| 176 last_args.frame_time + args.interval / kDoubleTickDivisor)) | 176 last_args.frame_time + args.interval / kDoubleTickDivisor)) |
| 177 obs->OnBeginFrame(args); | 177 obs->OnBeginFrame(args); |
| 178 } | 178 } |
| 179 } | 179 } |
| 180 | 180 |
| 181 ExternalBeginFrameSource::ExternalBeginFrameSource( | |
| 182 ExternalBeginFrameSourceClient* client) | |
| 183 : client_(client) { | |
| 184 DCHECK(client_); | |
| 185 } | |
| 186 | |
| 187 ExternalBeginFrameSource::~ExternalBeginFrameSource() {} | |
|
danakj
2016/08/26 22:39:13
= default
| |
| 188 | |
| 189 void ExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) { | |
| 190 DCHECK(obs); | |
| 191 DCHECK(observers_.find(obs) == observers_.end()); | |
| 192 | |
| 193 bool observers_was_empty = observers_.empty(); | |
| 194 observers_.insert(obs); | |
| 195 obs->OnBeginFrameSourcePausedChanged(paused_); | |
| 196 if (observers_was_empty) | |
| 197 client_->OnNeedsBeginFrames(true); | |
| 198 | |
| 199 // Send a MISSED begin frame if necessary. | |
| 200 if (missed_begin_frame_args_.IsValid()) { | |
| 201 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); | |
| 202 if (!last_args.IsValid() || | |
| 203 (missed_begin_frame_args_.frame_time > last_args.frame_time)) { | |
| 204 obs->OnBeginFrame(missed_begin_frame_args_); | |
| 205 } | |
| 206 } | |
| 207 } | |
| 208 | |
| 209 void ExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) { | |
| 210 DCHECK(obs); | |
| 211 DCHECK(observers_.find(obs) != observers_.end()); | |
| 212 | |
| 213 observers_.erase(obs); | |
| 214 if (observers_.empty()) { | |
| 215 missed_begin_frame_args_ = BeginFrameArgs(); | |
| 216 client_->OnNeedsBeginFrames(false); | |
| 217 } | |
| 218 } | |
| 219 | |
| 220 void ExternalBeginFrameSource::OnSetBeginFrameSourcePaused(bool paused) { | |
| 221 if (paused_ == paused) | |
| 222 return; | |
| 223 paused_ = paused; | |
| 224 std::unordered_set<BeginFrameObserver*> observers(observers_); | |
| 225 for (auto* obs : observers) | |
| 226 obs->OnBeginFrameSourcePausedChanged(paused_); | |
| 227 } | |
| 228 | |
| 229 void ExternalBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) { | |
| 230 missed_begin_frame_args_ = args; | |
| 231 missed_begin_frame_args_.type = BeginFrameArgs::MISSED; | |
| 232 std::unordered_set<BeginFrameObserver*> observers(observers_); | |
| 233 for (auto* obs : observers) | |
| 234 obs->OnBeginFrame(args); | |
| 235 } | |
| 236 | |
| 181 } // namespace cc | 237 } // namespace cc |
| OLD | NEW |