summaryrefslogtreecommitdiff
path: root/chromium/cc/metrics/frame_sequence_metrics.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/cc/metrics/frame_sequence_metrics.h')
-rw-r--r--chromium/cc/metrics/frame_sequence_metrics.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/chromium/cc/metrics/frame_sequence_metrics.h b/chromium/cc/metrics/frame_sequence_metrics.h
index 0417899c3a9..3a77fc57775 100644
--- a/chromium/cc/metrics/frame_sequence_metrics.h
+++ b/chromium/cc/metrics/frame_sequence_metrics.h
@@ -5,6 +5,8 @@
#ifndef CC_METRICS_FRAME_SEQUENCE_METRICS_H_
#define CC_METRICS_FRAME_SEQUENCE_METRICS_H_
+#include <memory>
+
#include "base/callback.h"
#include "base/optional.h"
#include "base/trace_event/traced_value.h"
@@ -44,7 +46,8 @@ class CC_EXPORT FrameSequenceMetrics {
struct ThroughputData {
static std::unique_ptr<base::trace_event::TracedValue> ToTracedValue(
const ThroughputData& impl,
- const ThroughputData& main);
+ const ThroughputData& main,
+ ThreadType effective_thred);
// Returns the throughput in percent, a return value of base::nullopt
// indicates that no throughput metric is reported.
@@ -62,6 +65,13 @@ class CC_EXPORT FrameSequenceMetrics {
#endif
}
+ int DroppedFramePercent() const {
+ if (frames_expected == 0)
+ return 0;
+ return std::ceil(100 * (frames_expected - frames_produced) /
+ static_cast<double>(frames_expected));
+ }
+
// Tracks the number of frames that were expected to be shown during this
// frame-sequence.
uint32_t frames_expected = 0;
@@ -113,10 +123,31 @@ class CC_EXPORT FrameSequenceMetrics {
return throughput_ukm_reporter_;
}
+ // Must be called before destructor.
+ void ReportLeftoverData();
+
+ void AdoptTrace(FrameSequenceMetrics* adopt_from);
+ void AdvanceTrace(base::TimeTicks timestamp);
+
private:
void ComputeAggregatedThroughput();
+
const FrameSequenceTrackerType type_;
+ // Tracks some data to generate useful trace events.
+ struct TraceData {
+ explicit TraceData(FrameSequenceMetrics* metrics);
+ ~TraceData();
+ FrameSequenceMetrics* metrics;
+ base::TimeTicks last_timestamp = base::TimeTicks::Now();
+ int frame_count = 0;
+ bool enabled = false;
+ void* trace_id = nullptr;
+
+ void Advance(base::TimeTicks new_timestamp);
+ void Terminate();
+ } trace_data_{this};
+
// Pointer to the reporter owned by the FrameSequenceTrackerCollection.
ThroughputUkmReporter* const throughput_ukm_reporter_;