mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 09:46:09 +03:00
57 lines
2.0 KiB
C
57 lines
2.0 KiB
C
|
// Copyright 2018 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 BASE_MESSAGE_LOOP_SEQUENCED_TASK_SOURCE_H_
|
||
|
#define BASE_MESSAGE_LOOP_SEQUENCED_TASK_SOURCE_H_
|
||
|
|
||
|
#include "base/callback.h"
|
||
|
#include "base/pending_task.h"
|
||
|
#include "base/time/time.h"
|
||
|
|
||
|
namespace base {
|
||
|
|
||
|
// A source of tasks to be executed sequentially. Unless specified otherwise,
|
||
|
// methods below are not thread-safe (must be called from the executing
|
||
|
// sequence).
|
||
|
// TODO(scheduler-dev): Coalesce with
|
||
|
// base::sequence_manager::SequencedTaskSource.
|
||
|
class SequencedTaskSource {
|
||
|
public:
|
||
|
class Observer {
|
||
|
public:
|
||
|
virtual ~Observer() = default;
|
||
|
|
||
|
// Notifies this Observer that |task| is about to be enqueued in the
|
||
|
// SequencedTaskSource it observes.
|
||
|
// WillQueueTask() may be invoked from any thread.
|
||
|
virtual void WillQueueTask(PendingTask* task) = 0;
|
||
|
|
||
|
// Notifies this Observer that a task was enqueued in the
|
||
|
// SequencedTaskSource it observes. |was_empty| is true if the task source
|
||
|
// was empty (i.e. |!HasTasks()|) before this task was posted.
|
||
|
// DidQueueTask() may be invoked from any thread.
|
||
|
virtual void DidQueueTask(bool was_empty) = 0;
|
||
|
};
|
||
|
|
||
|
virtual ~SequencedTaskSource() = default;
|
||
|
|
||
|
// Take a next task to run from a sequence. Must only be called if
|
||
|
// HasTasks() returns true.
|
||
|
virtual PendingTask TakeTask() = 0;
|
||
|
|
||
|
// Returns true if this SequencedTaskSource will return a task from the next
|
||
|
// TakeTask() call.
|
||
|
virtual bool HasTasks() = 0;
|
||
|
|
||
|
// Injects |task| at the end of this SequencedTaskSource (such that it will be
|
||
|
// the last task returned by TakeTask() if no other task are posted after this
|
||
|
// point). TODO(gab): This is only required to support clearing tasks on
|
||
|
// shutdown, maybe leaking tasks on shutdown is a better alternative.
|
||
|
virtual void InjectTask(OnceClosure task) = 0;
|
||
|
};
|
||
|
|
||
|
} // namespace base
|
||
|
|
||
|
#endif // BASE_MESSAGE_LOOP_SEQUENCED_TASK_SOURCE_H_
|