diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/webcodecs/encoder_base.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/webcodecs/encoder_base.cc | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/chromium/third_party/blink/renderer/modules/webcodecs/encoder_base.cc b/chromium/third_party/blink/renderer/modules/webcodecs/encoder_base.cc index c9be01f1fae..e160f5944a1 100644 --- a/chromium/third_party/blink/renderer/modules/webcodecs/encoder_base.cc +++ b/chromium/third_party/blink/renderer/modules/webcodecs/encoder_base.cc @@ -61,14 +61,8 @@ EncoderBase<Traits>::EncoderBase(ScriptState* script_state, state_(V8CodecState::Enum::kUnconfigured), script_state_(script_state), trace_counter_id_(g_sequence_num_for_counters.GetNext()) { - // TODO(crbug.com/1151005): Use a real MediaLog in worker contexts too. - if (IsMainThread()) { - logger_ = std::make_unique<CodecLogger>( - GetExecutionContext(), Thread::MainThread()->GetTaskRunner()); - } else { - // This will create a logger backed by a NullMediaLog, which does nothing. - logger_ = std::make_unique<CodecLogger>(); - } + logger_ = std::make_unique<CodecLogger>(GetExecutionContext(), + Thread::Current()->GetTaskRunner()); media::MediaLog* log = logger_->log(); @@ -111,6 +105,8 @@ void EncoderBase<Traits>::configure(const ConfigType* config, return; } + MarkCodecActive(); + Request* request = MakeGarbageCollected<Request>(); request->reset_count = reset_count_; if (media_encoder_ && active_config_ && @@ -151,6 +147,8 @@ void EncoderBase<Traits>::encode(InputType* input, return; } + MarkCodecActive(); + Request* request = MakeGarbageCollected<Request>(); request->reset_count = reset_count_; request->type = Request::Type::kEncode; @@ -184,6 +182,8 @@ ScriptPromise EncoderBase<Traits>::flush(ExceptionState& exception_state) { if (ThrowIfCodecStateUnconfigured(state_, "flush", exception_state)) return ScriptPromise(); + MarkCodecActive(); + Request* request = MakeGarbageCollected<Request>(); request->resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state_); @@ -201,6 +201,8 @@ void EncoderBase<Traits>::reset(ExceptionState& exception_state) { TRACE_EVENT0(kCategory, GetTraceNames()->reset.c_str()); + MarkCodecActive(); + state_ = V8CodecState(V8CodecState::Enum::kUnconfigured); ResetInternal(); media_encoder_.reset(); @@ -331,6 +333,12 @@ void EncoderBase<Traits>::ProcessFlush(Request* request) { } template <typename Traits> +void EncoderBase<Traits>::OnCodecReclaimed(DOMException* exception) { + TRACE_EVENT0(kCategory, GetTraceNames()->reclaimed.c_str()); + HandleError(exception); +} + +template <typename Traits> void EncoderBase<Traits>::ContextDestroyed() { state_ = V8CodecState(V8CodecState::Enum::kClosed); logger_->Neuter(); @@ -358,6 +366,7 @@ void EncoderBase<Traits>::Trace(Visitor* visitor) const { visitor->Trace(requests_); ScriptWrappable::Trace(visitor); ExecutionContextLifecycleObserver::Trace(visitor); + ReclaimableCodec::Trace(visitor); } template <typename Traits> |