Commit 2546f022 authored by Chris Cunningham's avatar Chris Cunningham Committed by Commit Bot

MediaCapabilities: check gpu video acceleration for powerEfficient

Feature disabled by default. Enable with command line:
--enable-features=MediaCapabilitiesQueryGpuFactories

Historically info.powerEfficient was determined by the
VideoDecodePerfHistory DB. This patch instead queries the GpuFactories
(proxy for hw decode) for to ask the question directly.

The critical difference is that the DB requires some past data to
be correct, while GpuFactories will know the answer without ever having
played a video.

Change-Id: I402bc03d008c73fa1bccf61beb61609efaf42ddf
Bug: 1105258
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2295684
Commit-Queue: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: default avatarChrome Cunningham <chcunningham@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#788421}
parent 66ade3e7
......@@ -242,6 +242,11 @@ const base::Feature kResumeBackgroundVideo {
#endif
};
// When enabled, MediaCapabilities will check with GPU Video Accelerator
// Factories to determine isPowerEfficient = true/false.
const base::Feature kMediaCapabilitiesQueryGpuFactories{
"MediaCapabilitiesQueryGpuFactories", base::FEATURE_DISABLED_BY_DEFAULT};
// Enable Media Capabilities with finch-parameters.
const base::Feature kMediaCapabilitiesWithParameters{
"MediaCapabilitiesWithParameters", base::FEATURE_ENABLED_BY_DEFAULT};
......
......@@ -134,6 +134,7 @@ MEDIA_EXPORT extern const base::Feature kInternalMediaSession;
MEDIA_EXPORT extern const base::Feature kKaleidoscope;
MEDIA_EXPORT extern const base::Feature kLiveCaption;
MEDIA_EXPORT extern const base::Feature kLowDelayVideoRenderingOnLiveStream;
MEDIA_EXPORT extern const base::Feature kMediaCapabilitiesQueryGpuFactories;
MEDIA_EXPORT extern const base::Feature kMediaCapabilitiesWithParameters;
MEDIA_EXPORT extern const base::Feature kMediaCastOverlayButton;
MEDIA_EXPORT extern const base::Feature kMediaEngagementBypassAutoplayPolicies;
......
......@@ -7,6 +7,8 @@ include_rules = [
"+media/mojo/mojom/media_types.mojom-blink.h",
"+media/mojo/mojom/video_decode_perf_history.mojom-blink.h",
"+media/mojo/mojom/media_metrics_provider.mojom-blink.h",
"+media/video/gpu_video_accelerator_factories.h",
"+media/video/supported_video_decoder_config.h",
"-third_party/blink/renderer/modules",
"+third_party/blink/renderer/modules/encryptedmedia",
"+third_party/blink/renderer/modules/media_capabilities",
......@@ -20,5 +22,6 @@ specific_include_rules = {
"+base/strings/string_number_conversions.h",
"+base/test/bind_test_util.h",
"+media/mojo/mojom/watch_time_recorder.mojom-blink.h",
"+media/video/mock_gpu_video_accelerator_factories.h",
],
}
\ No newline at end of file
......@@ -60,6 +60,7 @@ class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable {
base::Optional<bool> is_nnr_prediction_smooth;
base::Optional<bool> db_is_smooth;
base::Optional<bool> db_is_power_efficient;
base::Optional<bool> is_gpu_factories_supported;
base::TimeTicks request_time;
};
......@@ -74,6 +75,7 @@ class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable {
ScriptPromise GetEmeSupport(ScriptState*,
media::VideoCodec,
media::VideoCodecProfile,
media::VideoColorSpace,
const MediaDecodingConfiguration*,
const base::TimeTicks& request_time,
ExceptionState&);
......@@ -81,7 +83,8 @@ class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable {
// parallel request to GetPerfInfo_ML() when learning experiment is enabled.
void GetPerfInfo(media::VideoCodec,
media::VideoCodecProfile,
const VideoConfiguration*,
media::VideoColorSpace,
const MediaDecodingConfiguration*,
const base::TimeTicks& request_time,
ScriptPromiseResolver*,
MediaKeySystemAccess*);
......@@ -94,6 +97,15 @@ class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable {
int width,
double framerate);
// Query media::GpuVideoAcceleratorFactories for support of hardware
// accelerate decode. Only called when |UseGpuFactoriesForPowerEfficient()|
// is true.
void GetGpuFactoriesSupport(int callback_id,
media::VideoCodec video_codec,
media::VideoCodecProfile video_profile,
media::VideoColorSpace,
const MediaDecodingConfiguration*);
// Callback for perf info from the VideoDecodePerfHistory service.
void OnPerfHistoryInfo(int callback_id,
bool is_smooth,
......@@ -109,6 +121,9 @@ class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable {
int callback_id,
const base::Optional<::media::learning::TargetHistogram>& histogram);
// Callback for GetGpuFactoriesSupport().
void OnGpuFactoriesSupport(int callback_id, bool is_supported);
// Resolves the callback with associated |callback_id| and removes it from the
// |pending_callback_map_|.
void ResolveCallbackIfReady(int callback_id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment