Commit e04ce695 authored by Hajime Hoshi's avatar Hajime Hoshi Committed by Commit Bot

Use per-frame task runners at BaseAudioContext

This is a follow-up CL for https://chromium-review.googlesource.com/c/chromium/src/+/1229739

Bug: 870606
Change-Id: I0b877b3b611e9696e9d8fe38c8091ec8fbe5b304
Reviewed-on: https://chromium-review.googlesource.com/1233102Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarHongchan Choi <hongchan@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Commit-Queue: Hajime Hoshi <hajimehoshi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#592697}
parent 775dab78
......@@ -100,13 +100,15 @@ BaseAudioContext::BaseAudioContext(Document* document,
is_cleared_(false),
is_resolving_resume_promises_(false),
has_posted_cleanup_task_(false),
deferred_task_handler_(DeferredTaskHandler::Create()),
deferred_task_handler_(DeferredTaskHandler::Create(
document->GetTaskRunner(TaskType::kInternalMedia))),
context_state_(kSuspended),
periodic_wave_sine_(nullptr),
periodic_wave_square_(nullptr),
periodic_wave_sawtooth_(nullptr),
periodic_wave_triangle_(nullptr),
output_position_() {}
output_position_(),
task_runner_(document->GetTaskRunner(TaskType::kInternalMedia)) {}
BaseAudioContext::~BaseAudioContext() {
{
......@@ -760,12 +762,12 @@ void BaseAudioContext::HandlePostRenderTasks(const AudioBus* destination_bus) {
was_audible_ = is_audible;
if (is_audible) {
PostCrossThreadTask(
*Platform::Current()->MainThread()->GetTaskRunner(), FROM_HERE,
*task_runner_, FROM_HERE,
CrossThreadBind(&BaseAudioContext::NotifyAudibleAudioStarted,
WrapCrossThreadPersistent(this)));
} else {
PostCrossThreadTask(
*Platform::Current()->MainThread()->GetTaskRunner(), FROM_HERE,
*task_runner_, FROM_HERE,
CrossThreadBind(&BaseAudioContext::NotifyAudibleAudioStopped,
WrapCrossThreadPersistent(this)));
}
......@@ -848,7 +850,7 @@ void BaseAudioContext::ScheduleMainThreadCleanup() {
if (has_posted_cleanup_task_)
return;
PostCrossThreadTask(
*Platform::Current()->MainThread()->GetTaskRunner(), FROM_HERE,
*task_runner_, FROM_HERE,
CrossThreadBind(&BaseAudioContext::PerformCleanupOnMainThread,
WrapCrossThreadPersistent(this)));
has_posted_cleanup_task_ = true;
......
......@@ -49,6 +49,10 @@
#include "third_party/blink/renderer/platform/wtf/threading.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace blink {
class AnalyserNode;
......@@ -466,6 +470,8 @@ class MODULES_EXPORT BaseAudioContext
// determine audibility on render quantum boundaries, so counting quanta is
// all that's needed.
size_t total_audible_renders_ = 0;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
};
} // namespace blink
......
......@@ -261,11 +261,15 @@ void DeferredTaskHandler::UpdateChangedChannelInterpretation() {
deferred_channel_interpretation_change_.clear();
}
DeferredTaskHandler::DeferredTaskHandler()
: automatic_pull_nodes_need_updating_(false), audio_thread_(0) {}
DeferredTaskHandler::DeferredTaskHandler(
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
: automatic_pull_nodes_need_updating_(false),
task_runner_(std::move(task_runner)),
audio_thread_(0) {}
scoped_refptr<DeferredTaskHandler> DeferredTaskHandler::Create() {
return base::AdoptRef(new DeferredTaskHandler());
scoped_refptr<DeferredTaskHandler> DeferredTaskHandler::Create(
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
return base::AdoptRef(new DeferredTaskHandler(std::move(task_runner)));
}
DeferredTaskHandler::~DeferredTaskHandler() {
......@@ -319,7 +323,7 @@ void DeferredTaskHandler::RequestToDeleteHandlersOnMainThread() {
deletable_orphan_handlers_.AppendVector(rendering_orphan_handlers_);
rendering_orphan_handlers_.clear();
PostCrossThreadTask(
*Platform::Current()->MainThread()->GetTaskRunner(), FROM_HERE,
*task_runner_, FROM_HERE,
CrossThreadBind(&DeferredTaskHandler::DeleteHandlersOnMainThread,
scoped_refptr<DeferredTaskHandler>(this)));
}
......
......@@ -35,6 +35,10 @@
#include "third_party/blink/renderer/platform/wtf/threading_primitives.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace blink {
class BaseAudioContext;
......@@ -59,7 +63,8 @@ class AudioSummingJunction;
class MODULES_EXPORT DeferredTaskHandler final
: public ThreadSafeRefCounted<DeferredTaskHandler> {
public:
static scoped_refptr<DeferredTaskHandler> Create();
static scoped_refptr<DeferredTaskHandler> Create(
scoped_refptr<base::SingleThreadTaskRunner> task_runner);
~DeferredTaskHandler();
void HandleDeferredTasks();
......@@ -180,7 +185,7 @@ class MODULES_EXPORT DeferredTaskHandler final
};
private:
DeferredTaskHandler();
explicit DeferredTaskHandler(scoped_refptr<base::SingleThreadTaskRunner>);
void UpdateAutomaticPullNodes();
void UpdateChangedChannelCountMode();
void UpdateChangedChannelInterpretation();
......@@ -227,6 +232,8 @@ class MODULES_EXPORT DeferredTaskHandler final
// main thread will disable the outputs.
Vector<scoped_refptr<AudioHandler>> finished_tail_processing_handlers_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
// Graph locking.
RecursiveMutex context_graph_mutex_;
volatile ThreadIdentifier audio_thread_;
......
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