Commit 0965220f authored by Tal Pressman's avatar Tal Pressman Committed by Commit Bot

Simplify page/frame scheduler construction.

Instead of the ctor registering the newly created scheduler with the
"parent" scheduler (page scheduler for frame scheduler, main thread
scheduler for page scheduler), the parent now creates the new child
scheduler and then registers it.

Change-Id: I903ac5d459827fabbce86b6b5a95b747f856e9ce
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2198447
Commit-Queue: Tal Pressman <talp@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#769606}
parent 526e1d7f
...@@ -95,17 +95,16 @@ FrameSchedulerImpl::PauseSubresourceLoadingHandleImpl:: ...@@ -95,17 +95,16 @@ FrameSchedulerImpl::PauseSubresourceLoadingHandleImpl::
frame_scheduler_->RemovePauseSubresourceLoadingHandle(); frame_scheduler_->RemovePauseSubresourceLoadingHandle();
} }
std::unique_ptr<FrameSchedulerImpl> FrameSchedulerImpl::Create( FrameSchedulerImpl::FrameSchedulerImpl(
PageSchedulerImpl* parent_page_scheduler, PageSchedulerImpl* parent_page_scheduler,
FrameScheduler::Delegate* delegate, FrameScheduler::Delegate* delegate,
base::trace_event::BlameContext* blame_context, base::trace_event::BlameContext* blame_context,
FrameScheduler::FrameType frame_type) { FrameScheduler::FrameType frame_type)
std::unique_ptr<FrameSchedulerImpl> frame_scheduler(new FrameSchedulerImpl( : FrameSchedulerImpl(parent_page_scheduler->GetMainThreadScheduler(),
parent_page_scheduler->GetMainThreadScheduler(), parent_page_scheduler, parent_page_scheduler,
delegate, blame_context, frame_type)); delegate,
parent_page_scheduler->RegisterFrameSchedulerImpl(frame_scheduler.get()); blame_context,
return frame_scheduler; frame_type) {}
}
FrameSchedulerImpl::FrameSchedulerImpl( FrameSchedulerImpl::FrameSchedulerImpl(
MainThreadSchedulerImpl* main_thread_scheduler, MainThreadSchedulerImpl* main_thread_scheduler,
......
...@@ -73,11 +73,10 @@ class PageSchedulerImplTest; ...@@ -73,11 +73,10 @@ class PageSchedulerImplTest;
class PLATFORM_EXPORT FrameSchedulerImpl : public FrameScheduler, class PLATFORM_EXPORT FrameSchedulerImpl : public FrameScheduler,
FrameTaskQueueController::Delegate { FrameTaskQueueController::Delegate {
public: public:
static std::unique_ptr<FrameSchedulerImpl> Create( FrameSchedulerImpl(PageSchedulerImpl* page_scheduler,
PageSchedulerImpl* page_scheduler, FrameScheduler::Delegate* delegate,
FrameScheduler::Delegate* delegate, base::trace_event::BlameContext* blame_context,
base::trace_event::BlameContext* blame_context, FrameScheduler::FrameType frame_type);
FrameScheduler::FrameType frame_type);
~FrameSchedulerImpl() override; ~FrameSchedulerImpl() override;
// FrameOrWorkerScheduler implementation: // FrameOrWorkerScheduler implementation:
......
...@@ -32,7 +32,7 @@ namespace blink { ...@@ -32,7 +32,7 @@ namespace blink {
namespace scheduler { namespace scheduler {
class FrameTaskQueueControllerTest : public testing::Test, class FrameTaskQueueControllerTest : public testing::Test,
FrameTaskQueueController::Delegate { public FrameTaskQueueController::Delegate {
public: public:
FrameTaskQueueControllerTest() FrameTaskQueueControllerTest()
: task_environment_( : task_environment_(
...@@ -43,17 +43,17 @@ class FrameTaskQueueControllerTest : public testing::Test, ...@@ -43,17 +43,17 @@ class FrameTaskQueueControllerTest : public testing::Test,
~FrameTaskQueueControllerTest() override = default; ~FrameTaskQueueControllerTest() override = default;
void SetUp() override { void SetUp() override {
scheduler_.reset(new MainThreadSchedulerImpl( scheduler_ = std::make_unique<MainThreadSchedulerImpl>(
base::sequence_manager::SequenceManagerForTest::Create( base::sequence_manager::SequenceManagerForTest::Create(
nullptr, task_environment_.GetMainThreadTaskRunner(), nullptr, task_environment_.GetMainThreadTaskRunner(),
task_environment_.GetMockTickClock()), task_environment_.GetMockTickClock()),
base::nullopt)); base::nullopt);
page_scheduler_.reset(new PageSchedulerImpl(nullptr, scheduler_.get())); page_scheduler_ = scheduler_->CreatePageScheduler(nullptr);
frame_scheduler_ = frame_scheduler_ = page_scheduler_->CreateFrameScheduler(
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, nullptr, nullptr, FrameScheduler::FrameType::kSubframe);
FrameScheduler::FrameType::kSubframe); frame_task_queue_controller_ = std::make_unique<FrameTaskQueueController>(
frame_task_queue_controller_.reset(new FrameTaskQueueController( scheduler_.get(),
scheduler_.get(), frame_scheduler_.get(), this)); static_cast<FrameSchedulerImpl*>(frame_scheduler_.get()), this);
} }
void TearDown() override { void TearDown() override {
...@@ -113,8 +113,8 @@ class FrameTaskQueueControllerTest : public testing::Test, ...@@ -113,8 +113,8 @@ class FrameTaskQueueControllerTest : public testing::Test,
protected: protected:
base::test::TaskEnvironment task_environment_; base::test::TaskEnvironment task_environment_;
std::unique_ptr<MainThreadSchedulerImpl> scheduler_; std::unique_ptr<MainThreadSchedulerImpl> scheduler_;
std::unique_ptr<PageSchedulerImpl> page_scheduler_; std::unique_ptr<PageScheduler> page_scheduler_;
std::unique_ptr<FrameSchedulerImpl> frame_scheduler_; std::unique_ptr<FrameScheduler> frame_scheduler_;
std::unique_ptr<FrameTaskQueueController> frame_task_queue_controller_; std::unique_ptr<FrameTaskQueueController> frame_task_queue_controller_;
private: private:
......
...@@ -2368,7 +2368,9 @@ MainThreadSchedulerImpl::NonWakingTaskRunner() { ...@@ -2368,7 +2368,9 @@ MainThreadSchedulerImpl::NonWakingTaskRunner() {
std::unique_ptr<PageScheduler> MainThreadSchedulerImpl::CreatePageScheduler( std::unique_ptr<PageScheduler> MainThreadSchedulerImpl::CreatePageScheduler(
PageScheduler::Delegate* delegate) { PageScheduler::Delegate* delegate) {
return std::make_unique<PageSchedulerImpl>(delegate, this); auto page_scheduler = std::make_unique<PageSchedulerImpl>(delegate, this);
AddPageScheduler(page_scheduler.get());
return page_scheduler;
} }
std::unique_ptr<ThreadScheduler::RendererPauseHandle> std::unique_ptr<ThreadScheduler::RendererPauseHandle>
......
...@@ -69,6 +69,7 @@ class FrameSchedulerImplTest; ...@@ -69,6 +69,7 @@ class FrameSchedulerImplTest;
namespace main_thread_scheduler_impl_unittest { namespace main_thread_scheduler_impl_unittest {
class MainThreadSchedulerImplForTest; class MainThreadSchedulerImplForTest;
class MainThreadSchedulerImplTest; class MainThreadSchedulerImplTest;
class MockPageSchedulerImpl;
FORWARD_DECLARE_TEST(MainThreadSchedulerImplTest, ShouldIgnoreTaskForUkm); FORWARD_DECLARE_TEST(MainThreadSchedulerImplTest, ShouldIgnoreTaskForUkm);
FORWARD_DECLARE_TEST(MainThreadSchedulerImplTest, Tracing); FORWARD_DECLARE_TEST(MainThreadSchedulerImplTest, Tracing);
} // namespace main_thread_scheduler_impl_unittest } // namespace main_thread_scheduler_impl_unittest
...@@ -313,7 +314,6 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl ...@@ -313,7 +314,6 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
void DecrementVirtualTimePauseCount(); void DecrementVirtualTimePauseCount();
void MaybeAdvanceVirtualTime(base::TimeTicks new_virtual_time); void MaybeAdvanceVirtualTime(base::TimeTicks new_virtual_time);
void AddPageScheduler(PageSchedulerImpl*);
void RemovePageScheduler(PageSchedulerImpl*); void RemovePageScheduler(PageSchedulerImpl*);
// Called by an associated PageScheduler when frozen or resumed. // Called by an associated PageScheduler when frozen or resumed.
...@@ -454,6 +454,7 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl ...@@ -454,6 +454,7 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
friend class frame_scheduler_impl_unittest::FrameSchedulerImplTest; friend class frame_scheduler_impl_unittest::FrameSchedulerImplTest;
friend class main_thread_scheduler_impl_unittest:: friend class main_thread_scheduler_impl_unittest::
MainThreadSchedulerImplForTest; MainThreadSchedulerImplForTest;
friend class main_thread_scheduler_impl_unittest::MockPageSchedulerImpl;
friend class main_thread_scheduler_impl_unittest::MainThreadSchedulerImplTest; friend class main_thread_scheduler_impl_unittest::MainThreadSchedulerImplTest;
friend class CompositorPriorityExperiments; friend class CompositorPriorityExperiments;
...@@ -473,6 +474,8 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl ...@@ -473,6 +474,8 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
static const char* TimeDomainTypeToString(TimeDomainType domain_type); static const char* TimeDomainTypeToString(TimeDomainType domain_type);
void AddPageScheduler(PageSchedulerImpl*);
bool ContainsLocalMainFrame(); bool ContainsLocalMainFrame();
bool IsAnyMainFrameWaitingForFirstContentfulPaint() const; bool IsAnyMainFrameWaitingForFirstContentfulPaint() const;
......
...@@ -48,6 +48,7 @@ namespace scheduler { ...@@ -48,6 +48,7 @@ namespace scheduler {
// To avoid symbol collisions in jumbo builds. // To avoid symbol collisions in jumbo builds.
namespace main_thread_scheduler_impl_unittest { namespace main_thread_scheduler_impl_unittest {
namespace {
using testing::InSequence; using testing::InSequence;
using testing::Mock; using testing::Mock;
using testing::NiceMock; using testing::NiceMock;
...@@ -57,6 +58,34 @@ using InputEventState = WebThreadScheduler::InputEventState; ...@@ -57,6 +58,34 @@ using InputEventState = WebThreadScheduler::InputEventState;
using base::sequence_manager::FakeTask; using base::sequence_manager::FakeTask;
using base::sequence_manager::FakeTaskTiming; using base::sequence_manager::FakeTaskTiming;
// This is a wrapper around MainThreadSchedulerImpl::CreatePageScheduler, that
// returns the PageScheduler as a PageSchedulerImpl.
std::unique_ptr<PageSchedulerImpl> CreatePageScheduler(
PageScheduler::Delegate* page_scheduler_delegate,
ThreadSchedulerImpl* scheduler) {
std::unique_ptr<PageScheduler> page_scheduler =
scheduler->CreatePageScheduler(page_scheduler_delegate);
std::unique_ptr<PageSchedulerImpl> page_scheduler_impl(
static_cast<PageSchedulerImpl*>(page_scheduler.release()));
return page_scheduler_impl;
}
// This is a wrapper around PageSchedulerImpl::CreateFrameScheduler, that
// returns the FrameScheduler as a FrameSchedulerImpl.
std::unique_ptr<FrameSchedulerImpl> CreateFrameScheduler(
PageSchedulerImpl* page_scheduler,
FrameScheduler::Delegate* delegate,
blink::BlameContext* blame_context,
FrameScheduler::FrameType frame_type) {
auto frame_scheduler =
page_scheduler->CreateFrameScheduler(delegate, blame_context, frame_type);
std::unique_ptr<FrameSchedulerImpl> frame_scheduler_impl(
static_cast<FrameSchedulerImpl*>(frame_scheduler.release()));
return frame_scheduler_impl;
}
} // namespace
class FakeInputEvent : public blink::WebInputEvent { class FakeInputEvent : public blink::WebInputEvent {
public: public:
explicit FakeInputEvent(blink::WebInputEvent::Type event_type, explicit FakeInputEvent(blink::WebInputEvent::Type event_type,
...@@ -247,6 +276,10 @@ class MockPageSchedulerImpl : public PageSchedulerImpl { ...@@ -247,6 +276,10 @@ class MockPageSchedulerImpl : public PageSchedulerImpl {
public: public:
explicit MockPageSchedulerImpl(MainThreadSchedulerImpl* scheduler) explicit MockPageSchedulerImpl(MainThreadSchedulerImpl* scheduler)
: PageSchedulerImpl(nullptr, scheduler) { : PageSchedulerImpl(nullptr, scheduler) {
// This would normally be called by
// MainThreadSchedulerImpl::CreatePageScheduler.
scheduler->AddPageScheduler(this);
ON_CALL(*this, IsWaitingForMainFrameContentfulPaint) ON_CALL(*this, IsWaitingForMainFrameContentfulPaint)
.WillByDefault(Return(true)); .WillByDefault(Return(true));
ON_CALL(*this, IsWaitingForMainFrameMeaningfulPaint) ON_CALL(*this, IsWaitingForMainFrameMeaningfulPaint)
...@@ -392,8 +425,8 @@ class MainThreadSchedulerImplTest : public testing::Test { ...@@ -392,8 +425,8 @@ class MainThreadSchedulerImplTest : public testing::Test {
page_scheduler_ = page_scheduler_ =
std::make_unique<NiceMock<MockPageSchedulerImpl>>(scheduler_.get()); std::make_unique<NiceMock<MockPageSchedulerImpl>>(scheduler_.get());
main_frame_scheduler_ = main_frame_scheduler_ =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kMainFrame); FrameScheduler::FrameType::kMainFrame);
widget_scheduler_ = scheduler_->CreateWidgetScheduler(); widget_scheduler_ = scheduler_->CreateWidgetScheduler();
input_task_runner_ = widget_scheduler_->InputTaskRunner(); input_task_runner_ = widget_scheduler_->InputTaskRunner();
...@@ -3085,13 +3118,11 @@ TEST_F(MainThreadSchedulerImplTest, EnableVirtualTime) { ...@@ -3085,13 +3118,11 @@ TEST_F(MainThreadSchedulerImplTest, EnableVirtualTime) {
} }
TEST_F(MainThreadSchedulerImplTest, EnableVirtualTimeAfterThrottling) { TEST_F(MainThreadSchedulerImplTest, EnableVirtualTimeAfterThrottling) {
std::unique_ptr<PageSchedulerImpl> page_scheduler = auto page_scheduler = CreatePageScheduler(nullptr, scheduler_.get());
base::WrapUnique(new PageSchedulerImpl(nullptr, scheduler_.get()));
scheduler_->AddPageScheduler(page_scheduler.get());
std::unique_ptr<FrameSchedulerImpl> frame_scheduler = std::unique_ptr<FrameSchedulerImpl> frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
TaskQueue* timer_tq = ThrottleableTaskQueue(frame_scheduler.get()).get(); TaskQueue* timer_tq = ThrottleableTaskQueue(frame_scheduler.get()).get();
...@@ -3221,15 +3252,15 @@ TEST_F(MainThreadSchedulerImplTest, Tracing) { ...@@ -3221,15 +3252,15 @@ TEST_F(MainThreadSchedulerImplTest, Tracing) {
// traced value. This test checks that no internal checks fire during this. // traced value. This test checks that no internal checks fire during this.
std::unique_ptr<PageSchedulerImpl> page_scheduler1 = std::unique_ptr<PageSchedulerImpl> page_scheduler1 =
base::WrapUnique(new PageSchedulerImpl(nullptr, scheduler_.get())); CreatePageScheduler(nullptr, scheduler_.get());
scheduler_->AddPageScheduler(page_scheduler1.get()); scheduler_->AddPageScheduler(page_scheduler1.get());
std::unique_ptr<FrameSchedulerImpl> frame_scheduler = std::unique_ptr<FrameSchedulerImpl> frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler1.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler1.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
std::unique_ptr<PageSchedulerImpl> page_scheduler2 = std::unique_ptr<PageSchedulerImpl> page_scheduler2 =
base::WrapUnique(new PageSchedulerImpl(nullptr, scheduler_.get())); CreatePageScheduler(nullptr, scheduler_.get());
scheduler_->AddPageScheduler(page_scheduler2.get()); scheduler_->AddPageScheduler(page_scheduler2.get());
CPUTimeBudgetPool* time_budget_pool = CPUTimeBudgetPool* time_budget_pool =
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h"
#include <memory>
#include "base/bind.h" #include "base/bind.h"
#include "base/check_op.h" #include "base/check_op.h"
...@@ -163,7 +164,6 @@ PageSchedulerImpl::PageSchedulerImpl( ...@@ -163,7 +164,6 @@ PageSchedulerImpl::PageSchedulerImpl(
this, kDefaultPageVisibility == PageVisibilityState::kVisible this, kDefaultPageVisibility == PageVisibilityState::kVisible
? PageLifecycleState::kActive ? PageLifecycleState::kActive
: PageLifecycleState::kHiddenBackgrounded)); : PageLifecycleState::kHiddenBackgrounded));
main_thread_scheduler->AddPageScheduler(this);
do_throttle_page_callback_.Reset(base::BindRepeating( do_throttle_page_callback_.Reset(base::BindRepeating(
&PageSchedulerImpl::DoThrottlePage, base::Unretained(this))); &PageSchedulerImpl::DoThrottlePage, base::Unretained(this)));
on_audio_silent_closure_.Reset(base::BindRepeating( on_audio_silent_closure_.Reset(base::BindRepeating(
...@@ -333,7 +333,10 @@ std::unique_ptr<blink::FrameScheduler> PageSchedulerImpl::CreateFrameScheduler( ...@@ -333,7 +333,10 @@ std::unique_ptr<blink::FrameScheduler> PageSchedulerImpl::CreateFrameScheduler(
FrameScheduler::Delegate* delegate, FrameScheduler::Delegate* delegate,
blink::BlameContext* blame_context, blink::BlameContext* blame_context,
FrameScheduler::FrameType frame_type) { FrameScheduler::FrameType frame_type) {
return FrameSchedulerImpl::Create(this, delegate, blame_context, frame_type); auto frame_scheduler = std::make_unique<FrameSchedulerImpl>(
this, delegate, blame_context, frame_type);
RegisterFrameSchedulerImpl(frame_scheduler.get());
return frame_scheduler;
} }
void PageSchedulerImpl::Unregister(FrameSchedulerImpl* frame_scheduler) { void PageSchedulerImpl::Unregister(FrameSchedulerImpl* frame_scheduler) {
......
...@@ -100,8 +100,6 @@ class PLATFORM_EXPORT PageSchedulerImpl : public PageScheduler { ...@@ -100,8 +100,6 @@ class PLATFORM_EXPORT PageSchedulerImpl : public PageScheduler {
// owned by a web view. // owned by a web view.
bool IsOrdinary() const; bool IsOrdinary() const;
void RegisterFrameSchedulerImpl(FrameSchedulerImpl* frame_scheduler);
MainThreadSchedulerImpl* GetMainThreadScheduler() const; MainThreadSchedulerImpl* GetMainThreadScheduler() const;
void Unregister(FrameSchedulerImpl*); void Unregister(FrameSchedulerImpl*);
...@@ -192,6 +190,8 @@ class PLATFORM_EXPORT PageSchedulerImpl : public PageScheduler { ...@@ -192,6 +190,8 @@ class PLATFORM_EXPORT PageSchedulerImpl : public PageScheduler {
DISALLOW_COPY_AND_ASSIGN(PageLifecycleStateTracker); DISALLOW_COPY_AND_ASSIGN(PageLifecycleStateTracker);
}; };
void RegisterFrameSchedulerImpl(FrameSchedulerImpl* frame_scheduler);
// We do not throttle anything while audio is played and shortly after that. // We do not throttle anything while audio is played and shortly after that.
static constexpr base::TimeDelta kRecentAudioDelay = static constexpr base::TimeDelta kRecentAudioDelay =
base::TimeDelta::FromSeconds(5); base::TimeDelta::FromSeconds(5);
......
...@@ -43,6 +43,32 @@ namespace { ...@@ -43,6 +43,32 @@ namespace {
void IncrementCounter(int* counter) { void IncrementCounter(int* counter) {
++*counter; ++*counter;
} }
// This is a wrapper around MainThreadSchedulerImpl::CreatePageScheduler, that
// returns the PageScheduler as a PageSchedulerImpl.
std::unique_ptr<PageSchedulerImpl> CreatePageScheduler(
PageScheduler::Delegate* page_scheduler_delegate,
MainThreadSchedulerImpl* scheduler) {
std::unique_ptr<PageScheduler> page_scheduler =
scheduler->CreatePageScheduler(page_scheduler_delegate);
std::unique_ptr<PageSchedulerImpl> page_scheduler_impl(
static_cast<PageSchedulerImpl*>(page_scheduler.release()));
return page_scheduler_impl;
}
// This is a wrapper around PageSchedulerImpl::CreateFrameScheduler, that
// returns the FrameScheduler as a FrameSchedulerImpl.
std::unique_ptr<FrameSchedulerImpl> CreateFrameScheduler(
PageSchedulerImpl* page_scheduler,
FrameScheduler::Delegate* delegate,
blink::BlameContext* blame_context,
FrameScheduler::FrameType frame_type) {
auto frame_scheduler =
page_scheduler->CreateFrameScheduler(delegate, blame_context, frame_type);
std::unique_ptr<FrameSchedulerImpl> frame_scheduler_impl(
static_cast<FrameSchedulerImpl*>(frame_scheduler.release()));
return frame_scheduler_impl;
}
} // namespace } // namespace
using base::Bucket; using base::Bucket;
...@@ -84,16 +110,16 @@ class PageSchedulerImplTest : public testing::Test { ...@@ -84,16 +110,16 @@ class PageSchedulerImplTest : public testing::Test {
// A null clock triggers some assertions. // A null clock triggers some assertions.
test_task_runner_->AdvanceMockTickClock( test_task_runner_->AdvanceMockTickClock(
base::TimeDelta::FromMilliseconds(5)); base::TimeDelta::FromMilliseconds(5));
scheduler_.reset(new MainThreadSchedulerImpl( scheduler_ = std::make_unique<MainThreadSchedulerImpl>(
base::sequence_manager::SequenceManagerForTest::Create( base::sequence_manager::SequenceManagerForTest::Create(
nullptr, test_task_runner_, test_task_runner_->GetMockTickClock()), nullptr, test_task_runner_, test_task_runner_->GetMockTickClock()),
base::nullopt)); base::nullopt);
page_scheduler_delegate_.reset(new MockPageSchedulerDelegate()); page_scheduler_delegate_ = std::make_unique<MockPageSchedulerDelegate>();
page_scheduler_.reset(new PageSchedulerImpl(page_scheduler_delegate_.get(), page_scheduler_ =
scheduler_.get())); CreatePageScheduler(page_scheduler_delegate_.get(), scheduler_.get());
frame_scheduler_ = frame_scheduler_ =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
} }
void TearDown() override { void TearDown() override {
...@@ -361,11 +387,11 @@ TEST_F(PageSchedulerImplTest, RepeatingLoadingTask_PageInBackground) { ...@@ -361,11 +387,11 @@ TEST_F(PageSchedulerImplTest, RepeatingLoadingTask_PageInBackground) {
} }
TEST_F(PageSchedulerImplTest, RepeatingTimers_OneBackgroundOneForeground) { TEST_F(PageSchedulerImplTest, RepeatingTimers_OneBackgroundOneForeground) {
std::unique_ptr<PageSchedulerImpl> page_scheduler2( std::unique_ptr<PageSchedulerImpl> page_scheduler2 =
new PageSchedulerImpl(nullptr, scheduler_.get())); CreatePageScheduler(nullptr, scheduler_.get());
std::unique_ptr<FrameSchedulerImpl> frame_scheduler2 = std::unique_ptr<FrameSchedulerImpl> frame_scheduler2 =
FrameSchedulerImpl::Create(page_scheduler2.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler2.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
page_scheduler_->SetPageVisible(true); page_scheduler_->SetPageVisible(true);
page_scheduler2->SetPageVisible(false); page_scheduler2->SetPageVisible(false);
...@@ -622,8 +648,8 @@ TEST_F(PageSchedulerImplTest, VirtualTimeSettings_NewFrameScheduler) { ...@@ -622,8 +648,8 @@ TEST_F(PageSchedulerImplTest, VirtualTimeSettings_NewFrameScheduler) {
page_scheduler_->EnableVirtualTime(); page_scheduler_->EnableVirtualTime();
std::unique_ptr<FrameSchedulerImpl> frame_scheduler = std::unique_ptr<FrameSchedulerImpl> frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
ThrottleableTaskQueueForScheduler(frame_scheduler.get()) ThrottleableTaskQueueForScheduler(frame_scheduler.get())
->task_runner() ->task_runner()
...@@ -653,8 +679,8 @@ base::OnceClosure MakeDeletionTask(T* obj) { ...@@ -653,8 +679,8 @@ base::OnceClosure MakeDeletionTask(T* obj) {
TEST_F(PageSchedulerImplTest, DeleteFrameSchedulers_InTask) { TEST_F(PageSchedulerImplTest, DeleteFrameSchedulers_InTask) {
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
FrameSchedulerImpl* frame_scheduler = FrameSchedulerImpl* frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe) FrameScheduler::FrameType::kSubframe)
.release(); .release();
ThrottleableTaskQueueForScheduler(frame_scheduler) ThrottleableTaskQueueForScheduler(frame_scheduler)
->task_runner() ->task_runner()
...@@ -674,8 +700,8 @@ TEST_F(PageSchedulerImplTest, DeleteThrottledQueue_InTask) { ...@@ -674,8 +700,8 @@ TEST_F(PageSchedulerImplTest, DeleteThrottledQueue_InTask) {
page_scheduler_->SetPageVisible(false); page_scheduler_->SetPageVisible(false);
FrameSchedulerImpl* frame_scheduler = FrameSchedulerImpl* frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe) FrameScheduler::FrameType::kSubframe)
.release(); .release();
scoped_refptr<TaskQueue> timer_task_queue = scoped_refptr<TaskQueue> timer_task_queue =
ThrottleableTaskQueueForScheduler(frame_scheduler); ThrottleableTaskQueueForScheduler(frame_scheduler);
...@@ -727,8 +753,8 @@ TEST_F(PageSchedulerImplTest, ...@@ -727,8 +753,8 @@ TEST_F(PageSchedulerImplTest,
VirtualTimePolicy::kDeterministicLoading); VirtualTimePolicy::kDeterministicLoading);
std::unique_ptr<FrameSchedulerImpl> frame_scheduler = std::unique_ptr<FrameSchedulerImpl> frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
{ {
WebScopedVirtualTimePauser virtual_time_pauser = WebScopedVirtualTimePauser virtual_time_pauser =
...@@ -794,8 +820,8 @@ TEST_F(PageSchedulerImplTest, ...@@ -794,8 +820,8 @@ TEST_F(PageSchedulerImplTest,
base::TimeTicks time_second_task; base::TimeTicks time_second_task;
std::unique_ptr<FrameSchedulerImpl> frame_scheduler = std::unique_ptr<FrameSchedulerImpl> frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
// Pauses and unpauses virtual time, thereby advancing virtual time by an // Pauses and unpauses virtual time, thereby advancing virtual time by an
// additional 10ms due to WebScopedVirtualTimePauser's delay. // additional 10ms due to WebScopedVirtualTimePauser's delay.
...@@ -830,8 +856,8 @@ TEST_F(PageSchedulerImplTest, ...@@ -830,8 +856,8 @@ TEST_F(PageSchedulerImplTest,
VirtualTimePolicy::kDeterministicLoading); VirtualTimePolicy::kDeterministicLoading);
std::unique_ptr<FrameSchedulerImpl> frame_scheduler = std::unique_ptr<FrameSchedulerImpl> frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
WebScopedVirtualTimePauser virtual_time_pauser1 = WebScopedVirtualTimePauser virtual_time_pauser1 =
frame_scheduler->CreateWebScopedVirtualTimePauser( frame_scheduler->CreateWebScopedVirtualTimePauser(
...@@ -877,8 +903,8 @@ TEST_F(PageSchedulerImplTest, PauseTimersWhileVirtualTimeIsPaused) { ...@@ -877,8 +903,8 @@ TEST_F(PageSchedulerImplTest, PauseTimersWhileVirtualTimeIsPaused) {
Vector<int> run_order; Vector<int> run_order;
std::unique_ptr<FrameSchedulerImpl> frame_scheduler = std::unique_ptr<FrameSchedulerImpl> frame_scheduler =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
page_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::kPause); page_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::kPause);
page_scheduler_->EnableVirtualTime(); page_scheduler_->EnableVirtualTime();
...@@ -1099,13 +1125,13 @@ TEST_F(PageSchedulerImplTest, BackgroundTimerThrottling) { ...@@ -1099,13 +1125,13 @@ TEST_F(PageSchedulerImplTest, BackgroundTimerThrottling) {
budget_background_throttling_enabler(true); budget_background_throttling_enabler(true);
InitializeTrialParams(); InitializeTrialParams();
page_scheduler_.reset(new PageSchedulerImpl(nullptr, scheduler_.get())); page_scheduler_ = CreatePageScheduler(nullptr, scheduler_.get());
EXPECT_FALSE(page_scheduler_->IsThrottled()); EXPECT_FALSE(page_scheduler_->IsThrottled());
Vector<base::TimeTicks> run_times; Vector<base::TimeTicks> run_times;
frame_scheduler_ = frame_scheduler_ =
FrameSchedulerImpl::Create(page_scheduler_.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler_.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
page_scheduler_->SetPageVisible(true); page_scheduler_->SetPageVisible(true);
EXPECT_FALSE(page_scheduler_->IsThrottled()); EXPECT_FALSE(page_scheduler_->IsThrottled());
...@@ -1162,17 +1188,17 @@ TEST_F(PageSchedulerImplTest, OpenWebSocketExemptsFromBudgetThrottling) { ...@@ -1162,17 +1188,17 @@ TEST_F(PageSchedulerImplTest, OpenWebSocketExemptsFromBudgetThrottling) {
budget_background_throttling_enabler(true); budget_background_throttling_enabler(true);
InitializeTrialParams(); InitializeTrialParams();
std::unique_ptr<PageSchedulerImpl> page_scheduler( std::unique_ptr<PageSchedulerImpl> page_scheduler =
new PageSchedulerImpl(nullptr, scheduler_.get())); CreatePageScheduler(nullptr, scheduler_.get());
Vector<base::TimeTicks> run_times; Vector<base::TimeTicks> run_times;
std::unique_ptr<FrameSchedulerImpl> frame_scheduler1 = std::unique_ptr<FrameSchedulerImpl> frame_scheduler1 =
FrameSchedulerImpl::Create(page_scheduler.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
std::unique_ptr<FrameSchedulerImpl> frame_scheduler2 = std::unique_ptr<FrameSchedulerImpl> frame_scheduler2 =
FrameSchedulerImpl::Create(page_scheduler.get(), nullptr, nullptr, CreateFrameScheduler(page_scheduler.get(), nullptr, nullptr,
FrameScheduler::FrameType::kSubframe); FrameScheduler::FrameType::kSubframe);
page_scheduler->SetPageVisible(false); page_scheduler->SetPageVisible(false);
...@@ -1345,7 +1371,7 @@ TEST_F(PageSchedulerImplTest, KeepActiveSetForNewPages) { ...@@ -1345,7 +1371,7 @@ TEST_F(PageSchedulerImplTest, KeepActiveSetForNewPages) {
scheduler_->SetSchedulerKeepActive(true); scheduler_->SetSchedulerKeepActive(true);
std::unique_ptr<PageSchedulerImpl> page_scheduler2 = std::unique_ptr<PageSchedulerImpl> page_scheduler2 =
std::make_unique<PageSchedulerImpl>(nullptr, scheduler_.get()); CreatePageScheduler(nullptr, scheduler_.get());
EXPECT_TRUE(page_scheduler_->KeepActive()); EXPECT_TRUE(page_scheduler_->KeepActive());
EXPECT_TRUE(page_scheduler2->KeepActive()); EXPECT_TRUE(page_scheduler2->KeepActive());
......
...@@ -112,11 +112,8 @@ class WorkerSchedulerProxyTest : public testing::Test { ...@@ -112,11 +112,8 @@ class WorkerSchedulerProxyTest : public testing::Test {
task_environment_.GetMainThreadTaskRunner(), task_environment_.GetMainThreadTaskRunner(),
task_environment_.GetMockTickClock()), task_environment_.GetMockTickClock()),
base::nullopt)), base::nullopt)),
page_scheduler_( page_scheduler_(main_thread_scheduler_->CreatePageScheduler(nullptr)),
std::make_unique<PageSchedulerImpl>(nullptr, frame_scheduler_(page_scheduler_->CreateFrameScheduler(
main_thread_scheduler_.get())),
frame_scheduler_(FrameSchedulerImpl::Create(
page_scheduler_.get(),
nullptr, nullptr,
nullptr, nullptr,
FrameScheduler::FrameType::kMainFrame)) {} FrameScheduler::FrameType::kMainFrame)) {}
...@@ -130,8 +127,8 @@ class WorkerSchedulerProxyTest : public testing::Test { ...@@ -130,8 +127,8 @@ class WorkerSchedulerProxyTest : public testing::Test {
protected: protected:
base::test::TaskEnvironment task_environment_; base::test::TaskEnvironment task_environment_;
std::unique_ptr<MainThreadSchedulerImpl> main_thread_scheduler_; std::unique_ptr<MainThreadSchedulerImpl> main_thread_scheduler_;
std::unique_ptr<PageSchedulerImpl> page_scheduler_; std::unique_ptr<PageScheduler> page_scheduler_;
std::unique_ptr<FrameSchedulerImpl> frame_scheduler_; std::unique_ptr<FrameScheduler> frame_scheduler_;
}; };
TEST_F(WorkerSchedulerProxyTest, VisibilitySignalReceived) { TEST_F(WorkerSchedulerProxyTest, VisibilitySignalReceived) {
......
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