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