Index: cc/scheduler/begin_frame_source.cc |
diff --git a/cc/scheduler/begin_frame_source.cc b/cc/scheduler/begin_frame_source.cc |
index be6394e617a88882f5806432ef0d3de16927d2cc..14f81585f6c8e869e0b4b597bb4bed095a2d063f 100644 |
--- a/cc/scheduler/begin_frame_source.cc |
+++ b/cc/scheduler/begin_frame_source.cc |
@@ -284,19 +284,10 @@ void ExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) { |
client_->OnNeedsBeginFrames(true); |
// Send a MISSED begin frame if necessary. |
- if (last_begin_frame_args_.IsValid()) { |
- const BeginFrameArgs& last_args = obs->LastUsedBeginFrameArgs(); |
- if (!last_args.IsValid() || |
- (last_begin_frame_args_.frame_time > last_args.frame_time)) { |
- DCHECK( |
- (last_begin_frame_args_.source_id != last_args.source_id) || |
- (last_begin_frame_args_.sequence_number > last_args.sequence_number)) |
- << "current " << last_begin_frame_args_.AsValue()->ToString() |
- << ", last " << last_args.AsValue()->ToString(); |
- BeginFrameArgs missed_args = last_begin_frame_args_; |
- missed_args.type = BeginFrameArgs::MISSED; |
- obs->OnBeginFrame(missed_args); |
- } |
+ BeginFrameArgs missed_args = GetMissedBeginFrameArgs(obs); |
+ if (missed_args.IsValid()) { |
+ DCHECK_EQ(BeginFrameArgs::MISSED, missed_args.type); |
+ obs->OnBeginFrame(missed_args); |
} |
} |
@@ -305,10 +296,8 @@ void ExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) { |
DCHECK(observers_.find(obs) != observers_.end()); |
observers_.erase(obs); |
- if (observers_.empty()) { |
- last_begin_frame_args_ = BeginFrameArgs(); |
+ if (observers_.empty()) |
client_->OnNeedsBeginFrames(false); |
- } |
} |
void ExternalBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs, |
@@ -345,4 +334,24 @@ void ExternalBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) { |
} |
} |
+BeginFrameArgs ExternalBeginFrameSource::GetMissedBeginFrameArgs( |
+ BeginFrameObserver* obs) { |
+ if (!last_begin_frame_args_.IsValid()) |
+ return BeginFrameArgs(); |
+ |
+ const BeginFrameArgs& last_args = obs->LastUsedBeginFrameArgs(); |
+ if (last_args.IsValid() && |
+ last_begin_frame_args_.frame_time == last_args.frame_time) { |
+ return BeginFrameArgs(); |
+ } |
+ |
+ DCHECK((last_begin_frame_args_.source_id != last_args.source_id) || |
+ (last_begin_frame_args_.sequence_number > last_args.sequence_number)) |
+ << "current " << last_begin_frame_args_.AsValue()->ToString() << ", last " |
+ << last_args.AsValue()->ToString(); |
+ BeginFrameArgs missed_args = last_begin_frame_args_; |
+ missed_args.type = BeginFrameArgs::MISSED; |
+ return missed_args; |
+} |
+ |
} // namespace cc |