Commit c0ce5411 authored by Mingjing Zhang's avatar Mingjing Zhang Committed by Commit Bot

Change frame tracker's trace object type to stringstream

This CL changes the tracker's trace object to a stringstream, allowing
the logging of more types of data. This CL also takes advantage of said
feature to log |begin_main_frame_data_.previous_sequence| and
|args.sequence_number| in ReportBeginMainFrame() and
ReportMainFrameCausedNoDamage().

Bug: 1017291
Change-Id: I81330b10fa2347658587ee1f9e320fb185ae35cd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1903609Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Commit-Queue: Mingjing Zhang <mjzhang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713621}
parent 223bf9fd
...@@ -17,11 +17,13 @@ ...@@ -17,11 +17,13 @@
// This macro is used with DCHECK to provide addition debug info. // This macro is used with DCHECK to provide addition debug info.
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
#define TRACKER_DCHECK_MSG \ #define TRACKER_TRACE_STREAM frame_sequence_trace_
" in " << kFrameSequenceTrackerTypeNames[this->type_] \ #define TRACKER_DCHECK_MSG \
<< " tracker: " << frame_sequence_trace_ << " (" \ " in " << kFrameSequenceTrackerTypeNames[this->type_] \
<< frame_sequence_trace_.size() << ")"; << " tracker: " << frame_sequence_trace_.str() << " (" \
<< frame_sequence_trace_.str().size() << ")";
#else #else
#define TRACKER_TRACE_STREAM EAT_STREAM_PARAMETERS
#define TRACKER_DCHECK_MSG "" #define TRACKER_DCHECK_MSG ""
#endif #endif
...@@ -293,7 +295,7 @@ void FrameSequenceTracker::ReportBeginImplFrame( ...@@ -293,7 +295,7 @@ void FrameSequenceTracker::ReportBeginImplFrame(
if (ShouldIgnoreBeginFrameSource(args.source_id)) if (ShouldIgnoreBeginFrameSource(args.source_id))
return; return;
LogFrameSequenceTrace('b'); TRACKER_TRACE_STREAM << 'b';
UpdateTrackedFrameData(&begin_impl_frame_data_, args.source_id, UpdateTrackedFrameData(&begin_impl_frame_data_, args.source_id,
args.sequence_number); args.sequence_number);
impl_throughput_.frames_expected += impl_throughput_.frames_expected +=
...@@ -311,7 +313,9 @@ void FrameSequenceTracker::ReportBeginMainFrame( ...@@ -311,7 +313,9 @@ void FrameSequenceTracker::ReportBeginMainFrame(
if (ShouldIgnoreBeginFrameSource(args.source_id)) if (ShouldIgnoreBeginFrameSource(args.source_id))
return; return;
LogFrameSequenceTrace('B'); TRACKER_TRACE_STREAM << 'B';
TRACKER_TRACE_STREAM << "(" << begin_main_frame_data_.previous_sequence << ","
<< args.sequence_number << ")";
UpdateTrackedFrameData(&begin_main_frame_data_, args.source_id, UpdateTrackedFrameData(&begin_main_frame_data_, args.source_id,
args.sequence_number); args.sequence_number);
if (first_received_main_sequence_ == 0) if (first_received_main_sequence_ == 0)
...@@ -345,7 +349,7 @@ void FrameSequenceTracker::ReportSubmitFrame( ...@@ -345,7 +349,7 @@ void FrameSequenceTracker::ReportSubmitFrame(
origin_args.sequence_number >= first_received_main_sequence_) { origin_args.sequence_number >= first_received_main_sequence_) {
if (last_submitted_main_sequence_ == 0 || if (last_submitted_main_sequence_ == 0 ||
origin_args.sequence_number > last_submitted_main_sequence_) { origin_args.sequence_number > last_submitted_main_sequence_) {
LogFrameSequenceTrace('S'); TRACKER_TRACE_STREAM << 'S';
last_submitted_main_sequence_ = origin_args.sequence_number; last_submitted_main_sequence_ = origin_args.sequence_number;
main_frames_.push_back(frame_token); main_frames_.push_back(frame_token);
...@@ -381,7 +385,7 @@ void FrameSequenceTracker::ReportFramePresented( ...@@ -381,7 +385,7 @@ void FrameSequenceTracker::ReportFramePresented(
return; return;
} }
LogFrameSequenceTrace('P'); TRACKER_TRACE_STREAM << 'P';
TRACE_EVENT_ASYNC_STEP_INTO_WITH_TIMESTAMP0( TRACE_EVENT_ASYNC_STEP_INTO_WITH_TIMESTAMP0(
"cc,benchmark", "FrameSequenceTracker", this, "FramePresented", "cc,benchmark", "FrameSequenceTracker", this, "FramePresented",
...@@ -457,7 +461,7 @@ void FrameSequenceTracker::ReportImplFrameCausedNoDamage( ...@@ -457,7 +461,7 @@ void FrameSequenceTracker::ReportImplFrameCausedNoDamage(
ack.sequence_number < begin_impl_frame_data_.previous_sequence) { ack.sequence_number < begin_impl_frame_data_.previous_sequence) {
return; return;
} }
LogFrameSequenceTrace('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;
DCHECK_GT(impl_throughput_.frames_expected, impl_throughput_.frames_produced) DCHECK_GT(impl_throughput_.frames_expected, impl_throughput_.frames_produced)
<< TRACKER_DCHECK_MSG; << TRACKER_DCHECK_MSG;
...@@ -482,7 +486,9 @@ void FrameSequenceTracker::ReportMainFrameCausedNoDamage( ...@@ -482,7 +486,9 @@ void FrameSequenceTracker::ReportMainFrameCausedNoDamage(
return; return;
} }
LogFrameSequenceTrace('N'); TRACKER_TRACE_STREAM << 'N';
TRACKER_TRACE_STREAM << "(" << begin_main_frame_data_.previous_sequence << ","
<< args.sequence_number << ")";
DCHECK_GT(main_throughput_.frames_expected, 0u) << TRACKER_DCHECK_MSG; DCHECK_GT(main_throughput_.frames_expected, 0u) << TRACKER_DCHECK_MSG;
DCHECK_GT(main_throughput_.frames_expected, main_throughput_.frames_produced) DCHECK_GT(main_throughput_.frames_expected, main_throughput_.frames_produced)
<< TRACKER_DCHECK_MSG; << TRACKER_DCHECK_MSG;
......
...@@ -182,12 +182,6 @@ class CC_EXPORT FrameSequenceTracker { ...@@ -182,12 +182,6 @@ class CC_EXPORT FrameSequenceTracker {
termination_status_ = TerminationStatus::kScheduledForTermination; termination_status_ = TerminationStatus::kScheduledForTermination;
} }
inline void LogFrameSequenceTrace(unsigned char letter) {
#if DCHECK_IS_ON()
frame_sequence_trace_.push_back(letter);
#endif
}
struct TrackedFrameData { struct TrackedFrameData {
// Represents the |BeginFrameArgs::source_id| and // Represents the |BeginFrameArgs::source_id| and
// |BeginFrameArgs::sequence_number| fields of the last processed // |BeginFrameArgs::sequence_number| fields of the last processed
...@@ -292,15 +286,15 @@ class CC_EXPORT FrameSequenceTracker { ...@@ -292,15 +286,15 @@ class CC_EXPORT FrameSequenceTracker {
const base::TimeDelta time_delta_to_report_ = base::TimeDelta::FromSeconds(5); const base::TimeDelta time_delta_to_report_ = base::TimeDelta::FromSeconds(5);
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
// This string represents a sequence of frame reporting activities on the // This stringstream represents a sequence of frame reporting activities on
// current tracker. Each letter can be one of the following: // the current tracker. Each letter can be one of the following:
// {'B', 'N', 'b', 'n', 'S', 'P'}, where // {'B', 'N', 'b', 'n', 'S', 'P'}, where
// 'B' = ReportBeginMainFrame(), 'N' = ReportMainFrameCausedNoDamage(), // 'B' = ReportBeginMainFrame(), 'N' = ReportMainFrameCausedNoDamage(),
// 'b' = ReportBeginImplFrame(), 'n' = ReportMainFrameCausedNoDamage(), // 'b' = ReportBeginImplFrame(), 'n' = ReportMainFrameCausedNoDamage(),
// 'S' = ReportSubmitFrame() and 'P' = ReportFramePresented(). // 'S' = ReportSubmitFrame() and 'P' = ReportFramePresented().
// Note that |frame_sequence_trace_| is only defined and populated // Note that |frame_sequence_trace_| is only defined and populated
// when DCHECK is on. // when DCHECK is on.
std::string frame_sequence_trace_; std::stringstream frame_sequence_trace_;
#endif #endif
}; };
......
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