summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
diff options
context:
space:
mode:
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.h101
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