1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_CHILD_SCHEDULER_WORKER_SCHEDULER_IMPL_H_
6 #define CONTENT_CHILD_SCHEDULER_WORKER_SCHEDULER_IMPL_H_
8 #include "content/child/scheduler/worker_scheduler.h"
9 #include "content/child/scheduler/scheduler_helper.h"
12 namespace trace_event
{
13 class ConvertableToTraceFormat
;
19 class NestableSingleThreadTaskRunner
;
21 class CONTENT_EXPORT WorkerSchedulerImpl
22 : public WorkerScheduler
,
23 public SchedulerHelper::SchedulerHelperDelegate
{
25 explicit WorkerSchedulerImpl(
26 scoped_refptr
<NestableSingleThreadTaskRunner
> main_task_runner
);
27 ~WorkerSchedulerImpl() override
;
29 // WorkerScheduler implementation:
30 scoped_refptr
<base::SingleThreadTaskRunner
> DefaultTaskRunner() override
;
31 scoped_refptr
<SingleThreadIdleTaskRunner
> IdleTaskRunner() override
;
32 bool CanExceedIdleDeadlineIfRequired() const override
;
33 bool ShouldYieldForHighPriorityWork() override
;
34 void AddTaskObserver(base::MessageLoop::TaskObserver
* task_observer
) override
;
35 void RemoveTaskObserver(
36 base::MessageLoop::TaskObserver
* task_observer
) override
;
38 void Shutdown() override
;
40 void SetTimeSourceForTesting(scoped_refptr
<cc::TestNowSource
> time_source
);
41 void SetWorkBatchSizeForTesting(size_t work_batch_size
);
42 base::TimeTicks
CurrentIdleTaskDeadlineForTesting() const;
45 // SchedulerHelperDelegate implementation:
46 bool CanEnterLongIdlePeriod(
48 base::TimeDelta
* next_long_idle_period_delay_out
) override
;
49 void IsNotQuiescent() override
{}
52 void MaybeStartLongIdlePeriod();
54 SchedulerHelper helper_
;
57 DISALLOW_COPY_AND_ASSIGN(WorkerSchedulerImpl
);
60 } // namespace content
62 #endif // CONTENT_CHILD_SCHEDULER_WORKER_SCHEDULER_IMPL_H_