[MBI] Use per-AgentSchedulingGroup task runners for BrowserInterfaceBrokerProxy’s mojo interfaces
Context:
Per-AgentSchedulingGroup task runners should be used where appropriate.
What this CL does:
Use per-AgentSchedulingGroup task runners for BrowserInterfaceBrokerProxy’s mojo interfaces instead of per-thread task runners.
Bug: 1105403
Change-Id: I692cf7cc11af80e4b875f2d5b7492b44f58ef9ad
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2501170
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821488}
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 9b63b6c..8f5e4a40 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2020,7 +2020,8 @@
CHECK(params.browser_interface_broker.is_valid());
browser_interface_broker_proxy_.Bind(
- std::move(params.browser_interface_broker));
+ std::move(params.browser_interface_broker),
+ agent_scheduling_group_.agent_group_scheduler().DefaultTaskRunner());
// Must call after binding our own remote interfaces.
media_factory_.SetupMojo();
@@ -4334,7 +4335,8 @@
// remote interfaces. The interface requests will be serviced once the
// BrowserInterfaceBroker interface request is bound by the
// RenderFrameHostImpl.
- browser_interface_broker_receiver = browser_interface_broker_proxy_.Reset();
+ browser_interface_broker_receiver = browser_interface_broker_proxy_.Reset(
+ agent_scheduling_group_.agent_group_scheduler().DefaultTaskRunner());
// blink::WebAudioOutputIPCFactory::io_task_runner_ may be null in tests.
auto& factory = blink::WebAudioOutputIPCFactory::GetInstance();
diff --git a/third_party/blink/common/browser_interface_broker_proxy.cc b/third_party/blink/common/browser_interface_broker_proxy.cc
index 1dc9f8eaf..6605719 100644
--- a/third_party/blink/common/browser_interface_broker_proxy.cc
+++ b/third_party/blink/common/browser_interface_broker_proxy.cc
@@ -9,15 +9,19 @@
namespace blink {
void BrowserInterfaceBrokerProxy::Bind(
- mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker) {
- broker_ =
- mojo::Remote<blink::mojom::BrowserInterfaceBroker>(std::move(broker));
+ mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+ DCHECK(task_runner);
+ broker_ = mojo::Remote<blink::mojom::BrowserInterfaceBroker>(
+ std::move(broker), std::move(task_runner));
}
mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker>
-BrowserInterfaceBrokerProxy::Reset() {
+BrowserInterfaceBrokerProxy::Reset(
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+ DCHECK(task_runner);
broker_.reset();
- return broker_.BindNewPipeAndPassReceiver();
+ return broker_.BindNewPipeAndPassReceiver(std::move(task_runner));
}
void BrowserInterfaceBrokerProxy::GetInterface(
@@ -59,7 +63,7 @@
auto& proxy = proxy_slot->GetOrCreateValue();
mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> remote;
ignore_result(remote.InitWithNewPipeAndPassReceiver());
- proxy.Bind(std::move(remote));
+ proxy.Bind(std::move(remote), base::ThreadTaskRunnerHandle::Get());
}
return proxy_slot->GetOrCreateValue();
diff --git a/third_party/blink/public/common/browser_interface_broker_proxy.h b/third_party/blink/public/common/browser_interface_broker_proxy.h
index 599170cc..b9044cf 100644
--- a/third_party/blink/public/common/browser_interface_broker_proxy.h
+++ b/third_party/blink/public/common/browser_interface_broker_proxy.h
@@ -18,8 +18,10 @@
class BLINK_COMMON_EXPORT BrowserInterfaceBrokerProxy {
public:
BrowserInterfaceBrokerProxy() = default;
- void Bind(mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>);
- mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker> Reset();
+ void Bind(mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+ mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker> Reset(
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner);
// Asks the browser to bind the given receiver. If a non-null testing override
// was set by |SetBinderForTesting()|, the request will be intercepted by that
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.cc b/third_party/blink/renderer/core/workers/worker_global_scope.cc
index 494404e6..2a34728 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.cc
@@ -568,7 +568,8 @@
auto pipe = creation_params->browser_interface_broker.PassPipe();
browser_interface_broker_proxy_.Bind(
mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>(
- std::move(pipe), blink::mojom::BrowserInterfaceBroker::Version_));
+ std::move(pipe), blink::mojom::BrowserInterfaceBroker::Version_),
+ GetTaskRunner(TaskType::kInternalDefault));
}
// A FeaturePolicy is created by FeaturePolicy::CreateFromParentPolicy, even