Commit 9619ecda authored by Mingjing Zhang's avatar Mingjing Zhang Committed by Commit Bot

Show Viz breakdowns as substages under PipelineReporter

This CL adds five substages, each corresponding to a Viz breakdown,
under the SubmitCompositorFrameToPresentationCompositorFrame stage of
the PipelineReporter in the trace viewer.

Bug: 1059032
Change-Id: I8473f69353ac21e9c63ccc093c504339d751d4ac
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2110771
Commit-Queue: Mingjing Zhang <mjzhang@chromium.org>
Reviewed-by: default avatarBehdad Bakhshinategh <behdadb@chromium.org>
Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Cr-Commit-Position: refs/heads/master@{#752551}
parent 44d7cbfe
...@@ -41,6 +41,26 @@ constexpr int kBlinkBreakdownInitialIndex = ...@@ -41,6 +41,26 @@ constexpr int kBlinkBreakdownInitialIndex =
constexpr int kFrameSequenceTrackerTypeCount = constexpr int kFrameSequenceTrackerTypeCount =
static_cast<int>(FrameSequenceTrackerType::kMaxType) + 1; static_cast<int>(FrameSequenceTrackerType::kMaxType) + 1;
// Names for the viz breakdowns that are shown in trace as substages under
// PipelineReporter -> SubmitCompositorFrameToPresentationCompositorFrame
constexpr const char* GetVizBreakdownName(VizBreakdown stage) {
switch (stage) {
case VizBreakdown::kSubmitToReceiveCompositorFrame:
return "SubmitToReceiveCompositorFrame";
case VizBreakdown::kReceivedCompositorFrameToStartDraw:
return "ReceiveCompositorFrameToStartDraw";
case VizBreakdown::kStartDrawToSwapStart:
return "StartDrawToSwapStart";
case VizBreakdown::kSwapStartToSwapEnd:
return "Swap";
case VizBreakdown::kSwapEndToPresentationCompositorFrame:
return "SwapEndToPresentationCompositorFrame";
case VizBreakdown::kBreakdownCount:
NOTREACHED();
return "";
}
}
// Names for CompositorFrameReporter::StageType, which should be updated in case // Names for CompositorFrameReporter::StageType, which should be updated in case
// of changes to the enum. // of changes to the enum.
constexpr const char* GetStageName(int stage_type_index) { constexpr const char* GetStageName(int stage_type_index) {
...@@ -416,6 +436,19 @@ void CompositorFrameReporter::ReportBlinkBreakdowns( ...@@ -416,6 +436,19 @@ void CompositorFrameReporter::ReportBlinkBreakdowns(
} }
} }
void CompositorFrameReporter::ReportVizBreakdownStage(
VizBreakdown stage,
const base::TimeTicks start_time,
const base::TimeTicks end_time,
FrameSequenceTrackerType frame_sequence_tracker_type) const {
base::TimeDelta time_delta = end_time - start_time;
ReportVizBreakdownTrace(stage, start_time, end_time);
ReportCompositorLatencyHistogram(
frame_sequence_tracker_type,
kVizBreakdownInitialIndex + static_cast<int>(stage), time_delta);
}
void CompositorFrameReporter::ReportVizBreakdowns( void CompositorFrameReporter::ReportVizBreakdowns(
base::TimeTicks start_time, base::TimeTicks start_time,
FrameSequenceTrackerType frame_sequence_tracker_type) const { FrameSequenceTrackerType frame_sequence_tracker_type) const {
...@@ -426,56 +459,32 @@ void CompositorFrameReporter::ReportVizBreakdowns( ...@@ -426,56 +459,32 @@ void CompositorFrameReporter::ReportVizBreakdowns(
viz_breakdown_.received_compositor_frame_timestamp < start_time) { viz_breakdown_.received_compositor_frame_timestamp < start_time) {
return; return;
} }
base::TimeDelta submit_to_receive_compositor_frame_delta = ReportVizBreakdownStage(VizBreakdown::kSubmitToReceiveCompositorFrame,
viz_breakdown_.received_compositor_frame_timestamp - start_time; start_time,
ReportCompositorLatencyHistogram( viz_breakdown_.received_compositor_frame_timestamp,
frame_sequence_tracker_type, frame_sequence_tracker_type);
kVizBreakdownInitialIndex +
static_cast<int>(VizBreakdown::kSubmitToReceiveCompositorFrame),
submit_to_receive_compositor_frame_delta);
if (viz_breakdown_.draw_start_timestamp.is_null()) if (viz_breakdown_.draw_start_timestamp.is_null())
return; return;
base::TimeDelta received_compositor_frame_to_start_draw_delta = ReportVizBreakdownStage(VizBreakdown::kReceivedCompositorFrameToStartDraw,
viz_breakdown_.draw_start_timestamp - viz_breakdown_.received_compositor_frame_timestamp,
viz_breakdown_.received_compositor_frame_timestamp; viz_breakdown_.draw_start_timestamp,
ReportCompositorLatencyHistogram( frame_sequence_tracker_type);
frame_sequence_tracker_type,
kVizBreakdownInitialIndex +
static_cast<int>(VizBreakdown::kReceivedCompositorFrameToStartDraw),
received_compositor_frame_to_start_draw_delta);
if (viz_breakdown_.swap_timings.is_null()) if (viz_breakdown_.swap_timings.is_null())
return; return;
base::TimeDelta start_draw_to_swap_start_delta = ReportVizBreakdownStage(
viz_breakdown_.swap_timings.swap_start - VizBreakdown::kStartDrawToSwapStart, viz_breakdown_.draw_start_timestamp,
viz_breakdown_.draw_start_timestamp; viz_breakdown_.swap_timings.swap_start, frame_sequence_tracker_type);
ReportCompositorLatencyHistogram( ReportVizBreakdownStage(
frame_sequence_tracker_type, VizBreakdown::kSwapStartToSwapEnd, viz_breakdown_.swap_timings.swap_start,
kVizBreakdownInitialIndex + viz_breakdown_.swap_timings.swap_end, frame_sequence_tracker_type);
static_cast<int>(VizBreakdown::kStartDrawToSwapStart),
start_draw_to_swap_start_delta); ReportVizBreakdownStage(VizBreakdown::kSwapEndToPresentationCompositorFrame,
viz_breakdown_.swap_timings.swap_end,
base::TimeDelta swap_start_to_swap_end_delta = viz_breakdown_.presentation_feedback.timestamp,
viz_breakdown_.swap_timings.swap_end - frame_sequence_tracker_type);
viz_breakdown_.swap_timings.swap_start;
ReportCompositorLatencyHistogram(
frame_sequence_tracker_type,
kVizBreakdownInitialIndex +
static_cast<int>(VizBreakdown::kSwapStartToSwapEnd),
swap_start_to_swap_end_delta);
base::TimeDelta swap_end_to_presentation_compositor_frame_delta =
viz_breakdown_.presentation_feedback.timestamp -
viz_breakdown_.swap_timings.swap_end;
ReportCompositorLatencyHistogram(
frame_sequence_tracker_type,
kVizBreakdownInitialIndex +
static_cast<int>(VizBreakdown::kSwapEndToPresentationCompositorFrame),
swap_end_to_presentation_compositor_frame_delta);
} }
void CompositorFrameReporter::ReportCompositorLatencyHistogram( void CompositorFrameReporter::ReportCompositorLatencyHistogram(
...@@ -573,6 +582,22 @@ void CompositorFrameReporter::ReportEventLatencyHistograms() const { ...@@ -573,6 +582,22 @@ void CompositorFrameReporter::ReportEventLatencyHistograms() const {
} }
} }
void CompositorFrameReporter::ReportVizBreakdownTrace(
VizBreakdown substage,
const base::TimeTicks start_time,
const base::TimeTicks end_time) const {
// Do not report events with negative time span.
if (end_time < start_time)
return;
const char* stage_name = GetVizBreakdownName(substage);
TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0(
"cc,benchmark", stage_name, TRACE_ID_LOCAL(this), start_time);
TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP0(
"cc,benchmark", stage_name, TRACE_ID_LOCAL(this), end_time);
}
base::TimeDelta CompositorFrameReporter::SumOfStageHistory() const { base::TimeDelta CompositorFrameReporter::SumOfStageHistory() const {
base::TimeDelta sum; base::TimeDelta sum;
for (const StageData& stage : stage_history_) for (const StageData& stage : stage_history_)
......
...@@ -164,6 +164,14 @@ class CC_EXPORT CompositorFrameReporter { ...@@ -164,6 +164,14 @@ class CC_EXPORT CompositorFrameReporter {
void ReportBlinkBreakdowns( void ReportBlinkBreakdowns(
const base::TimeTicks start_time, const base::TimeTicks start_time,
FrameSequenceTrackerType frame_sequence_tracker_type) const; FrameSequenceTrackerType frame_sequence_tracker_type) const;
// Report histogram and trace event stage for one Viz breakdown
void ReportVizBreakdownStage(
VizBreakdown stage,
const base::TimeTicks start_time,
const base::TimeTicks end_time,
FrameSequenceTrackerType frame_sequence_tracker_type) const;
void ReportVizBreakdowns( void ReportVizBreakdowns(
const base::TimeTicks start_time, const base::TimeTicks start_time,
FrameSequenceTrackerType frame_sequence_tracker_type) const; FrameSequenceTrackerType frame_sequence_tracker_type) const;
...@@ -173,6 +181,14 @@ class CC_EXPORT CompositorFrameReporter { ...@@ -173,6 +181,14 @@ class CC_EXPORT CompositorFrameReporter {
base::TimeDelta time_delta) const; base::TimeDelta time_delta) const;
void ReportEventLatencyHistograms() const; void ReportEventLatencyHistograms() const;
// Generate a trace event corresponding to a Viz breakdown under
// SubmitCompositorFrameToPresentationCompositorFrame stage in
// PipelineReporter. This function only generates trace events and does not
// report histograms.
void ReportVizBreakdownTrace(VizBreakdown substage,
const base::TimeTicks start_time,
const base::TimeTicks end_time) const;
StageData current_stage_; StageData current_stage_;
BeginMainFrameMetrics blink_breakdown_; BeginMainFrameMetrics blink_breakdown_;
viz::FrameTimingDetails viz_breakdown_; viz::FrameTimingDetails viz_breakdown_;
......
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