OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef COMPONENTS_SCHEDULER_CHILD_PRIORITIZING_TASK_QUEUE_SELECTOR_H_ | 5 #ifndef COMPONENTS_SCHEDULER_CHILD_PRIORITIZING_TASK_QUEUE_SELECTOR_H_ |
6 #define COMPONENTS_SCHEDULER_CHILD_PRIORITIZING_TASK_QUEUE_SELECTOR_H_ | 6 #define COMPONENTS_SCHEDULER_CHILD_PRIORITIZING_TASK_QUEUE_SELECTOR_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 // empty. They can be starved by the other queues. | 34 // empty. They can be starved by the other queues. |
35 BEST_EFFORT_PRIORITY, | 35 BEST_EFFORT_PRIORITY, |
36 // Must be the last entry. | 36 // Must be the last entry. |
37 QUEUE_PRIORITY_COUNT, | 37 QUEUE_PRIORITY_COUNT, |
38 FIRST_QUEUE_PRIORITY = CONTROL_PRIORITY, | 38 FIRST_QUEUE_PRIORITY = CONTROL_PRIORITY, |
39 }; | 39 }; |
40 | 40 |
41 PrioritizingTaskQueueSelector(); | 41 PrioritizingTaskQueueSelector(); |
42 ~PrioritizingTaskQueueSelector() override; | 42 ~PrioritizingTaskQueueSelector() override; |
43 | 43 |
44 // Set the priority of |queue_index| to |priority|. | 44 // Blocks future EnableQueue or DisableQueue calls. |
| 45 void PreShutdown(); |
| 46 |
| 47 // Set the priority of |queue_index| to |priority|. If PreShutdown() has been |
| 48 // called this does nothing. |
45 void SetQueuePriority(size_t queue_index, QueuePriority priority); | 49 void SetQueuePriority(size_t queue_index, QueuePriority priority); |
46 | 50 |
47 // Enable the |queue_index| with a priority of |priority|. By default all | 51 // Enable the |queue_index| with a priority of |priority|. By default all |
48 // queues are enabled with normal priority. | 52 // queues are enabled with normal priority. If PreShutdown() has been called |
| 53 // this does nothing. |
49 void EnableQueue(size_t queue_index, QueuePriority priority); | 54 void EnableQueue(size_t queue_index, QueuePriority priority); |
50 | 55 |
51 // Disable the |queue_index|. | 56 // Disable the |queue_index|. If PreShutdown() has been called this does |
| 57 // nothing. |
52 void DisableQueue(size_t queue_index); | 58 void DisableQueue(size_t queue_index); |
53 | 59 |
54 // Whether |queue_index| is enabled. | 60 // Whether |queue_index| is enabled. |
55 bool IsQueueEnabled(size_t queue_index) const; | 61 bool IsQueueEnabled(size_t queue_index) const; |
56 | 62 |
57 // TaskQueueSelector implementation: | 63 // TaskQueueSelector implementation: |
58 void RegisterWorkQueues( | 64 void RegisterWorkQueues( |
59 const std::vector<const base::TaskQueue*>& work_queues) override; | 65 const std::vector<const base::TaskQueue*>& work_queues) override; |
60 bool SelectWorkQueueToService(size_t* out_queue_index) override; | 66 bool SelectWorkQueueToService(size_t* out_queue_index) override; |
61 void AsValueInto(base::trace_event::TracedValue* state) const override; | 67 void AsValueInto(base::trace_event::TracedValue* state) const override; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 // Number of high priority tasks which can be run before a normal priority | 99 // Number of high priority tasks which can be run before a normal priority |
94 // task should be selected to prevent starvation. | 100 // task should be selected to prevent starvation. |
95 // TODO(rmcilroy): Check if this is a good value. | 101 // TODO(rmcilroy): Check if this is a good value. |
96 static const size_t kMaxStarvationTasks = 5; | 102 static const size_t kMaxStarvationTasks = 5; |
97 | 103 |
98 base::ThreadChecker main_thread_checker_; | 104 base::ThreadChecker main_thread_checker_; |
99 std::vector<const base::TaskQueue*> work_queues_; | 105 std::vector<const base::TaskQueue*> work_queues_; |
100 std::set<size_t> queue_priorities_[QUEUE_PRIORITY_COUNT]; | 106 std::set<size_t> queue_priorities_[QUEUE_PRIORITY_COUNT]; |
101 size_t starvation_count_; | 107 size_t starvation_count_; |
102 Observer* task_queue_selector_observer_; // NOT OWNED | 108 Observer* task_queue_selector_observer_; // NOT OWNED |
| 109 bool pre_shutdown_; |
103 DISALLOW_COPY_AND_ASSIGN(PrioritizingTaskQueueSelector); | 110 DISALLOW_COPY_AND_ASSIGN(PrioritizingTaskQueueSelector); |
104 }; | 111 }; |
105 | 112 |
106 } // namespace scheduler | 113 } // namespace scheduler |
107 | 114 |
108 #endif // COMPONENTS_SCHEDULER_CHILD_PRIORITIZING_TASK_QUEUE_SELECTOR_H_ | 115 #endif // COMPONENTS_SCHEDULER_CHILD_PRIORITIZING_TASK_QUEUE_SELECTOR_H_ |
OLD | NEW |