Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

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

Issue 1887243002: cc: Remove retro frames from scheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "base/trace_event/trace_event.h" 14 #include "base/trace_event/trace_event.h"
15 #include "base/trace_event/trace_event_argument.h" 15 #include "base/trace_event/trace_event_argument.h"
16 #include "cc/scheduler/delay_based_time_source.h" 16 #include "cc/scheduler/delay_based_time_source.h"
17 #include "cc/scheduler/scheduler.h" 17 #include "cc/scheduler/scheduler.h"
18 18
19 namespace cc { 19 namespace cc {
20 20
21 namespace { 21 namespace {
22 // kDoubleTickDivisor prevents the SyntheticBFS from sending BeginFrames too 22 // kDoubleTickDivisor prevents the SyntheticBFS from sending BeginFrames too
23 // often to an observer. 23 // often to an observer.
24 static const double kDoubleTickDivisor = 2.0; 24 static const double kDoubleTickDivisor = 2.0;
25 } 25 }
26 26
27 // BeginFrameObserverBase -----------------------------------------------
28 BeginFrameObserverBase::BeginFrameObserverBase()
29 : last_begin_frame_args_(), dropped_begin_frame_args_(0) {
30 }
31
32 const BeginFrameArgs& BeginFrameObserverBase::LastUsedBeginFrameArgs() const {
33 return last_begin_frame_args_;
34 }
35 void BeginFrameObserverBase::OnBeginFrame(const BeginFrameArgs& args) {
36 DEBUG_FRAMES("BeginFrameObserverBase::OnBeginFrame",
37 "last args",
38 last_begin_frame_args_.AsValue(),
39 "new args",
40 args.AsValue());
41 DCHECK(args.IsValid());
42 DCHECK(args.frame_time >= last_begin_frame_args_.frame_time);
43 bool used = OnBeginFrameDerivedImpl(args);
44 if (used) {
45 last_begin_frame_args_ = args;
46 } else {
47 ++dropped_begin_frame_args_;
48 }
49 }
50
51 void BeginFrameObserverBase::AsValueInto(
52 base::trace_event::TracedValue* dict) const {
53 dict->BeginDictionary("last_begin_frame_args_");
54 last_begin_frame_args_.AsValueInto(dict);
55 dict->EndDictionary();
56 dict->SetInteger("dropped_begin_frame_args_", dropped_begin_frame_args_);
57 }
58
59 // BeginFrameSourceBase ------------------------------------------------------ 27 // BeginFrameSourceBase ------------------------------------------------------
60 BeginFrameSourceBase::BeginFrameSourceBase() 28 BeginFrameSourceBase::BeginFrameSourceBase()
61 : paused_(false), inside_as_value_into_(false) {} 29 : paused_(false), inside_as_value_into_(false) {}
62 30
63 BeginFrameSourceBase::~BeginFrameSourceBase() {} 31 BeginFrameSourceBase::~BeginFrameSourceBase() {}
64 32
65 void BeginFrameSourceBase::AddObserver(BeginFrameObserver* obs) { 33 void BeginFrameSourceBase::AddObserver(BeginFrameObserver* obs) {
66 DEBUG_FRAMES("BeginFrameSourceBase::AddObserver", "num observers", 34 DEBUG_FRAMES("BeginFrameSourceBase::AddObserver", "num observers",
67 observers_.size(), "to add observer", obs); 35 observers_.size(), "to add observer", obs);
68 DCHECK(obs); 36 DCHECK(obs);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 DCHECK(needs_begin_frames()); 135 DCHECK(needs_begin_frames());
168 DCHECK(!begin_frame_task_.IsCancelled()); 136 DCHECK(!begin_frame_task_.IsCancelled());
169 begin_frame_task_.Cancel(); 137 begin_frame_task_.Cancel();
170 base::TimeTicks now = Now(); 138 base::TimeTicks now = Now();
171 BeginFrameArgs args = BeginFrameArgs::Create( 139 BeginFrameArgs args = BeginFrameArgs::Create(
172 BEGINFRAME_FROM_HERE, now, now + BeginFrameArgs::DefaultInterval(), 140 BEGINFRAME_FROM_HERE, now, now + BeginFrameArgs::DefaultInterval(),
173 BeginFrameArgs::DefaultInterval(), BeginFrameArgs::NORMAL); 141 BeginFrameArgs::DefaultInterval(), BeginFrameArgs::NORMAL);
174 CallOnBeginFrame(args); 142 CallOnBeginFrame(args);
175 } 143 }
176 144
177 void BackToBackBeginFrameSource::DidFinishFrame(size_t remaining_frames) { 145 void BackToBackBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs) {
178 BeginFrameSourceBase::DidFinishFrame(remaining_frames); 146 if (needs_begin_frames())
179 if (needs_begin_frames() && remaining_frames == 0)
180 PostBeginFrame(); 147 PostBeginFrame();
enne (OOO) 2016/04/14 23:02:26 Hmm. Should this only post a begin frame to the o
181 } 148 }
182 149
183 // Tracing support 150 // Tracing support
184 void BackToBackBeginFrameSource::AsValueInto( 151 void BackToBackBeginFrameSource::AsValueInto(
185 base::trace_event::TracedValue* dict) const { 152 base::trace_event::TracedValue* dict) const {
186 dict->SetString("type", "BackToBackBeginFrameSource"); 153 dict->SetString("type", "BackToBackBeginFrameSource");
187 BeginFrameSourceBase::AsValueInto(dict); 154 BeginFrameSourceBase::AsValueInto(dict);
188 } 155 }
189 156
190 // SyntheticBeginFrameSource --------------------------------------------- 157 // SyntheticBeginFrameSource ---------------------------------------------
(...skipping 21 matching lines...) Expand all
212 179
213 BeginFrameArgs SyntheticBeginFrameSource::CreateBeginFrameArgs( 180 BeginFrameArgs SyntheticBeginFrameSource::CreateBeginFrameArgs(
214 base::TimeTicks frame_time, 181 base::TimeTicks frame_time,
215 BeginFrameArgs::BeginFrameArgsType type) { 182 BeginFrameArgs::BeginFrameArgsType type) {
216 return BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, 183 return BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time,
217 time_source_->NextTickTime(), 184 time_source_->NextTickTime(),
218 time_source_->Interval(), type); 185 time_source_->Interval(), type);
219 } 186 }
220 187
221 // BeginFrameSource support 188 // BeginFrameSource support
189 void SyntheticBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs) {
190 BeginFrameArgs args = CreateBeginFrameArgs(
191 time_source_->NextTickTime() - time_source_->Interval(),
192 BeginFrameArgs::MISSED);
193 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs();
194 if (!last_args.IsValid() ||
195 (args.frame_time >
196 last_args.frame_time + args.interval / kDoubleTickDivisor)) {
197 obs->OnBeginFrame(args);
198 }
199 }
200
222 void SyntheticBeginFrameSource::AddObserver(BeginFrameObserver* obs) { 201 void SyntheticBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
223 BeginFrameSourceBase::AddObserver(obs); 202 BeginFrameSourceBase::AddObserver(obs);
224 BeginFrameArgs args = CreateBeginFrameArgs( 203 BeginFrameArgs args = CreateBeginFrameArgs(
225 time_source_->NextTickTime() - time_source_->Interval(), 204 time_source_->NextTickTime() - time_source_->Interval(),
226 BeginFrameArgs::MISSED); 205 BeginFrameArgs::MISSED);
227 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); 206 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs();
228 if (!last_args.IsValid() || 207 if (!last_args.IsValid() ||
229 (args.frame_time > 208 (args.frame_time >
230 last_args.frame_time + args.interval / kDoubleTickDivisor)) { 209 last_args.frame_time + args.interval / kDoubleTickDivisor)) {
231 obs->OnBeginFrame(args); 210 obs->OnBeginFrame(args);
(...skipping 25 matching lines...) Expand all
257 base::trace_event::TracedValue* dict) const { 236 base::trace_event::TracedValue* dict) const {
258 dict->SetString("type", "SyntheticBeginFrameSource"); 237 dict->SetString("type", "SyntheticBeginFrameSource");
259 BeginFrameSourceBase::AsValueInto(dict); 238 BeginFrameSourceBase::AsValueInto(dict);
260 239
261 dict->BeginDictionary("time_source"); 240 dict->BeginDictionary("time_source");
262 time_source_->AsValueInto(dict); 241 time_source_->AsValueInto(dict);
263 dict->EndDictionary(); 242 dict->EndDictionary();
264 } 243 }
265 244
266 } // namespace cc 245 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698