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

Unified Diff: content/child/scheduler/scheduler_helper.h

Issue 1058873010: Move blink scheduler implementation into a component (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updates Created 5 years, 8 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: content/child/scheduler/scheduler_helper.h
diff --git a/content/child/scheduler/scheduler_helper.h b/content/child/scheduler/scheduler_helper.h
deleted file mode 100644
index 0e03aa95cd69e79266d4b9a4cd885134f9dcd3cf..0000000000000000000000000000000000000000
--- a/content/child/scheduler/scheduler_helper.h
+++ /dev/null
@@ -1,214 +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 CONTENT_CHILD_SCHEDULER_SCHEDULER_HELPER_H_
-#define CONTENT_CHILD_SCHEDULER_SCHEDULER_HELPER_H_
-
-#include "content/child/scheduler/cancelable_closure_holder.h"
-#include "content/child/scheduler/single_thread_idle_task_runner.h"
-#include "content/child/scheduler/task_queue_manager.h"
-#include "content/child/scheduler/time_source.h"
-
-namespace content {
-
-class PrioritizingTaskQueueSelector;
-class NestableSingleThreadTaskRunner;
-
-// Common scheduler functionality for Default and Idle tasks.
-class CONTENT_EXPORT SchedulerHelper {
- public:
- // Used to by scheduler implementations to customize idle behaviour.
- class CONTENT_EXPORT SchedulerHelperDelegate {
- public:
- SchedulerHelperDelegate();
- virtual ~SchedulerHelperDelegate();
-
- // 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;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(SchedulerHelperDelegate);
- };
-
- // NOTE |total_task_queue_count| must be >= TASK_QUEUE_COUNT.
- // Category strings must have application lifetime (statics or
- // literals). They may not include " chars.
- SchedulerHelper(
- scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner,
- SchedulerHelperDelegate* scheduler_helper_delegate,
- const char* tracing_category,
- const char* disabled_by_default_tracing_category,
- const char* idle_period_tracing_name,
- size_t total_task_queue_count,
- base::TimeDelta required_quiescence_duration_before_long_idle_period);
- ~SchedulerHelper();
-
- // Returns the default task runner.
- scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner();
-
- // 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();
-
- // Returns the control task runner. Tasks posted to this runner are executed
- // with the highest priority. Care must be taken to avoid starvation of other
- // task queues.
- scoped_refptr<base::SingleThreadTaskRunner> ControlTaskRunner();
-
- // 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;
-
- // Adds or removes a task observer from the scheduler. The observer will be
- // notified before and after every executed task. These functions can only be
- // called on the thread this class was created on.
- void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer);
- void RemoveTaskObserver(base::MessageLoop::TaskObserver* task_observer);
-
- // Shuts down the scheduler by dropping any remaining pending work in the work
- // queues. After this call any work posted to the task runners will be
- // silently dropped.
- void Shutdown();
-
- // Returns true if Shutdown() has been called. Otherwise returns false.
- bool IsShutdown() const { return !task_queue_manager_.get(); }
-
- // Keep SchedulerHelper::TaskQueueIdToString in sync with this enum.
- enum QueueId {
- DEFAULT_TASK_QUEUE,
- IDLE_TASK_QUEUE,
- CONTROL_TASK_QUEUE,
- CONTROL_TASK_AFTER_WAKEUP_QUEUE,
- // Must be the last entry.
- TASK_QUEUE_COUNT,
- };
-
- // Keep SchedulerHelper::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,
- ENDING_LONG_IDLE_PERIOD
- };
-
- static const char* TaskQueueIdToString(QueueId queue_id);
- static const char* IdlePeriodStateToString(IdlePeriodState state);
-
- // The maximum length of an idle period.
- static const int kMaximumIdlePeriodMillis = 50;
-
- // The minimum delay to wait between retrying to initiate a long idle time.
- static const int kRetryEnableLongIdlePeriodDelayMillis = 1;
-
- // IdleTaskDeadlineSupplier Implementation:
- void CurrentIdleTaskDeadlineCallback(base::TimeTicks* deadline_out) const;
-
- // 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);
-
- // 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 and end an idle period. If |post_end_idle_period| is true, it will
- // post a delayed EndIdlePeriod scheduled to occur at |idle_period_deadline|.
- void StartIdlePeriod(IdlePeriodState new_idle_period_state,
- base::TimeTicks now,
- base::TimeTicks idle_period_deadline,
- bool post_end_idle_period);
-
- // This will end an idle period either started with StartIdlePeriod or
- // EnableLongIdlePeriod.
- void EndIdlePeriod();
-
- // Returns true if |state| represents being within an idle period state.
- static bool IsInIdlePeriod(IdlePeriodState state);
-
- void CheckOnValidThread() const {
- DCHECK(thread_checker_.CalledOnValidThread());
- }
-
- // Accessor methods.
- base::TimeTicks Now() const;
- IdlePeriodState SchedulerIdlePeriodState() const;
- PrioritizingTaskQueueSelector* SchedulerTaskQueueSelector() const;
- scoped_refptr<base::SingleThreadTaskRunner> TaskRunnerForQueue(
- size_t queue_index) const;
- void SetQueueName(size_t queue_index, const char* name);
- bool IsQueueEmpty(size_t queue_index) const;
-
- // Test helpers.
- void SetTimeSourceForTesting(scoped_ptr<TimeSource> time_source);
- void SetWorkBatchSizeForTesting(size_t work_batch_size);
- TaskQueueManager* GetTaskQueueManagerForTesting();
-
- private:
- friend class SchedulerHelperTest;
-
- bool ShouldWaitForQuiescence();
- void EnableLongIdlePeriodAfterWakeup();
-
- base::ThreadChecker thread_checker_;
- scoped_ptr<PrioritizingTaskQueueSelector> task_queue_selector_;
- scoped_ptr<TaskQueueManager> task_queue_manager_;
-
- CancelableClosureHolder end_idle_period_closure_;
- CancelableClosureHolder enable_next_long_idle_period_closure_;
- CancelableClosureHolder enable_next_long_idle_period_after_wakeup_closure_;
-
- IdlePeriodState idle_period_state_;
- SchedulerHelperDelegate* scheduler_helper_delegate_; // NOT OWNED
-
- scoped_refptr<base::SingleThreadTaskRunner> control_task_runner_;
- scoped_refptr<base::SingleThreadTaskRunner> control_task_after_wakeup_runner_;
- scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
- scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_;
-
- // A bitmap which controls the set of queues that are checked for quiescence
- // before triggering a long idle period.
- uint64 quiescence_monitored_task_queue_mask_;
- base::TimeDelta required_quiescence_duration_before_long_idle_period_;
-
- base::TimeTicks idle_period_deadline_;
- scoped_ptr<TimeSource> time_source_;
-
- const char* tracing_category_;
- const char* disabled_by_default_tracing_category_;
- const char* idle_period_tracing_name_;
-
- base::WeakPtr<SchedulerHelper> weak_scheduler_ptr_;
- base::WeakPtrFactory<SchedulerHelper> weak_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(SchedulerHelper);
-};
-
-} // namespace content
-
-#endif // CONTENT_CHILD_SCHEDULER_SCHEDULER_HELPER_H_
« no previous file with comments | « content/child/scheduler/prioritizing_task_queue_selector_unittest.cc ('k') | content/child/scheduler/scheduler_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698