diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h | 101 |
1 files changed, 91 insertions, 10 deletions
diff --git a/chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h b/chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h index 425842e12aa..cfb0b12b792 100644 --- a/chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h +++ b/chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h @@ -6,15 +6,19 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_H_ #include "media/base/video_codecs.h" // for media::VideoCodecProfile +#include "media/learning/mojo/public/cpp/mojo_learning_task_controller.h" +#include "media/learning/mojo/public/mojom/learning_task_controller.mojom-blink.h" #include "media/mojo/mojom/video_decode_perf_history.mojom-blink.h" #include "mojo/public/cpp/bindings/remote.h" -#include "third_party/blink/renderer/modules/media_capabilities/video_configuration.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_video_configuration.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/heap/visitor.h" +#include "third_party/blink/renderer/platform/wtf/hash_map.h" namespace blink { +class ExceptionState; class ExecutionContext; class MediaDecodingConfiguration; class MediaEncodingConfiguration; @@ -27,31 +31,108 @@ class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable { DEFINE_WRAPPERTYPEINFO(); public: + static const char kLearningBadWindowThresholdParamName[]; + static const char kLearningNnrThresholdParamName[]; + MediaCapabilities(); - ScriptPromise decodingInfo(ScriptState*, const MediaDecodingConfiguration*); + void Trace(blink::Visitor* visitor) override; + + ScriptPromise decodingInfo(ScriptState*, + const MediaDecodingConfiguration*, + ExceptionState&); ScriptPromise encodingInfo(ScriptState*, const MediaEncodingConfiguration*); private: - // Binds to the VideoDecodePerfHistory service. Returns whether it was + // Stores pending callback state from and intermediate prediction values while + // we wait for all predictions to arrive. + class PendingCallbackState : public GarbageCollected<PendingCallbackState> { + public: + PendingCallbackState(ScriptPromiseResolver* resolver, + MediaKeySystemAccess* access); + virtual void Trace(blink::Visitor* visitor); + + Member<ScriptPromiseResolver> resolver; + Member<MediaKeySystemAccess> key_system_access; + base::Optional<bool> is_bad_window_prediction_smooth; + base::Optional<bool> is_nnr_prediction_smooth; + base::Optional<bool> db_is_smooth; + base::Optional<bool> db_is_power_efficient; + }; + + // Lazily binds remote LearningTaskControllers for ML smoothness predictions + // and returns whether binding succeeds. Returns true if it was already bound. + bool EnsureLearningPredictors(ExecutionContext*); + + // Lazily binds to the VideoDecodePerfHistory service. Returns whether it was // successful. Returns true if it was already bound. - bool EnsureService(ExecutionContext*); + bool EnsurePerfHistoryService(ExecutionContext*); ScriptPromise GetEmeSupport(ScriptState*, + media::VideoCodec, media::VideoCodecProfile, - const MediaDecodingConfiguration*); - void GetPerfInfo(media::VideoCodecProfile, + const MediaDecodingConfiguration*, + ExceptionState&); + // Gets perf info from VideoDecodePerrHistory DB. Will optionally kick off + // parallel request to GetPerfInfo_ML() when learning experiment is enabled. + void GetPerfInfo(media::VideoCodec, + media::VideoCodecProfile, const VideoConfiguration*, ScriptPromiseResolver*, MediaKeySystemAccess*); - void OnPerfInfo(ScriptPromiseResolver*, - MediaKeySystemAccess*, - bool is_smooth, - bool is_power_efficient); + // Gets ML perf predictions from remote LearingTaskControllers. + void GetPerfInfo_ML(ExecutionContext* execution_context, + int callback_id, + media::VideoCodec video_codec, + media::VideoCodecProfile video_profile, + int width, + double framerate); + + // Callback for perf info from the VideoDecodePerfHistory service. + void OnPerfHistoryInfo(int callback_id, + bool is_smooth, + bool is_power_efficient); + + // Callback for predictions from |bad_window_predictor_|. + void OnBadWindowPrediction( + int callback_id, + const base::Optional<::media::learning::TargetHistogram>& histogram); + + // Callback for predictions from |nnr_predictor_|. + void OnNnrPrediction( + int callback_id, + const base::Optional<::media::learning::TargetHistogram>& histogram); + + // Resolves the callback with associated |callback_id| and removes it from the + // |pending_callback_map_|. + void ResolveCallbackIfReady(int callback_id); + + // Creates a new (incremented) callback ID from |last_callback_id_| for + // mapping in |pending_cb_map_|. + int CreateCallbackId(); mojo::Remote<media::mojom::blink::VideoDecodePerfHistory> decode_history_service_; + + // Connection to a browser-process LearningTaskController for predicting the + // number of consecutive "bad" dropped frame windows during a playback. See + // media::SmoothnessHelper. + mojo::Remote<media::learning::mojom::blink::LearningTaskController> + bad_window_predictor_; + + // Connects to a browser-process LearningTaskController for predicting the + // number of consecutive non-network re-buffers (NNRs). See + // media::SmoothnessHelper. + mojo::Remote<media::learning::mojom::blink::LearningTaskController> + nnr_predictor_; + + // Holds the last key for callbacks in the map below. Incremented for each + // usage. + int last_callback_id_ = 0; + + // Maps a callback ID to state for pending callbacks. + HeapHashMap<int, Member<PendingCallbackState>> pending_cb_map_; }; } // namespace blink |