Commit d1398ca3 authored by Thomas Guilbert's avatar Thomas Guilbert Committed by Commit Bot

[WebCodecs] Improve decoder logging

This CL hooks up the platform decoders to the MediaLog, and populates
certain fields.

Bug: 1139089
Change-Id: Ie5c8e0a9c1ba5eaa91318866952c1b775fd45b16
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2531133
Auto-Submit: Thomas Guilbert <tguilbert@chromium.org>
Commit-Queue: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: default avatarChrome Cunningham <chcunningham@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826459}
parent aaf1d740
......@@ -30,7 +30,21 @@ namespace blink {
std::unique_ptr<AudioDecoderTraits::MediaDecoderType>
AudioDecoderTraits::CreateDecoder(ExecutionContext& execution_context,
media::MediaLog* media_log) {
return std::make_unique<AudioDecoderBroker>(execution_context);
return std::make_unique<AudioDecoderBroker>(media_log, execution_context);
}
// static
void AudioDecoderTraits::UpdateDecoderLog(const MediaDecoderType& decoder,
const MediaConfigType& media_config,
media::MediaLog* media_log) {
media_log->SetProperty<media::MediaLogProperty::kFrameTitle>(
std::string("AudioDecoder(WebCodecs)"));
media_log->SetProperty<media::MediaLogProperty::kAudioDecoderName>(
decoder.GetDisplayName());
media_log->SetProperty<media::MediaLogProperty::kIsPlatformAudioDecoder>(
decoder.IsPlatformDecoder());
media_log->SetProperty<media::MediaLogProperty::kAudioTracks>(
std::vector<MediaConfigType>{media_config});
}
// static
......
......@@ -9,7 +9,6 @@
#include <memory>
#include "media/base/audio_decoder.h"
#include "media/base/media_log.h"
#include "media/base/status.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
......@@ -60,6 +59,9 @@ class MODULES_EXPORT AudioDecoderTraits {
MediaDecoderType::InitCB init_cb,
MediaDecoderType::OutputCB output_cb);
static int GetMaxDecodeRequests(const MediaDecoderType& decoder);
static void UpdateDecoderLog(const MediaDecoderType& decoder,
const MediaConfigType& media_config,
media::MediaLog* media_log);
};
class MODULES_EXPORT AudioDecoder : public DecoderTemplate<AudioDecoderTraits> {
......
......@@ -13,7 +13,7 @@
#include "build/buildflag.h"
#include "media/base/audio_decoder_config.h"
#include "media/base/decoder_factory.h"
#include "media/base/media_util.h"
#include "media/base/media_log.h"
#include "media/base/status_codes.h"
#include "media/mojo/buildflags.h"
#include "media/mojo/clients/mojo_decoder_factory.h"
......@@ -72,11 +72,13 @@ class MediaAudioTaskWrapper {
MediaAudioTaskWrapper(
base::WeakPtr<CrossThreadAudioDecoderClient> weak_client,
ExecutionContext& execution_context,
media::MediaLog* media_log,
scoped_refptr<base::SequencedTaskRunner> media_task_runner,
scoped_refptr<base::SequencedTaskRunner> main_task_runner)
: weak_client_(std::move(weak_client)),
media_task_runner_(std::move(media_task_runner)),
main_task_runner_(std::move(main_task_runner)) {
main_task_runner_(std::move(main_task_runner)),
media_log_(media_log) {
DVLOG(2) << __func__;
DETACH_FROM_SEQUENCE(sequence_checker_);
......@@ -177,7 +179,7 @@ class MediaAudioTaskWrapper {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
std::vector<std::unique_ptr<media::AudioDecoder>> audio_decoders;
decoder_factory_->CreateAudioDecoders(media_task_runner_, &null_media_log_,
decoder_factory_->CreateAudioDecoders(media_task_runner_, media_log_,
&audio_decoders);
return audio_decoders;
......@@ -246,8 +248,7 @@ class MediaAudioTaskWrapper {
std::unique_ptr<media::AudioDecoder> decoder_;
gfx::ColorSpace target_color_space_;
// TODO(chcunningham): Route MEDIA_LOG for WebCodecs.
media::NullMediaLog null_media_log_;
media::MediaLog* media_log_;
SEQUENCE_CHECKER(sequence_checker_);
......@@ -259,13 +260,15 @@ class MediaAudioTaskWrapper {
constexpr char AudioDecoderBroker::kDefaultDisplayName[];
AudioDecoderBroker::AudioDecoderBroker(ExecutionContext& execution_context)
AudioDecoderBroker::AudioDecoderBroker(media::MediaLog* media_log,
ExecutionContext& execution_context)
// Use a worker task runner to avoid scheduling decoder
// work on the main thread.
: media_task_runner_(worker_pool::CreateSequencedTaskRunner({})) {
DVLOG(2) << __func__;
media_tasks_ = std::make_unique<MediaAudioTaskWrapper>(
weak_factory_.GetWeakPtr(), execution_context, media_task_runner_,
weak_factory_.GetWeakPtr(), execution_context, media_log,
media_task_runner_,
execution_context.GetTaskRunner(TaskType::kInternalMedia));
}
......
......@@ -25,6 +25,10 @@ namespace base {
class SequencedTaskRunner;
} // namespace base
namespace media {
class MediaLog;
}
namespace blink {
// Implementation detail of AudioDecoderBroker. Helps safely perform decoder
......@@ -66,7 +70,8 @@ class MODULES_EXPORT AudioDecoderBroker : public media::AudioDecoder,
public:
static constexpr char kDefaultDisplayName[] = "EmptyWebCodecsAudioDecoder";
explicit AudioDecoderBroker(ExecutionContext& execution_context);
explicit AudioDecoderBroker(media::MediaLog* media_log,
ExecutionContext& execution_context);
~AudioDecoderBroker() override;
// Disallow copy and assign.
......
......@@ -12,6 +12,7 @@
#include "media/base/channel_layout.h"
#include "media/base/decode_status.h"
#include "media/base/decoder_buffer.h"
#include "media/base/media_util.h"
#include "media/base/mock_filters.h"
#include "media/base/sample_format.h"
#include "media/base/test_data_util.h"
......@@ -191,7 +192,8 @@ class AudioDecoderBrokerTest : public testing::Test {
}
void ConstructDecoder(ExecutionContext& execution_context) {
decoder_broker_ = std::make_unique<AudioDecoderBroker>(execution_context);
decoder_broker_ = std::make_unique<AudioDecoderBroker>(&null_media_log_,
execution_context);
}
void InitializeDecoder(media::AudioDecoderConfig config) {
......@@ -236,6 +238,7 @@ class AudioDecoderBrokerTest : public testing::Test {
bool SupportsDecryption() { return decoder_broker_->SupportsDecryption(); }
protected:
media::NullMediaLog null_media_log_;
std::unique_ptr<AudioDecoderBroker> decoder_broker_;
std::vector<scoped_refptr<media::AudioBuffer>> output_buffers_;
std::unique_ptr<FakeInterfaceFactory> interface_factory_;
......
......@@ -67,6 +67,9 @@ DecoderTemplate<Traits>::DecoderTemplate(ScriptState* script_state,
// without causing problems to |media_log_| users.
media_log_ = parent_media_log_->Clone();
media_log_->SetProperty<media::MediaLogProperty::kFrameUrl>(
GetExecutionContext()->Url().GetString().Ascii());
output_cb_ = init->output();
error_cb_ = init->error();
}
......@@ -466,6 +469,9 @@ void DecoderTemplate<Traits>::OnInitializeDone(media::Status status) {
return;
}
Traits::UpdateDecoderLog(*decoder_, *pending_request_->media_config,
media_log_.get());
pending_request_.Release();
if (!initializing_sync_)
......
......@@ -44,7 +44,7 @@ std::unique_ptr<VideoDecoderTraits::MediaDecoderType>
VideoDecoderTraits::CreateDecoder(ExecutionContext& execution_context,
media::MediaLog* media_log) {
return std::make_unique<VideoDecoderBroker>(
execution_context, Platform::Current()->GetGpuFactories());
execution_context, Platform::Current()->GetGpuFactories(), media_log);
}
// static
......@@ -58,6 +58,20 @@ void VideoDecoderTraits::InitializeDecoder(
media::WaitingCB());
}
// static
void VideoDecoderTraits::UpdateDecoderLog(const MediaDecoderType& decoder,
const MediaConfigType& media_config,
media::MediaLog* media_log) {
media_log->SetProperty<media::MediaLogProperty::kFrameTitle>(
std::string("VideoDecoder(WebCodecs)"));
media_log->SetProperty<media::MediaLogProperty::kVideoDecoderName>(
decoder.GetDisplayName());
media_log->SetProperty<media::MediaLogProperty::kIsPlatformVideoDecoder>(
decoder.IsPlatformDecoder());
media_log->SetProperty<media::MediaLogProperty::kVideoTracks>(
std::vector<MediaConfigType>{media_config});
}
// static
int VideoDecoderTraits::GetMaxDecodeRequests(const MediaDecoderType& decoder) {
return decoder.GetMaxDecodeRequests();
......
......@@ -8,7 +8,6 @@
#include <stdint.h>
#include <memory>
#include "media/base/media_log.h"
#include "media/base/status.h"
#include "media/base/video_decoder.h"
#include "media/base/video_decoder_config.h"
......@@ -69,6 +68,9 @@ class MODULES_EXPORT VideoDecoderTraits {
MediaDecoderType::InitCB init_cb,
MediaDecoderType::OutputCB output_cb);
static int GetMaxDecodeRequests(const MediaDecoderType& decoder);
static void UpdateDecoderLog(const MediaDecoderType& decoder,
const MediaConfigType& media_config,
media::MediaLog* media_log);
};
class MODULES_EXPORT VideoDecoder : public DecoderTemplate<VideoDecoderTraits> {
......
......@@ -78,12 +78,14 @@ class MediaVideoTaskWrapper {
base::WeakPtr<CrossThreadVideoDecoderClient> weak_client,
ExecutionContext& execution_context,
media::GpuVideoAcceleratorFactories* gpu_factories,
media::MediaLog* media_log,
scoped_refptr<base::SequencedTaskRunner> media_task_runner,
scoped_refptr<base::SequencedTaskRunner> main_task_runner)
: weak_client_(std::move(weak_client)),
media_task_runner_(std::move(media_task_runner)),
main_task_runner_(std::move(main_task_runner)),
gpu_factories_(gpu_factories) {
gpu_factories_(gpu_factories),
media_log_(media_log) {
DVLOG(2) << __func__;
DETACH_FROM_SEQUENCE(sequence_checker_);
......@@ -207,7 +209,7 @@ class MediaVideoTaskWrapper {
std::vector<std::unique_ptr<media::VideoDecoder>> video_decoders;
decoder_factory_->CreateVideoDecoders(
media_task_runner_, gpu_factories_, &null_media_log_,
media_task_runner_, gpu_factories_, media_log_,
WTF::BindRepeating(&MediaVideoTaskWrapper::OnRequestOverlayInfo,
weak_factory_.GetWeakPtr()),
target_color_space_, &video_decoders);
......@@ -282,8 +284,7 @@ class MediaVideoTaskWrapper {
std::unique_ptr<media::VideoDecoder> decoder_;
gfx::ColorSpace target_color_space_;
// TODO(chcunningham): Route MEDIA_LOG for WebCodecs.
media::NullMediaLog null_media_log_;
media::MediaLog* media_log_;
SEQUENCE_CHECKER(sequence_checker_);
......@@ -297,7 +298,8 @@ constexpr char VideoDecoderBroker::kDefaultDisplayName[];
VideoDecoderBroker::VideoDecoderBroker(
ExecutionContext& execution_context,
media::GpuVideoAcceleratorFactories* gpu_factories)
media::GpuVideoAcceleratorFactories* gpu_factories,
media::MediaLog* media_log)
: media_task_runner_(
gpu_factories
// GpuFactories requires we use its task runner when available.
......@@ -307,7 +309,7 @@ VideoDecoderBroker::VideoDecoderBroker(
: worker_pool::CreateSequencedTaskRunner({})) {
DVLOG(2) << __func__;
media_tasks_ = std::make_unique<MediaVideoTaskWrapper>(
weak_factory_.GetWeakPtr(), execution_context, gpu_factories,
weak_factory_.GetWeakPtr(), execution_context, gpu_factories, media_log,
media_task_runner_,
execution_context.GetTaskRunner(TaskType::kInternalMedia));
}
......
......@@ -79,7 +79,8 @@ class MODULES_EXPORT VideoDecoderBroker : public media::VideoDecoder,
// |gpu_factories| may be null when GPU accelerated decoding is not available.
explicit VideoDecoderBroker(
ExecutionContext& execution_context,
media::GpuVideoAcceleratorFactories* gpu_factories);
media::GpuVideoAcceleratorFactories* gpu_factories,
media::MediaLog* media_log);
~VideoDecoderBroker() override;
// Disallow copy and assign.
......
......@@ -11,6 +11,7 @@
#include "gpu/command_buffer/common/mailbox_holder.h"
#include "media/base/decode_status.h"
#include "media/base/decoder_buffer.h"
#include "media/base/media_util.h"
#include "media/base/test_data_util.h"
#include "media/base/test_helpers.h"
#include "media/base/video_frame.h"
......@@ -219,7 +220,7 @@ class VideoDecoderBrokerTest : public testing::Test {
void ConstructDecoder(ExecutionContext& execution_context) {
decoder_broker_ = std::make_unique<VideoDecoderBroker>(
execution_context, gpu_factories_.get());
execution_context, gpu_factories_.get(), &null_media_log_);
}
void InitializeDecoder(media::VideoDecoderConfig config) {
......@@ -273,6 +274,7 @@ class VideoDecoderBrokerTest : public testing::Test {
int GetMaxDecodeRequests() { return decoder_broker_->GetMaxDecodeRequests(); }
protected:
media::NullMediaLog null_media_log_;
std::unique_ptr<VideoDecoderBroker> decoder_broker_;
std::vector<scoped_refptr<media::VideoFrame>> output_frames_;
std::unique_ptr<media::MockGpuVideoAcceleratorFactories> gpu_factories_;
......
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