Commit 1c1af9fc authored by Sadrul Habib Chowdhury's avatar Sadrul Habib Chowdhury Committed by Commit Bot

[cc/metrics] Some more debug checks.

Add DCHECK() to verify that every impl-frame started is also terminated
as expected: either a frame is submitted, or no-damage is explicitly
reported.

Also, add 'R' to the debug-log for a reset, and always report 'e' for
end, even for an invalid sequence-number.

BUG=1035382

Change-Id: I1aeab1453fa0c1b80a02b2f1795ab898be71a060
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1976912Reviewed-by: default avatarXida Chen <xidachen@chromium.org>
Commit-Queue: Xida Chen <xidachen@chromium.org>
Auto-Submit: Sadrul Chowdhury <sadrul@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726688}
parent 2924a010
...@@ -432,6 +432,7 @@ void FrameSequenceTracker::ReportBeginImplFrame( ...@@ -432,6 +432,7 @@ void FrameSequenceTracker::ReportBeginImplFrame(
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
DCHECK(!is_inside_frame_) << TRACKER_DCHECK_MSG; DCHECK(!is_inside_frame_) << TRACKER_DCHECK_MSG;
is_inside_frame_ = true; is_inside_frame_ = true;
last_started_impl_sequence_ = args.frame_id.sequence_number;
if (args.type == viz::BeginFrameArgs::NORMAL) if (args.type == viz::BeginFrameArgs::NORMAL)
impl_frames_.insert(args.frame_id); impl_frames_.insert(args.frame_id);
...@@ -489,6 +490,7 @@ void FrameSequenceTracker::ReportSubmitFrame( ...@@ -489,6 +490,7 @@ void FrameSequenceTracker::ReportSubmitFrame(
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
DCHECK(is_inside_frame_) << TRACKER_DCHECK_MSG; DCHECK(is_inside_frame_) << TRACKER_DCHECK_MSG;
last_processed_impl_sequence_ = ack.frame_id.sequence_number;
#endif #endif
if (first_submitted_frame_ == 0) if (first_submitted_frame_ == 0)
first_submitted_frame_ = frame_token; first_submitted_frame_ = frame_token;
...@@ -508,7 +510,7 @@ void FrameSequenceTracker::ReportSubmitFrame( ...@@ -508,7 +510,7 @@ void FrameSequenceTracker::ReportSubmitFrame(
if (!ShouldIgnoreBeginFrameSource(origin_args.frame_id.source_id) && if (!ShouldIgnoreBeginFrameSource(origin_args.frame_id.source_id) &&
main_changes_after_sequence_started && main_changes_include_new_changes && main_changes_after_sequence_started && main_changes_include_new_changes &&
!main_change_had_no_damage) { !main_change_had_no_damage) {
TRACKER_TRACE_STREAM << 'S'; TRACKER_TRACE_STREAM << "S(" << origin_args.frame_id.sequence_number << ")";
last_submitted_main_sequence_ = origin_args.frame_id.sequence_number; last_submitted_main_sequence_ = origin_args.frame_id.sequence_number;
main_frames_.push_back(frame_token); main_frames_.push_back(frame_token);
...@@ -529,13 +531,15 @@ void FrameSequenceTracker::ReportFrameEnd(const viz::BeginFrameArgs& args) { ...@@ -529,13 +531,15 @@ void FrameSequenceTracker::ReportFrameEnd(const viz::BeginFrameArgs& args) {
if (ShouldIgnoreBeginFrameSource(args.frame_id.source_id)) if (ShouldIgnoreBeginFrameSource(args.frame_id.source_id))
return; return;
TRACKER_TRACE_STREAM << "e(" << args.frame_id.sequence_number << ")";
if (ShouldIgnoreSequence(args.frame_id.sequence_number)) { if (ShouldIgnoreSequence(args.frame_id.sequence_number)) {
is_inside_frame_ = false; is_inside_frame_ = false;
return; return;
} }
TRACKER_TRACE_STREAM << "e(" << args.frame_id.sequence_number << ")";
DCHECK(is_inside_frame_) << TRACKER_DCHECK_MSG; DCHECK(is_inside_frame_) << TRACKER_DCHECK_MSG;
DCHECK_EQ(last_started_impl_sequence_, last_processed_impl_sequence_)
<< TRACKER_DCHECK_MSG;
is_inside_frame_ = false; is_inside_frame_ = false;
#endif #endif
} }
...@@ -639,6 +643,9 @@ void FrameSequenceTracker::ReportImplFrameCausedNoDamage( ...@@ -639,6 +643,9 @@ void FrameSequenceTracker::ReportImplFrameCausedNoDamage(
// dispatched for this frame-sequence. In such cases, ignore this call. // dispatched for this frame-sequence. In such cases, ignore this call.
if (ShouldIgnoreSequence(ack.frame_id.sequence_number)) if (ShouldIgnoreSequence(ack.frame_id.sequence_number))
return; return;
#if DCHECK_IS_ON()
last_processed_impl_sequence_ = ack.frame_id.sequence_number;
#endif
TRACKER_TRACE_STREAM << 'n'; TRACKER_TRACE_STREAM << 'n';
DCHECK_GT(impl_throughput().frames_expected, 0u) << TRACKER_DCHECK_MSG; DCHECK_GT(impl_throughput().frames_expected, 0u) << TRACKER_DCHECK_MSG;
...@@ -683,6 +690,7 @@ void FrameSequenceTracker::PauseFrameProduction() { ...@@ -683,6 +690,7 @@ void FrameSequenceTracker::PauseFrameProduction() {
// received begin-frame. // received begin-frame.
begin_impl_frame_data_ = {0, 0, 0}; begin_impl_frame_data_ = {0, 0, 0};
begin_main_frame_data_ = {0, 0, 0}; begin_main_frame_data_ = {0, 0, 0};
TRACKER_TRACE_STREAM << 'R';
} }
void FrameSequenceTracker::UpdateTrackedFrameData(TrackedFrameData* frame_data, void FrameSequenceTracker::UpdateTrackedFrameData(TrackedFrameData* frame_data,
...@@ -703,7 +711,7 @@ void FrameSequenceTracker::UpdateTrackedFrameData(TrackedFrameData* frame_data, ...@@ -703,7 +711,7 @@ void FrameSequenceTracker::UpdateTrackedFrameData(TrackedFrameData* frame_data,
bool FrameSequenceTracker::ShouldIgnoreBeginFrameSource( bool FrameSequenceTracker::ShouldIgnoreBeginFrameSource(
uint64_t source_id) const { uint64_t source_id) const {
if (begin_impl_frame_data_.previous_source == 0) if (begin_impl_frame_data_.previous_source == 0)
return false; return source_id == viz::BeginFrameArgs::kManualSourceId;
return source_id != begin_impl_frame_data_.previous_source; return source_id != begin_impl_frame_data_.previous_source;
} }
......
...@@ -394,6 +394,9 @@ class CC_EXPORT FrameSequenceTracker { ...@@ -394,6 +394,9 @@ class CC_EXPORT FrameSequenceTracker {
// when DCHECK is on. // when DCHECK is on.
std::stringstream frame_sequence_trace_; std::stringstream frame_sequence_trace_;
uint64_t last_started_impl_sequence_ = 0;
uint64_t last_processed_impl_sequence_ = 0;
// If ReportBeginImplFrame is never called on a arg, then ReportBeginMainFrame // If ReportBeginImplFrame is never called on a arg, then ReportBeginMainFrame
// should ignore that arg. // should ignore that arg.
base::flat_set<viz::BeginFrameId> impl_frames_; base::flat_set<viz::BeginFrameId> impl_frames_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment