summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/webcodecs/encoder_base.cc
diff options
context:
space:
mode:
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.cc25
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>