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

Unified Diff: components/scheduler/base/task_queue_impl.h

Issue 1432263002: (reland) Adds TimeDomains to the TaskQueueManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix thread_hop_task DCHECK Created 5 years, 1 month 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
« no previous file with comments | « components/scheduler/base/task_queue.h ('k') | components/scheduler/base/task_queue_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/scheduler/base/task_queue_impl.h
diff --git a/components/scheduler/base/task_queue_impl.h b/components/scheduler/base/task_queue_impl.h
index e75746cebdf41b56eae1d6a69dcf7f614c99da34..1f130e124eefa9c7a0b59ff9723989c349859351 100644
--- a/components/scheduler/base/task_queue_impl.h
+++ b/components/scheduler/base/task_queue_impl.h
@@ -11,18 +11,19 @@
#include "base/threading/thread_checker.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/trace_event_argument.h"
-#include "components/scheduler/base/lazy_now.h"
#include "components/scheduler/base/task_queue.h"
#include "components/scheduler/scheduler_export.h"
namespace scheduler {
+class LazyNow;
+class TimeDomain;
class TaskQueueManager;
namespace internal {
-
class SCHEDULER_EXPORT TaskQueueImpl final : public TaskQueue {
public:
TaskQueueImpl(TaskQueueManager* task_queue_manager,
+ const scoped_refptr<TimeDomain>& time_domain,
const Spec& spec,
const char* disabled_by_default_tracing_category,
const char* disabled_by_default_verbose_tracing_category);
@@ -81,9 +82,7 @@ class SCHEDULER_EXPORT TaskQueueImpl final : public TaskQueue {
void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override;
void RemoveTaskObserver(
base::MessageLoop::TaskObserver* task_observer) override;
-
- bool NextPendingDelayedTaskRunTime(
- base::TimeTicks* next_pending_delayed_task);
+ void SetTimeDomain(const scoped_refptr<TimeDomain>& time_domain) override;
void UpdateWorkQueue(LazyNow* lazy_now,
bool should_trigger_wakeup,
@@ -124,9 +123,8 @@ class SCHEDULER_EXPORT TaskQueueImpl final : public TaskQueue {
// Delayed task posted to the underlying run loop, which locks
// |any_thread_lock_| and calls MoveReadyDelayedTasksToIncomingQueueLocked to
- // process dealyed tasks
- // that need to be run now. Thread safe, but in practice it's always called
- // from the main thread.
+ // process dealyed tasks that need to be run now. Thread safe, but in
+ // practice it's always called from the main thread.
void MoveReadyDelayedTasksToIncomingQueue(LazyNow* lazy_now);
// Test support functions. These should not be used in production code.
@@ -135,6 +133,7 @@ class SCHEDULER_EXPORT TaskQueueImpl final : public TaskQueue {
size_t WorkQueueSizeForTest() const {
return main_thread_only().work_queue.size();
}
+ size_t IncomingQueueSizeForTest() const;
// Can be called on any thread.
static const char* PumpPolicyToString(TaskQueue::PumpPolicy pump_policy);
@@ -153,7 +152,9 @@ class SCHEDULER_EXPORT TaskQueueImpl final : public TaskQueue {
};
struct AnyThread {
- AnyThread(TaskQueueManager* task_queue_manager, PumpPolicy pump_policy);
+ AnyThread(TaskQueueManager* task_queue_manager,
+ PumpPolicy pump_policy,
+ const scoped_refptr<TimeDomain>& time_domain);
~AnyThread();
// TaskQueueManager is maintained in two copies: inside AnyThread and inside
@@ -164,10 +165,11 @@ class SCHEDULER_EXPORT TaskQueueImpl final : public TaskQueue {
std::queue<Task> incoming_queue;
PumpPolicy pump_policy;
std::priority_queue<Task> delayed_task_queue;
+ scoped_refptr<TimeDomain> time_domain;
};
struct MainThreadOnly {
- explicit MainThreadOnly(TaskQueueManager* task_queue_manager);
+ MainThreadOnly(TaskQueueManager* task_queue_manager);
~MainThreadOnly();
// Another copy of TaskQueueManager for lock-free access from the main
@@ -190,9 +192,10 @@ class SCHEDULER_EXPORT TaskQueueImpl final : public TaskQueue {
const base::Closure& task,
base::TimeTicks desired_run_time,
TaskType task_type);
+ void ScheduleDelayedWorkTask(const scoped_refptr<TimeDomain> time_domain,
+ base::TimeTicks desired_run_time);
- // Enqueues any delayed tasks which should be run now on the incoming_queue_
- // and calls ScheduleDelayedWorkLocked to ensure future tasks are scheduled.
+ // Enqueues any delayed tasks which should be run now on the incoming_queue_.
// Must be called with |any_thread_lock_| locked.
void MoveReadyDelayedTasksToIncomingQueueLocked(LazyNow* lazy_now);
« no previous file with comments | « components/scheduler/base/task_queue.h ('k') | components/scheduler/base/task_queue_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698