#include "third_party/blink/renderer/platform/scheduler/common/idle_helper.h"
#include <memory>
#include <utility>
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/run_loop.h"
#include "base/task/common/lazy_now.h"
#include "base/task/sequence_manager/sequence_manager.h"
#include "base/task/sequence_manager/task_queue.h"
#include "base/task/sequence_manager/test/sequence_manager_for_test.h"
#include "base/task/sequence_manager/time_domain.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/test_mock_time_task_runner.h"
#include "base/time/time.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
#include "third_party/blink/renderer/platform/scheduler/common/single_thread_idle_task_runner.h"
#include "third_party/blink/renderer/platform/scheduler/public/non_main_thread.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_std.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
_;
AnyNumber;
AtLeast;
Exactly;
Invoke;
Return;
namespace blink {
namespace scheduler {
namespace idle_helper_unittest {
SequenceManager;
TaskQueue;
void AppendToVectorTestTask(Vector<String>* vector, String value) { … }
void AppendToVectorIdleTestTask(Vector<String>* vector,
String value,
base::TimeTicks deadline) { … }
void NullTask() { … }
void NullIdleTask(base::TimeTicks deadline) { … }
void AppendToVectorReentrantTask(base::SingleThreadTaskRunner* task_runner,
Vector<int>* vector,
int* reentrant_count,
int max_reentrant_count) { … }
void IdleTestTask(int* run_count,
base::TimeTicks* deadline_out,
base::TimeTicks deadline) { … }
int g_max_idle_task_reposts = …;
void RepostingIdleTestTask(SingleThreadIdleTaskRunner* idle_task_runner,
int* run_count,
base::TimeTicks* deadline_out,
base::TimeTicks deadline) { … }
void RepostingUpdateClockIdleTestTask(
SingleThreadIdleTaskRunner* idle_task_runner,
int* run_count,
scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner,
base::TimeDelta advance_time,
Vector<base::TimeTicks>* deadlines,
base::TimeTicks deadline) { … }
void RepeatingTask(base::SingleThreadTaskRunner* task_runner,
int num_repeats,
base::TimeDelta delay) { … }
void UpdateClockIdleTestTask(
scoped_refptr<base::TestMockTimeTaskRunner> task_runner,
int* run_count,
base::TimeTicks set_time,
base::TimeTicks deadline) { … }
void UpdateClockToDeadlineIdleTestTask(
scoped_refptr<base::TestMockTimeTaskRunner> task_runner,
int* run_count,
base::TimeTicks deadline) { … }
void EndIdlePeriodIdleTask(IdleHelper* idle_helper, base::TimeTicks deadline) { … }
void ShutdownIdleTask(IdleHelper* helper,
bool* shutdown_task_run,
base::TimeTicks deadline) { … }
class IdleHelperForTest : public IdleHelper, public IdleHelper::Delegate { … };
class BaseIdleHelperTest : public testing::Test { … };
class IdleHelperTest : public BaseIdleHelperTest { … };
TEST_F(IdleHelperTest, TestPostIdleTask) { … }
TEST_F(IdleHelperTest, TestPostIdleTask_EndIdlePeriod) { … }
TEST_F(IdleHelperTest, TestRepostingIdleTask) { … }
TEST_F(IdleHelperTest, TestIdleTaskExceedsDeadline) { … }
class IdleHelperTestWithIdlePeriodObserver : public BaseIdleHelperTest { … };
TEST_F(IdleHelperTestWithIdlePeriodObserver, TestEnterButNotExitIdlePeriod) { … }
TEST_F(IdleHelperTestWithIdlePeriodObserver, TestEnterAndExitIdlePeriod) { … }
TEST_F(IdleHelperTestWithIdlePeriodObserver, TestLongIdlePeriod) { … }
TEST_F(IdleHelperTest, TestLongIdlePeriodWithPendingDelayedTask) { … }
TEST_F(IdleHelperTest, TestLongIdlePeriodWithLatePendingDelayedTask) { … }
TEST_F(IdleHelperTestWithIdlePeriodObserver, TestLongIdlePeriodRepeating) { … }
TEST_F(IdleHelperTestWithIdlePeriodObserver,
TestLongIdlePeriodWhenNotCanEnterLongIdlePeriod) { … }
TEST_F(IdleHelperTest,
TestLongIdlePeriodDoesNotImmediatelyRestartIfMaxDeadline) { … }
TEST_F(IdleHelperTest, TestLongIdlePeriodRestartWaitsIfNotMaxDeadline) { … }
TEST_F(IdleHelperTest, TestLongIdlePeriodPaused) { … }
TEST_F(IdleHelperTest, TestLongIdlePeriodWhenShutdown) { … }
void TestCanExceedIdleDeadlineIfRequiredTask(IdleHelperForTest* idle_helper,
bool* can_exceed_idle_deadline_out,
int* run_count,
base::TimeTicks deadline) { … }
TEST_F(IdleHelperTest, CanExceedIdleDeadlineIfRequired) { … }
class IdleHelperWithQuiescencePeriodTest : public BaseIdleHelperTest { … };
class IdleHelperWithQuiescencePeriodTestWithIdlePeriodObserver
: public IdleHelperWithQuiescencePeriodTest { … };
TEST_F(IdleHelperWithQuiescencePeriodTest,
LongIdlePeriodStartsImmediatelyIfQuiescent) { … }
TEST_F(IdleHelperWithQuiescencePeriodTestWithIdlePeriodObserver,
LongIdlePeriodDoesNotStartsImmediatelyIfBusy) { … }
TEST_F(IdleHelperWithQuiescencePeriodTest,
LongIdlePeriodStartsAfterQuiescence) { … }
TEST_F(IdleHelperWithQuiescencePeriodTest,
QuescienceCheckedForAfterLongIdlePeriodEnds) { … }
TEST_F(IdleHelperTest, NoShortIdlePeriodWhenDeadlineTooClose) { … }
TEST_F(IdleHelperTest, NoLongIdlePeriodWhenDeadlineTooClose) { … }
TEST_F(IdleHelperWithQuiescencePeriodTest,
PendingEnableLongIdlePeriodNotRunAfterShutdown) { … }
TEST_F(IdleHelperTest, TestPostDelayedIdleTask) { … }
TEST_F(IdleHelperTest, OnPendingTasksChanged) { … }
TEST_F(IdleHelperTest, OnPendingTasksChanged_TwoTasksAtTheSameTime) { … }
class MultiThreadedIdleHelperTest : public IdleHelperTest { … };
TEST_F(MultiThreadedIdleHelperTest, IdleTasksFromNonMainThreads) { … }
TEST_F(MultiThreadedIdleHelperTest, DelayedIdleTasksFromNonMainThreads) { … }
TEST_F(MultiThreadedIdleHelperTest,
DelayedAndNonDelayedIdleTasksFromMultipleThreads) { … }
}
}
}