// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_COMPOSITOR_TOTAL_ANIMATION_THROUGHPUT_REPORTER_H_ #define UI_COMPOSITOR_TOTAL_ANIMATION_THROUGHPUT_REPORTER_H_ #include <optional> #include "base/functional/callback_forward.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "cc/metrics/frame_sequence_metrics.h" #include "ui/compositor/compositor_export.h" #include "ui/compositor/compositor_observer.h" #include "ui/compositor/throughput_tracker.h" namespace ash { class LoginUnlockThroughputRecorderTestBase; } namespace ui { // Reports cc::FrameSequenceMetrics::ThroughputData between the first animation // start and the last animation ends on a compositor. // // Please see AnimationThroughputReporter for the definition of the throughput // and jack metrics. // // See also docs/speed/graphics_metrics_definitions.md. // // cc::FrameSequenceMetrics::CustomReportData contains the numbers of produced // frames, expected frames and jank count. // // The tracking starts when the first animation observer is added to the // compositor, then stopped when the last animation observer is removed. The // report callback is invoked on the next begin frame if there is enough data. // Since this observes multiple animations, aborting one of animations will // not cancel the tracking, and the data will be reported as normal. // // The reporter will not fire if ScopedThroughputReporterBlocker is active. // This allows to measure throughput from the very first animation (when // reporter was created) till the specific expected animation ends even if // there were delays between the animations. class COMPOSITOR_EXPORT TotalAnimationThroughputReporter : public CompositorObserver { … }; } // namespace ui #endif // UI_COMPOSITOR_TOTAL_ANIMATION_THROUGHPUT_REPORTER_H_