8#include <unordered_map>
48 return platform_->NumberOfWorkerThreads();
52 std::unique_ptr<Task> task,
64 ->GetForegroundTaskRunner(
66 ->PostTask(std::move(task));
71 double delay_in_seconds,
const SourceLocation& location)
override {
92 uint64_t synthetic_time =
94 return 1e-5 * synthetic_time;
102 return platform_->GetTracingController();
113 std::unique_ptr<Platform> platform) {
114 return std::make_unique<PredictablePlatform>(std::move(platform));
148 std::shared_ptr<TaskRunner> runner =
153 std::weak_ptr<DelayedTaskRunner>& weak_delayed_runner =
155 std::shared_ptr<DelayedTaskRunner> delayed_runner =
156 weak_delayed_runner.lock();
158 if (!delayed_runner) {
160 delayed_runner = std::make_shared<DelayedTaskRunner>(runner,
this);
161 weak_delayed_runner = delayed_runner;
164 return std::move(delayed_runner);
168 return platform_->NumberOfWorkerThreads();
172 std::unique_ptr<Task> task,
180 double delay_in_seconds,
const SourceLocation& location)
override {
181 platform_->PostDelayedTaskOnWorkerThread(
186 return platform_->IdleTasksEnabled(isolate);
197 return platform_->MonotonicallyIncreasingTime();
201 return platform_->CurrentClockTimeMillis();
205 return platform_->GetTracingController();
219 DCHECK_EQ(1, delayed_task_runners.count(original_runner));
220 delayed_task_runners.erase(original_runner);
243 double delay_in_seconds,
246 delay_in_seconds, location);
280 void Run(
double deadline_in_seconds)
override {
282 task_->Run(deadline_in_seconds);
292 DelayedJob(std::unique_ptr<JobTask> job_task, int32_t delay_ms)
305 return job_task_->GetMaxConcurrency(worker_count);
320 std::unordered_map<TaskRunner*, std::weak_ptr<DelayedTaskRunner>>
328 return 1e5 * (delay_fraction * delay_fraction);
332 return std::make_unique<DelayedTask>(std::move(task),
337 std::unique_ptr<IdleTask> task) {
338 return std::make_unique<DelayedIdleTask>(std::move(task),
343 return std::make_unique<DelayedJob>(std::move(task),
349 std::unique_ptr<Platform> platform, int64_t random_seed) {
351 return std::make_unique<DelayedTasksPlatform>(std::move(platform),
354 return std::make_unique<DelayedTasksPlatform>(std::move(platform));
static void Sleep(TimeDelta interval)
double NextDouble() V8_WARN_UNUSED_RESULT
static constexpr int64_t kMillisecondsPerSecond
static constexpr TimeDelta FromMicroseconds(int64_t microseconds)
constexpr Isolate * kProcessGlobalPredictablePlatformWorkerTaskQueue
std::unique_ptr< Platform > MakePredictablePlatform(std::unique_ptr< Platform > platform)
std::unique_ptr< Platform > MakeDelayedTasksPlatform(std::unique_ptr< Platform > platform, int64_t random_seed)
#define DCHECK_NOT_NULL(val)
#define DCHECK_EQ(v1, v2)