diff options
Diffstat (limited to 'chromium/cc/metrics/frame_sequence_tracker.h')
-rw-r--r-- | chromium/cc/metrics/frame_sequence_tracker.h | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/chromium/cc/metrics/frame_sequence_tracker.h b/chromium/cc/metrics/frame_sequence_tracker.h index bea4723f4f2..5004aa001c5 100644 --- a/chromium/cc/metrics/frame_sequence_tracker.h +++ b/chromium/cc/metrics/frame_sequence_tracker.h @@ -15,6 +15,7 @@ #include "base/containers/circular_deque.h" #include "base/containers/flat_map.h" #include "base/macros.h" +#include "base/optional.h" #include "base/trace_event/traced_value.h" #include "cc/cc_export.h" @@ -33,12 +34,13 @@ class CompositorFrameReportingController; enum FrameSequenceTrackerType { kCompositorAnimation = 0, - kMainThreadAnimation, - kPinchZoom, - kRAF, - kTouchScroll, - kVideo, - kWheelScroll, + kMainThreadAnimation = 1, + kPinchZoom = 2, + kRAF = 3, + kTouchScroll = 4, + kUniversal = 5, + kVideo = 6, + kWheelScroll = 7, kMaxType }; @@ -46,8 +48,9 @@ enum FrameSequenceTrackerType { // submitted frames. class CC_EXPORT FrameSequenceTrackerCollection { public: - explicit FrameSequenceTrackerCollection( - CompositorFrameReportingController* = nullptr); + FrameSequenceTrackerCollection( + bool is_single_threaded, + CompositorFrameReportingController* frame_reporting_controller); ~FrameSequenceTrackerCollection(); FrameSequenceTrackerCollection(const FrameSequenceTrackerCollection&) = @@ -93,6 +96,9 @@ class CC_EXPORT FrameSequenceTrackerCollection { private: friend class FrameSequenceTrackerTest; + void RecreateTrackers(const viz::BeginFrameArgs& args); + + const bool is_single_threaded_; // The callsite can use the type to manipulate the tracker. base::flat_map<FrameSequenceTrackerType, std::unique_ptr<FrameSequenceTracker>> @@ -163,6 +169,9 @@ class CC_EXPORT FrameSequenceTracker { TerminationStatus termination_status() const { return termination_status_; } + // Returns true if we should ask this tracker to report its throughput data. + bool ShouldReportMetricsNow(const viz::BeginFrameArgs& args) const; + private: friend class FrameSequenceTrackerCollection; friend class FrameSequenceTrackerTest; @@ -189,10 +198,13 @@ class CC_EXPORT FrameSequenceTracker { static std::unique_ptr<base::trace_event::TracedValue> ToTracedValue( const ThroughputData& impl, const ThroughputData& main); - static void ReportHistogram(FrameSequenceTrackerType sequence_type, - const char* thread_name, - int metric_index, - const ThroughputData& data); + // Returns the throughput in percent, a return value of base::nullopt + // indicates that no throughput metric is reported. + static base::Optional<int> ReportHistogram( + FrameSequenceTrackerType sequence_type, + const char* thread_name, + int metric_index, + const ThroughputData& data); // Tracks the number of frames that were expected to be shown during this // frame-sequence. uint32_t frames_expected = 0; @@ -226,6 +238,9 @@ class CC_EXPORT FrameSequenceTracker { bool ShouldIgnoreBeginFrameSource(uint64_t source_id) const; + // Report related metrics: throughput, checkboarding... + void ReportMetrics(); + const FrameSequenceTrackerType type_; TerminationStatus termination_status_ = TerminationStatus::kActive; @@ -262,6 +277,13 @@ class CC_EXPORT FrameSequenceTracker { // Keeps track of the last sequence-number that produced a frame from the // main-thread. uint64_t last_submitted_main_sequence_ = 0; + + // The time when this tracker is created, or the time when it was previously + // scheduled to report histogram. + base::TimeTicks first_frame_timestamp_; + + // Report the throughput metrics every 5 seconds. + const base::TimeDelta time_delta_to_report_ = base::TimeDelta::FromSeconds(5); }; } // namespace cc |