Index: components/scheduler/child/idle_helper.h |
diff --git a/components/scheduler/child/idle_helper.h b/components/scheduler/child/idle_helper.h |
deleted file mode 100644 |
index 333c8674a36e85176d1420abda4543275d18c7ba..0000000000000000000000000000000000000000 |
--- a/components/scheduler/child/idle_helper.h |
+++ /dev/null |
@@ -1,221 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef COMPONENTS_SCHEDULER_CHILD_IDLE_HELPER_H_ |
-#define COMPONENTS_SCHEDULER_CHILD_IDLE_HELPER_H_ |
- |
-#include "base/macros.h" |
-#include "base/message_loop/message_loop.h" |
-#include "components/scheduler/base/cancelable_closure_holder.h" |
-#include "components/scheduler/base/task_queue_selector.h" |
-#include "components/scheduler/child/scheduler_helper.h" |
-#include "components/scheduler/child/single_thread_idle_task_runner.h" |
-#include "components/scheduler/scheduler_export.h" |
- |
-namespace scheduler { |
- |
-class SchedulerHelper; |
- |
-// Common scheduler functionality for Idle tasks. |
-class SCHEDULER_EXPORT IdleHelper |
- : public base::MessageLoop::TaskObserver, |
- public SingleThreadIdleTaskRunner::Delegate { |
- public: |
- // Used to by scheduler implementations to customize idle behaviour. |
- class SCHEDULER_EXPORT Delegate { |
- public: |
- Delegate(); |
- virtual ~Delegate(); |
- |
- // If it's ok to enter a long idle period, return true. Otherwise return |
- // false and set next_long_idle_period_delay_out so we know when to try |
- // again. |
- virtual bool CanEnterLongIdlePeriod( |
- base::TimeTicks now, |
- base::TimeDelta* next_long_idle_period_delay_out) = 0; |
- |
- // Signals that the Long Idle Period hasn't started yet because the system |
- // isn't quiescent. |
- virtual void IsNotQuiescent() = 0; |
- |
- // Signals that we have started an Idle Period. |
- virtual void OnIdlePeriodStarted() = 0; |
- |
- // Signals that we have finished an Idle Period. |
- virtual void OnIdlePeriodEnded() = 0; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(Delegate); |
- }; |
- |
- // Keep IdleHelper::IdlePeriodStateToString in sync with this enum. |
- enum class IdlePeriodState { |
- NOT_IN_IDLE_PERIOD, |
- IN_SHORT_IDLE_PERIOD, |
- IN_LONG_IDLE_PERIOD, |
- IN_LONG_IDLE_PERIOD_WITH_MAX_DEADLINE, |
- IN_LONG_IDLE_PERIOD_PAUSED, |
- // Must be the last entry. |
- IDLE_PERIOD_STATE_COUNT, |
- FIRST_IDLE_PERIOD_STATE = NOT_IN_IDLE_PERIOD, |
- }; |
- |
- // The maximum length of an idle period. |
- static const int kMaximumIdlePeriodMillis = 50; |
- |
- // |helper| and |delegate| are not owned by IdleHelper object and must |
- // outlive it. |
- IdleHelper( |
- SchedulerHelper* helper, |
- Delegate* delegate, |
- const char* tracing_category, |
- const char* disabled_by_default_tracing_category, |
- const char* idle_period_tracing_name, |
- base::TimeDelta required_quiescence_duration_before_long_idle_period); |
- ~IdleHelper() override; |
- |
- // Returns the idle task runner. Tasks posted to this runner may be reordered |
- // relative to other task types and may be starved for an arbitrarily long |
- // time if no idle time is available. |
- scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner(); |
- |
- // If |required_quiescence_duration_before_long_idle_period_| is zero then |
- // immediately initiate a long idle period, otherwise check if any tasks have |
- // run recently and if so, check again after a delay of |
- // |required_quiescence_duration_before_long_idle_period_|. |
- // Calling this function will end any previous idle period immediately, and |
- // potentially again later if |
- // |required_quiescence_duration_before_long_idle_period_| is non-zero. |
- // NOTE EndIdlePeriod will disable the long idle periods. |
- void EnableLongIdlePeriod(); |
- |
- // Start an idle period with a given idle period deadline. |
- void StartIdlePeriod(IdlePeriodState new_idle_period_state, |
- base::TimeTicks now, |
- base::TimeTicks idle_period_deadline); |
- |
- // This will end an idle period either started with StartIdlePeriod or |
- // EnableLongIdlePeriod. |
- void EndIdlePeriod(); |
- |
- // Returns true if a currently running idle task could exceed its deadline |
- // without impacting user experience too much. This should only be used if |
- // there is a task which cannot be pre-empted and is likely to take longer |
- // than the largest expected idle task deadline. It should NOT be polled to |
- // check whether more work can be performed on the current idle task after |
- // its deadline has expired - post a new idle task for the continuation of the |
- // work in this case. |
- // Must be called from the thread this class was created on. |
- bool CanExceedIdleDeadlineIfRequired() const; |
- |
- // Returns the deadline for the current idle task. |
- base::TimeTicks CurrentIdleTaskDeadline() const; |
- |
- // SingleThreadIdleTaskRunner::Delegate implementation: |
- void OnIdleTaskPosted() override; |
- base::TimeTicks WillProcessIdleTask() override; |
- void DidProcessIdleTask() override; |
- |
- // base::MessageLoop::TaskObserver implementation: |
- void WillProcessTask(const base::PendingTask& pending_task) override; |
- void DidProcessTask(const base::PendingTask& pending_task) override; |
- |
- IdlePeriodState SchedulerIdlePeriodState() const; |
- static const char* IdlePeriodStateToString(IdlePeriodState state); |
- |
- private: |
- friend class BaseIdleHelperTest; |
- friend class IdleHelperTest; |
- |
- class State { |
- public: |
- State(SchedulerHelper* helper, |
- Delegate* delegate, |
- const char* tracing_category, |
- const char* disabled_by_default_tracing_category, |
- const char* idle_period_tracing_name); |
- virtual ~State(); |
- |
- void UpdateState(IdlePeriodState new_state, |
- base::TimeTicks new_deadline, |
- base::TimeTicks optional_now); |
- bool IsIdlePeriodPaused() const; |
- |
- IdlePeriodState idle_period_state() const; |
- base::TimeTicks idle_period_deadline() const; |
- |
- void TraceIdleIdleTaskStart(); |
- void TraceIdleIdleTaskEnd(); |
- |
- private: |
- void TraceEventIdlePeriodStateChange(IdlePeriodState new_state, |
- bool new_running_idle_task, |
- base::TimeTicks new_deadline, |
- base::TimeTicks optional_now); |
- |
- SchedulerHelper* helper_; // NOT OWNED |
- Delegate* delegate_; // NOT OWNED |
- |
- IdlePeriodState idle_period_state_; |
- base::TimeTicks idle_period_deadline_; |
- |
- base::TimeTicks last_idle_task_trace_time_; |
- bool idle_period_trace_event_started_; |
- bool running_idle_task_for_tracing_; |
- const char* tracing_category_; |
- const char* disabled_by_default_tracing_category_; |
- const char* idle_period_tracing_name_; |
- |
- DISALLOW_COPY_AND_ASSIGN(State); |
- }; |
- |
- // The minimum duration of an idle period. |
- static const int kMinimumIdlePeriodDurationMillis = 1; |
- |
- // The minimum delay to wait between retrying to initiate a long idle time. |
- static const int kRetryEnableLongIdlePeriodDelayMillis = 1; |
- |
- // Returns the new idle period state for the next long idle period. Fills in |
- // |next_long_idle_period_delay_out| with the next time we should try to |
- // initiate the next idle period. |
- IdlePeriodState ComputeNewLongIdlePeriodState( |
- const base::TimeTicks now, |
- base::TimeDelta* next_long_idle_period_delay_out); |
- |
- bool ShouldWaitForQuiescence(); |
- void OnIdleTaskPostedOnMainThread(); |
- void UpdateLongIdlePeriodStateAfterIdleTask(); |
- |
- void SetIdlePeriodState(IdlePeriodState new_state, |
- base::TimeTicks new_deadline, |
- base::TimeTicks optional_now); |
- |
- // Returns true if |state| represents being within an idle period state. |
- static bool IsInIdlePeriod(IdlePeriodState state); |
- // Returns true if |state| represents being within a long idle period state. |
- static bool IsInLongIdlePeriod(IdlePeriodState state); |
- |
- SchedulerHelper* helper_; // NOT OWNED |
- Delegate* delegate_; // NOT OWNED |
- scoped_refptr<TaskQueue> idle_queue_; |
- scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; |
- |
- CancelableClosureHolder enable_next_long_idle_period_closure_; |
- CancelableClosureHolder on_idle_task_posted_closure_; |
- |
- State state_; |
- |
- base::TimeDelta required_quiescence_duration_before_long_idle_period_; |
- |
- const char* disabled_by_default_tracing_category_; |
- |
- base::WeakPtr<IdleHelper> weak_idle_helper_ptr_; |
- base::WeakPtrFactory<IdleHelper> weak_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(IdleHelper); |
-}; |
- |
-} // namespace scheduler |
- |
-#endif // COMPONENTS_SCHEDULER_CHILD_IDLE_HELPER_H_ |