8000 chore: cherry-pick 06504ff3b1 from chromium by deepak1556 · Pull Request #32793 · electron/electron · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

chore: cherry-pick 06504ff3b1 from chromium #32793

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions patches/chromium/.patches
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ cherry-pick-c5571653d932.patch
fix_crash_when_saving_edited_pdf_files.patch
cherry-pick-9db9911e1242.patch
cherry-pick-1284367.patch
m97_webcodecs_various_decodertemplate_shutdown_cleanups.patch
96_take_local_copy_of_ump_local_sources_to_iterate.patch
pin_scrolltop_to_0_during_autofill_preview.patch
fix_preview_state_detection.patch
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Chris Cunningham <chcunningham@chromium.org>
Date: Tue, 30 Nov 2021 20:53:26 +0000
Subject: Various DecoderTemplate shutdown cleanups

1. Use DeleteSoon() when destroying the |decoder_| to avoid destructing
in error conditions where it's callback (OnDecodeDone()) is actively
executing.

2. Call Shutdown() from ContextDestroyed() to invoke full reset
algorithm and tidily clean up all state.

(cherry picked from commit b5e609d4e7a296fa8c2d50f1373e9f3a50003995)

Bug: 1267426
Change-Id: I927d8a3bd245b3f833e73c74103cbaacf6d73406
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3277273
Commit-Queue: Chrome Cunningham <chcunningham@chromium.org>
Auto-Submit: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: Dan Sanders <sandersd@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#941390}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3308537
Commit-Queue: Dan Sanders <sandersd@chromium.org>
Cr-Commit-Position: refs/branch-heads/4692@{#599}
Cr-Branched-From: 038cd96142d384c0d2238973f1cb277725a62eba-refs/heads/main@{#938553}

diff --git a/third_party/blink/renderer/modules/webcodecs/decoder_template.cc b/third_party/blink/renderer/modules/webcodecs/decoder_template.cc
index fbb40f4a6a245706abcab1cc34595168f444528d..18e6d5f9f5675591dfcfa557f28bec72e41c276a 100644
--- a/third_party/blink/renderer/modules/webcodecs/decoder_template.cc
+++ b/third_party/blink/renderer/modules/webcodecs/decoder_template.cc
@@ -79,8 +79,10 @@ DecoderTemplate<Traits>::DecoderTemplate(ScriptState* script_state,
ExecutionContext* context = GetExecutionContext();
DCHECK(context);

- logger_ = std::make_unique<CodecLogger>(
- context, context->GetTaskRunner(TaskType::kInternalMedia));
+ main_thread_task_runner_ =
+ context->GetTaskRunner(TaskType::kInternalMediaRealTime);
+
+ logger_ = std::make_unique<CodecLogger>(context, main_thread_task_runner_);

logger_->log()->SetProperty<media::MediaLogProperty::kFrameUrl>(
context->Url().GetString().Ascii());
@@ -504,8 +506,10 @@ void DecoderTemplate<Traits>::Shutdown(DOMException* exception) {
// Prevent any further logging from being reported.
logger_->Neuter();

- // Clear decoding and JS-visible queue state.
- decoder_.reset();
+ // Clear decoding and JS-visible queue state. Use DeleteSoon() to avoid
+ // deleting decoder_ when its callback (e.g. OnDecodeDone()) may be below us
+ // in the stack.
+ main_thread_task_runner_->DeleteSoon(FROM_HERE, std::move(decoder_));

if (pending_request_) {
// This request was added as part of calling ResetAlgorithm above. However,
@@ -722,9 +726,8 @@ void DecoderTemplate<Traits>::TraceQueueSizes() const {

template <typename Traits>
void DecoderTemplate<Traits>::ContextDestroyed() {
- state_ = V8CodecState(V8CodecState::Enum::kClosed);
- logger_->Neuter();
- decoder_.reset();
+ // Deallocate resources and supress late callbacks from media thread.
+ Shutdown();
}

template <typename Traits>
diff --git a/third_party/blink/renderer/modules/webcodecs/decoder_template.h b/third_party/blink/renderer/modules/webcodecs/decoder_template.h
index bc186b60c84e2b4b76468f21a9305c5792796e7e..c16dbeee58048644291fe856e33573068da3c69f 100644
--- a/third_party/blink/renderer/modules/webcodecs/decoder_template.h
+++ b/third_party/blink/renderer/modules/webcodecs/decoder_template.h
@@ -29,6 +29,10 @@
#include "third_party/blink/renderer/platform/heap/heap_allocator.h"
#include "third_party/blink/renderer/platform/heap/member.h"

+namespace base {
+class SingleThreadTaskRunner;
+}
+
namespace media {
class GpuVideoAcceleratorFactories;
class ScopedDecodeTrace;
@@ -227,6 +231,9 @@ class MODULES_EXPORT DecoderTemplate

// Keyframes are required after configure(), flush(), and reset().
bool require_key_frame_ = true;
+
+ // Task runner for main thread.
+ scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
};

} // namespace blink
0