Commit 6ca7b664 authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

[MBI] Use per-AgentSchedulingGroup task runners for RemoteFrame's mojo interfaces

Context:

RemoteFrame’s mojo interfaces should be associated with per-AgentSchedulingGroup task runners instead of per-thread task runners.

What this CL does:

Use per-AgentSchedulingGroup task runners for AgentSchedulingGroup’s mojo interfaces instead of per-thread task runners.

Bug: 1105403
Change-Id: Ia4e2885163bb73a73e4a73d6459f37e68738e18f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2497961Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821490}
parent 1e924c3b
...@@ -109,9 +109,12 @@ RemoteFrame::RemoteFrame( ...@@ -109,9 +109,12 @@ RemoteFrame::RemoteFrame(
frame_token, frame_token,
MakeGarbageCollected<RemoteWindowProxyManager>(*this), MakeGarbageCollected<RemoteWindowProxyManager>(*this),
inheriting_agent_factory), inheriting_agent_factory),
interface_registry_( interface_registry_(interface_registry
interface_registry ? interface_registry ? interface_registry
: InterfaceRegistry::GetEmptyInterfaceRegistry()) { : InterfaceRegistry::GetEmptyInterfaceRegistry()),
task_runner_(page.GetPageScheduler()
->GetAgentGroupScheduler()
.DefaultTaskRunner()) {
// TODO(crbug.com/1094850): Remove this check once the renderer is correctly // TODO(crbug.com/1094850): Remove this check once the renderer is correctly
// handling errors during the creation of HTML portal elements, which would // handling errors during the creation of HTML portal elements, which would
// otherwise cause RemoteFrame() being created with empty frame tokens. // otherwise cause RemoteFrame() being created with empty frame tokens.
...@@ -126,8 +129,9 @@ RemoteFrame::RemoteFrame( ...@@ -126,8 +129,9 @@ RemoteFrame::RemoteFrame(
interface_registry->AddAssociatedInterface(WTF::BindRepeating( interface_registry->AddAssociatedInterface(WTF::BindRepeating(
&RemoteFrame::BindToReceiver, WrapWeakPersistent(this))); &RemoteFrame::BindToReceiver, WrapWeakPersistent(this)));
DCHECK(task_runner_);
associated_interface_provider->GetInterface( associated_interface_provider->GetInterface(
remote_frame_host_remote_.BindNewEndpointAndPassReceiver()); remote_frame_host_remote_.BindNewEndpointAndPassReceiver(task_runner_));
UpdateInertIfPossible(); UpdateInertIfPossible();
UpdateInheritedEffectiveTouchActionIfPossible(); UpdateInheritedEffectiveTouchActionIfPossible();
...@@ -832,14 +836,14 @@ void RemoteFrame::BindToReceiver( ...@@ -832,14 +836,14 @@ void RemoteFrame::BindToReceiver(
RemoteFrame* frame, RemoteFrame* frame,
mojo::PendingAssociatedReceiver<mojom::blink::RemoteFrame> receiver) { mojo::PendingAssociatedReceiver<mojom::blink::RemoteFrame> receiver) {
DCHECK(frame); DCHECK(frame);
frame->receiver_.Bind(std::move(receiver)); frame->receiver_.Bind(std::move(receiver), frame->task_runner_);
} }
void RemoteFrame::BindToMainFrameReceiver( void RemoteFrame::BindToMainFrameReceiver(
RemoteFrame* frame, RemoteFrame* frame,
mojo::PendingAssociatedReceiver<mojom::blink::RemoteMainFrame> receiver) { mojo::PendingAssociatedReceiver<mojom::blink::RemoteMainFrame> receiver) {
DCHECK(frame); DCHECK(frame);
frame->main_frame_receiver_.Bind(std::move(receiver)); frame->main_frame_receiver_.Bind(std::move(receiver), frame->task_runner_);
} }
} // namespace blink } // namespace blink
...@@ -228,6 +228,7 @@ class CORE_EXPORT RemoteFrame final : public Frame, ...@@ -228,6 +228,7 @@ class CORE_EXPORT RemoteFrame final : public Frame,
mojo::AssociatedReceiver<mojom::blink::RemoteFrame> receiver_{this}; mojo::AssociatedReceiver<mojom::blink::RemoteFrame> receiver_{this};
mojo::AssociatedReceiver<mojom::blink::RemoteMainFrame> main_frame_receiver_{ mojo::AssociatedReceiver<mojom::blink::RemoteMainFrame> main_frame_receiver_{
this}; this};
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
}; };
inline RemoteFrameView* RemoteFrame::View() const { inline RemoteFrameView* RemoteFrame::View() const {
......
...@@ -92,10 +92,28 @@ class DummyFrameScheduler : public FrameScheduler { ...@@ -92,10 +92,28 @@ class DummyFrameScheduler : public FrameScheduler {
DISALLOW_COPY_AND_ASSIGN(DummyFrameScheduler); DISALLOW_COPY_AND_ASSIGN(DummyFrameScheduler);
}; };
class DummyAgentGroupScheduler : public AgentGroupScheduler {
public:
DummyAgentGroupScheduler() = default;
~DummyAgentGroupScheduler() override = default;
AgentGroupScheduler& AsAgentGroupScheduler() override { return *this; }
std::unique_ptr<PageScheduler> CreatePageScheduler(
PageScheduler::Delegate*) override {
return CreateDummyPageScheduler();
}
scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override {
return base::ThreadTaskRunnerHandle::Get();
}
private:
DISALLOW_COPY_AND_ASSIGN(DummyAgentGroupScheduler);
};
class DummyPageScheduler : public PageScheduler { class DummyPageScheduler : public PageScheduler {
public: public:
DummyPageScheduler() {} DummyPageScheduler()
~DummyPageScheduler() override {} : agent_group_scheduler_(std::make_unique<DummyAgentGroupScheduler>()) {}
~DummyPageScheduler() override = default;
std::unique_ptr<FrameScheduler> CreateFrameScheduler( std::unique_ptr<FrameScheduler> CreateFrameScheduler(
FrameScheduler::Delegate* delegate, FrameScheduler::Delegate* delegate,
...@@ -132,26 +150,13 @@ class DummyPageScheduler : public PageScheduler { ...@@ -132,26 +150,13 @@ class DummyPageScheduler : public PageScheduler {
WebScopedVirtualTimePauser::VirtualTaskDuration) override { WebScopedVirtualTimePauser::VirtualTaskDuration) override {
return WebScopedVirtualTimePauser(); return WebScopedVirtualTimePauser();
} }
scheduler::WebAgentGroupScheduler& GetAgentGroupScheduler() override {
private: return *agent_group_scheduler_;
DISALLOW_COPY_AND_ASSIGN(DummyPageScheduler);
};
class DummyAgentGroupScheduler : public AgentGroupScheduler {
public:
DummyAgentGroupScheduler() = default;
~DummyAgentGroupScheduler() override = default;
AgentGroupScheduler& AsAgentGroupScheduler() override { return *this; }
std::unique_ptr<PageScheduler> CreatePageScheduler(
PageScheduler::Delegate*) override {
return CreateDummyPageScheduler();
}
scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override {
return base::ThreadTaskRunnerHandle::Get();
} }
private: private:
DISALLOW_COPY_AND_ASSIGN(DummyAgentGroupScheduler); std::unique_ptr<DummyAgentGroupScheduler> agent_group_scheduler_;
DISALLOW_COPY_AND_ASSIGN(DummyPageScheduler);
}; };
// TODO(altimin,yutak): Merge with SimpleThread in platform.cc. // TODO(altimin,yutak): Merge with SimpleThread in platform.cc.
......
...@@ -115,7 +115,7 @@ class PLATFORM_EXPORT PageSchedulerImpl : public PageScheduler { ...@@ -115,7 +115,7 @@ class PLATFORM_EXPORT PageSchedulerImpl : public PageScheduler {
bool IsOrdinary() const; bool IsOrdinary() const;
MainThreadSchedulerImpl* GetMainThreadScheduler() const; MainThreadSchedulerImpl* GetMainThreadScheduler() const;
AgentGroupSchedulerImpl& GetAgentGroupScheduler(); AgentGroupSchedulerImpl& GetAgentGroupScheduler() override;
void Unregister(FrameSchedulerImpl*); void Unregister(FrameSchedulerImpl*);
void OnNavigation(); void OnNavigation();
......
...@@ -18,6 +18,10 @@ ...@@ -18,6 +18,10 @@
namespace blink { namespace blink {
namespace scheduler {
class WebAgentGroupScheduler;
} // namespace scheduler
class PLATFORM_EXPORT PageScheduler { class PLATFORM_EXPORT PageScheduler {
public: public:
class PLATFORM_EXPORT Delegate { class PLATFORM_EXPORT Delegate {
...@@ -156,6 +160,9 @@ class PLATFORM_EXPORT PageScheduler { ...@@ -156,6 +160,9 @@ class PLATFORM_EXPORT PageScheduler {
virtual WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( virtual WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
const String& name, const String& name,
WebScopedVirtualTimePauser::VirtualTaskDuration) = 0; WebScopedVirtualTimePauser::VirtualTaskDuration) = 0;
// Returns WebAgentGroupScheduler
virtual scheduler::WebAgentGroupScheduler& GetAgentGroupScheduler() = 0;
}; };
} // namespace blink } // namespace blink
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_PAGE_SCHEDULER_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_PAGE_SCHEDULER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_PAGE_SCHEDULER_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_PAGE_SCHEDULER_H_
#include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
#include "third_party/blink/renderer/platform/scheduler/public/page_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/page_scheduler.h"
namespace blink { namespace blink {
...@@ -14,7 +15,8 @@ class FakePageScheduler final : public PageScheduler { ...@@ -14,7 +15,8 @@ class FakePageScheduler final : public PageScheduler {
public: public:
FakePageScheduler(bool is_audio_playing, bool is_throttling_exempt) FakePageScheduler(bool is_audio_playing, bool is_throttling_exempt)
: is_audio_playing_(is_audio_playing), : is_audio_playing_(is_audio_playing),
is_throttling_exempt_(is_throttling_exempt) {} is_throttling_exempt_(is_throttling_exempt),
agent_group_scheduler_(WebAgentGroupScheduler::CreateForTesting()) {}
class Builder { class Builder {
public: public:
...@@ -85,10 +87,14 @@ class FakePageScheduler final : public PageScheduler { ...@@ -85,10 +87,14 @@ class FakePageScheduler final : public PageScheduler {
WebScopedVirtualTimePauser::VirtualTaskDuration) override { WebScopedVirtualTimePauser::VirtualTaskDuration) override {
return WebScopedVirtualTimePauser(); return WebScopedVirtualTimePauser();
} }
scheduler::WebAgentGroupScheduler& GetAgentGroupScheduler() override {
return *agent_group_scheduler_;
}
private: private:
bool is_audio_playing_; bool is_audio_playing_;
bool is_throttling_exempt_; bool is_throttling_exempt_;
std::unique_ptr<WebAgentGroupScheduler> agent_group_scheduler_;
DISALLOW_COPY_AND_ASSIGN(FakePageScheduler); DISALLOW_COPY_AND_ASSIGN(FakePageScheduler);
}; };
......
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