summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/scheduler/main_thread/agent_scheduling_strategy_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/scheduler/main_thread/agent_scheduling_strategy_unittest.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/scheduler/main_thread/agent_scheduling_strategy_unittest.cc527
1 files changed, 0 insertions, 527 deletions
diff --git a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/agent_scheduling_strategy_unittest.cc b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/agent_scheduling_strategy_unittest.cc
deleted file mode 100644
index 9f1e710bb04..00000000000
--- a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/agent_scheduling_strategy_unittest.cc
+++ /dev/null
@@ -1,527 +0,0 @@
-#include "third_party/blink/renderer/platform/scheduler/main_thread/agent_scheduling_strategy.h"
-
-#include <memory>
-#include "base/memory/scoped_refptr.h"
-#include "base/metrics/field_trial_params.h"
-#include "base/test/scoped_feature_list.h"
-#include "base/time/time.h"
-#include "base/unguessable_token.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/blink/renderer/platform/scheduler/common/features.h"
-#include "third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.h"
-#include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.h"
-#include "third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h"
-#include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
-#include "third_party/blink/renderer/platform/scheduler/test/fake_frame_scheduler.h"
-
-namespace blink {
-namespace scheduler {
-
-using FeatureAndParams = ::base::test::ScopedFeatureList::FeatureAndParams;
-using ShouldUpdatePolicy =
- ::blink::scheduler::AgentSchedulingStrategy::ShouldUpdatePolicy;
-using PrioritisationType =
- ::blink::scheduler::MainThreadTaskQueue::QueueTraits::PrioritisationType;
-
-using ::base::FieldTrialParams;
-using ::base::sequence_manager::TaskQueue;
-using ::base::test::ScopedFeatureList;
-using ::testing::_;
-using ::testing::NiceMock;
-using ::testing::Return;
-using ::testing::ReturnRef;
-using ::testing::Test;
-
-namespace {
-
-class MockDelegate : public AgentSchedulingStrategy::Delegate {
- public:
- MOCK_METHOD(void,
- OnSetTimer,
- (const FrameSchedulerImpl& frame_scheduler,
- base::TimeDelta delay));
-};
-
-class MockFrameSchedulerDelegate : public FrameScheduler::Delegate {
- public:
- MockFrameSchedulerDelegate() {
- ON_CALL(*this, GetAgentClusterId)
- .WillByDefault(ReturnRef(agent_cluster_id_));
- }
-
- MOCK_METHOD(const base::UnguessableToken&,
- GetAgentClusterId,
- (),
- (const, override));
- MOCK_METHOD(ukm::UkmRecorder*, GetUkmRecorder, ());
- MOCK_METHOD(ukm::SourceId, GetUkmSourceId, ());
- MOCK_METHOD(void, UpdateTaskTime, (base::TimeDelta));
- MOCK_METHOD(void, UpdateActiveSchedulerTrackedFeatures, (uint64_t));
-
- private:
- base::UnguessableToken agent_cluster_id_ = base::UnguessableToken::Create();
-};
-
-class MockFrameScheduler : public FrameSchedulerImpl {
- public:
- explicit MockFrameScheduler(FrameScheduler::FrameType frame_type)
- : FrameSchedulerImpl(/*main_thread_scheduler=*/nullptr,
- /*parent_page_scheduler=*/nullptr,
- /*delegate=*/&delegate_,
- /*blame_context=*/nullptr,
- /*frame_type=*/frame_type) {
- ON_CALL(*this, IsOrdinary).WillByDefault(Return(true));
- }
-
- MOCK_METHOD(bool, IsOrdinary, (), (const));
-
- private:
- NiceMock<MockFrameSchedulerDelegate> delegate_;
-};
-
-} // namespace
-
-class PerAgentSchedulingBaseTest : public Test {
- public:
- explicit PerAgentSchedulingBaseTest(
- const FieldTrialParams experiment_params) {
- feature_list_.InitWithFeaturesAndParameters(
- {{kPerAgentSchedulingExperiments, experiment_params}}, {});
- strategy_ = AgentSchedulingStrategy::Create(delegate_);
- timer_queue_->SetFrameSchedulerForTest(&subframe_);
- non_timer_queue_->SetFrameSchedulerForTest(&subframe_);
- }
-
- protected:
- ScopedFeatureList feature_list_;
- NiceMock<MockDelegate> delegate_{};
- std::unique_ptr<AgentSchedulingStrategy> strategy_;
- NiceMock<MockFrameScheduler> main_frame_{
- FrameScheduler::FrameType::kMainFrame};
- NiceMock<MockFrameScheduler> subframe_{FrameScheduler::FrameType::kSubframe};
- scoped_refptr<MainThreadTaskQueueForTest> timer_queue_{
- new MainThreadTaskQueueForTest(PrioritisationType::kJavaScriptTimer)};
- scoped_refptr<MainThreadTaskQueueForTest> non_timer_queue_{
- new MainThreadTaskQueueForTest(PrioritisationType::kRegular)};
-};
-
-class PerAgentDisableTimersUntilTimeoutStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentDisableTimersUntilTimeoutStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "timer-queues"},
- {"method", "disable"},
- {"signal", "delay"},
- {"delay_ms", "50"}}) {}
-};
-
-TEST_F(PerAgentDisableTimersUntilTimeoutStrategyTest, RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnDelayPassed(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
-}
-
-TEST_F(PerAgentDisableTimersUntilTimeoutStrategyTest, InitiatesTimer) {
- EXPECT_CALL(delegate_, OnSetTimer(_, base::TimeDelta::FromMilliseconds(50)))
- .Times(1);
-
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-}
-
-TEST_F(PerAgentDisableTimersUntilTimeoutStrategyTest,
- DisablesTimerQueueUntilTimeout) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
- ignore_result(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_));
-
- EXPECT_THAT(strategy_->QueueEnabledState(*timer_queue_),
- testing::Optional(false));
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-
- ignore_result(strategy_->OnDelayPassed(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
-}
-
-class PerAgentDisableTimersUntilFMPStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentDisableTimersUntilFMPStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "timer-queues"},
- {"method", "disable"},
- {"signal", "fmp"}}) {}
-};
-
-TEST_F(PerAgentDisableTimersUntilFMPStrategyTest, RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
- // Only the first input event (since a main frame document was added) should
- // cause a policy update. This is necessary as we may get several input event
- // notifications, but we don't want them to re-calculate priorities as nothing
- // will change.
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kNo);
-}
-
-TEST_F(PerAgentDisableTimersUntilFMPStrategyTest, DisablesTimerQueueUntilFMP) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_THAT(strategy_->QueueEnabledState(*timer_queue_),
- testing::Optional(false));
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-
- ignore_result(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
-}
-
-class PerAgentBestEffortPriorityTimersUntilFMPStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentBestEffortPriorityTimersUntilFMPStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "timer-queues"},
- {"method", "best-effort"},
- {"signal", "fmp"}}) {}
-};
-
-TEST_F(PerAgentBestEffortPriorityTimersUntilFMPStrategyTest,
- RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
- // Only the first input event (since a main frame document was added) should
- // cause a policy update. This is necessary as we may get several input event
- // notifications, but we don't want them to re-calculate priorities as nothing
- // will change.
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kNo);
-}
-
-TEST_F(PerAgentBestEffortPriorityTimersUntilFMPStrategyTest,
- LowersTimerQueuePriorityUntilFMP) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueuePriority(*timer_queue_),
- testing::Optional(TaskQueue::QueuePriority::kBestEffortPriority));
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-
- ignore_result(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
-}
-
-class PerAgentDisableTimersUntilLoadStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentDisableTimersUntilLoadStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "timer-queues"},
- {"method", "disable"},
- {"signal", "onload"}}) {}
-};
-
-TEST_F(PerAgentDisableTimersUntilLoadStrategyTest, RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
-}
-
-TEST_F(PerAgentDisableTimersUntilLoadStrategyTest, DisablesTimerQueue) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_THAT(strategy_->QueueEnabledState(*timer_queue_),
- testing::Optional(false));
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-
- ignore_result(strategy_->OnMainFrameLoad(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
-}
-
-class PerAgentBestEffortPriorityTimersUntilLoadStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentBestEffortPriorityTimersUntilLoadStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "timer-queues"},
- {"method", "best-effort"},
- {"signal", "onload"}}) {}
-};
-
-TEST_F(PerAgentBestEffortPriorityTimersUntilLoadStrategyTest,
- RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
-}
-
-TEST_F(PerAgentBestEffortPriorityTimersUntilLoadStrategyTest,
- LowersTimerQueuePriority) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueuePriority(*timer_queue_),
- testing::Optional(TaskQueue::QueuePriority::kBestEffortPriority));
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-
- ignore_result(strategy_->OnMainFrameLoad(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
-}
-
-class PerAgentDisableAllUntilFMPStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentDisableAllUntilFMPStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "all-queues"},
- {"method", "disable"},
- {"signal", "fmp"}}) {}
-};
-
-TEST_F(PerAgentDisableAllUntilFMPStrategyTest, RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
- // Only the first input event (since a main frame document was added) should
- // cause a policy update. This is necessary as we may get several input event
- // notifications, but we don't want them to re-calculate priorities as nothing
- // will change.
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kNo);
-}
-
-TEST_F(PerAgentDisableAllUntilFMPStrategyTest, DisablesTimerQueueUntilFMP) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_THAT(strategy_->QueueEnabledState(*timer_queue_),
- testing::Optional(false));
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueueEnabledState(*non_timer_queue_),
- testing::Optional(false));
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-
- ignore_result(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-}
-
-class PerAgentBestEffortPriorityAllUntilFMPStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentBestEffortPriorityAllUntilFMPStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "all-queues"},
- {"method", "best-effort"},
- {"signal", "fmp"}}) {}
-};
-
-TEST_F(PerAgentBestEffortPriorityAllUntilFMPStrategyTest,
- RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
- // Only the first input event (since a main frame document was added) should
- // cause a policy update. This is necessary as we may get several input event
- // notifications, but we don't want them to re-calculate priorities as nothing
- // will change.
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kNo);
-}
-
-TEST_F(PerAgentBestEffortPriorityAllUntilFMPStrategyTest,
- LowersTimerQueuePriorityUntilFMP) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueuePriority(*timer_queue_),
- testing::Optional(TaskQueue::QueuePriority::kBestEffortPriority));
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueuePriority(*non_timer_queue_),
- testing::Optional(TaskQueue::QueuePriority::kBestEffortPriority));
-
- ignore_result(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-}
-
-class PerAgentDisableAllUntilLoadStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentDisableAllUntilLoadStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "all-queues"},
- {"method", "disable"},
- {"signal", "onload"}}) {}
-};
-
-TEST_F(PerAgentDisableAllUntilLoadStrategyTest, RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
-}
-
-TEST_F(PerAgentDisableAllUntilLoadStrategyTest, DisablesTimerQueue) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_THAT(strategy_->QueueEnabledState(*timer_queue_),
- testing::Optional(false));
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueueEnabledState(*non_timer_queue_),
- testing::Optional(false));
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-
- ignore_result(strategy_->OnMainFrameLoad(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-}
-
-class PerAgentBestEffortPriorityAllUntilLoadStrategyTest
- : public PerAgentSchedulingBaseTest {
- public:
- PerAgentBestEffortPriorityAllUntilLoadStrategyTest()
- : PerAgentSchedulingBaseTest({{"queues", "all-queues"},
- {"method", "best-effort"},
- {"signal", "onload"}}) {}
-};
-
-TEST_F(PerAgentBestEffortPriorityAllUntilLoadStrategyTest,
- RequestsPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnMainFrameLoad(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kYes);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kYes);
-}
-
-TEST_F(PerAgentBestEffortPriorityAllUntilLoadStrategyTest,
- LowersTimerQueuePriority) {
- ignore_result(strategy_->OnFrameAdded(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueuePriority(*timer_queue_),
- testing::Optional(TaskQueue::QueuePriority::kBestEffortPriority));
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_THAT(strategy_->QueuePriority(*non_timer_queue_),
- testing::Optional(TaskQueue::QueuePriority::kBestEffortPriority));
-
- ignore_result(strategy_->OnMainFrameLoad(main_frame_));
-
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-}
-
-class PerAgentDefaultIsNoOpStrategyTest : public Test {
- public:
- PerAgentDefaultIsNoOpStrategyTest() {
- timer_queue_->SetFrameSchedulerForTest(&subframe_);
- }
-
- protected:
- NiceMock<MockDelegate> delegate_{};
- std::unique_ptr<AgentSchedulingStrategy> strategy_ =
- AgentSchedulingStrategy::Create(delegate_);
- MockFrameScheduler main_frame_{FrameScheduler::FrameType::kMainFrame};
- NiceMock<MockFrameScheduler> subframe_{FrameScheduler::FrameType::kSubframe};
- scoped_refptr<MainThreadTaskQueueForTest> timer_queue_{
- new MainThreadTaskQueueForTest(PrioritisationType::kJavaScriptTimer)};
-};
-
-TEST_F(PerAgentDefaultIsNoOpStrategyTest, DoesntRequestPolicyUpdate) {
- EXPECT_EQ(strategy_->OnFrameAdded(main_frame_), ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnMainFrameFirstMeaningfulPaint(main_frame_),
- ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnFrameRemoved(main_frame_), ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnDocumentChangedInMainFrame(main_frame_),
- ShouldUpdatePolicy::kNo);
- EXPECT_EQ(strategy_->OnInputEvent(), ShouldUpdatePolicy::kNo);
-}
-
-TEST_F(PerAgentDefaultIsNoOpStrategyTest, DoesntModifyPolicyDecisions) {
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
-}
-
-class PerAgentNonOrdinaryPageTest : public PerAgentSchedulingBaseTest {
- public:
- PerAgentNonOrdinaryPageTest()
- : PerAgentSchedulingBaseTest({{"queues", "timer-queues"},
- {"method", "disable"},
- {"signal", "onload"}}) {
- ON_CALL(non_ordinary_frame_scheduler_, IsOrdinary)
- .WillByDefault(Return(false));
- }
-
- protected:
- NiceMock<MockFrameScheduler> non_ordinary_frame_scheduler_{
- FrameScheduler::FrameType::kMainFrame};
-};
-
-TEST_F(PerAgentNonOrdinaryPageTest, DoesntWaitForNonOrdinaryFrames) {
- EXPECT_EQ(strategy_->OnFrameAdded(non_ordinary_frame_scheduler_),
- ShouldUpdatePolicy::kYes);
- EXPECT_FALSE(strategy_->QueueEnabledState(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueueEnabledState(*non_timer_queue_).has_value());
- EXPECT_FALSE(strategy_->QueuePriority(*non_timer_queue_).has_value());
-}
-
-} // namespace scheduler
-} // namespace blink