Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Unified Diff: components/scheduler/child/idle_helper.h

Issue 2118903002: scheduler: Move the Blink scheduler into Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_
« no previous file with comments | « components/scheduler/child/compositor_worker_scheduler.cc ('k') | components/scheduler/child/idle_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698