// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_MOJO_SERVICES_VIDEO_DECODE_PERF_HISTORY_H_ #define MEDIA_MOJO_SERVICES_VIDEO_DECODE_PERF_HISTORY_H_ #include <stdint.h> #include <memory> #include <queue> #include "base/functional/callback.h" #include "base/metrics/field_trial_params.h" #include "base/sequence_checker.h" #include "base/supports_user_data.h" #include "media/base/video_codecs.h" #include "media/capabilities/video_decode_stats_db.h" #include "media/capabilities/video_decode_stats_db_provider.h" #include "media/learning/impl/feature_provider.h" #include "media/mojo/mojom/video_decode_perf_history.mojom.h" #include "media/mojo/services/media_mojo_export.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "ui/gfx/geometry/size.h" namespace media { class LearningHelper; // This class saves and retrieves video decode performance statistics on behalf // of the MediaCapabilities API. It also helps to grade the accuracy of the API // by comparing its history-based assessment of smoothness/power-efficiency to // the observed performance as new stats are saved. // // The database is lazily initialized/loaded upon the first API call requiring // DB access. DB implementations must take care to perform work on a separate // task runner. // // Retrieving stats is triggered by calls to the GetPerfInfo() Mojo interface. // The raw values are reduced to booleans (is_smooth, is_power_efficient) which // are sent along the Mojo callback. // // Saving stats is performed by SavePerfRecord(), where a record is defined as a // continuous playback of a stream with fixed decode characteristics (profile, // natural size, frame rate). // // THREAD SAFETY: // This class is not thread safe. All API calls should be made on the same // sequence. class MEDIA_MOJO_EXPORT VideoDecodePerfHistory : public mojom::VideoDecodePerfHistory, public VideoDecodeStatsDBProvider, public base::SupportsUserData::Data { … }; } // namespace media #endif // MEDIA_MOJO_SERVICES_VIDEO_DECODE_PERF_HISTORY_H_