| Index: third_party/WebKit/Source/platform/scheduler/base/enqueue_order.h
|
| diff --git a/third_party/WebKit/Source/platform/scheduler/base/enqueue_order.h b/third_party/WebKit/Source/platform/scheduler/base/enqueue_order.h
|
| index 04932d54376478f53556d100ef23692280bee6ff..e4073e6297b1b1009b9e51b810392b476637486e 100644
|
| --- a/third_party/WebKit/Source/platform/scheduler/base/enqueue_order.h
|
| +++ b/third_party/WebKit/Source/platform/scheduler/base/enqueue_order.h
|
| @@ -8,41 +8,54 @@
|
| #include <stdint.h>
|
|
|
| #include "base/synchronization/lock.h"
|
| +#include "public/platform/WebCommon.h"
|
|
|
| namespace blink {
|
| namespace scheduler {
|
| namespace internal {
|
|
|
| -using EnqueueOrder = uint64_t;
|
| +using SequenceNumber = uint64_t;
|
|
|
| -// TODO(scheduler-dev): Remove explicit casts when c++17 comes.
|
| -enum class EnqueueOrderValues : EnqueueOrder {
|
| - // Invalid EnqueueOrder.
|
| +// The enqueue order is used to uniquely order tasks. The primary ordering key
|
| +// is the desired run time of a task, followed by the sequence number. Note the
|
| +// scheduler assumes sequence numbers will not overflow.
|
| +struct BLINK_PLATFORM_EXPORT EnqueueOrder {
|
| + base::TimeTicks delayed_run_time;
|
| + SequenceNumber sequence_num;
|
| +
|
| + EnqueueOrder();
|
| + EnqueueOrder(base::TimeTicks delayed_run_time, SequenceNumber sequence_num);
|
| +
|
| + bool is_null() const { return delayed_run_time.is_null() && !sequence_num; }
|
| +
|
| + bool operator==(const EnqueueOrder& other) const;
|
| + bool operator<=(const EnqueueOrder& other) const;
|
| + bool operator<(const EnqueueOrder& other) const;
|
| +};
|
| +
|
| +std::ostream& operator<<(std::ostream&, const EnqueueOrder&);
|
| +
|
| +enum class EnqueueOrderSequenceNumberValues {
|
| + // Invalid sequence number.
|
| NONE = 0,
|
|
|
| - // Earliest possible EnqueueOrder, to be used for fence blocking.
|
| + // Earliest possible sequence number, to be used for fence blocking.
|
| BLOCKING_FENCE = 1,
|
| FIRST = 2,
|
| };
|
|
|
| -// A 64bit integer used to provide ordering of tasks. NOTE The scheduler assumes
|
| -// these values will not overflow.
|
| class EnqueueOrderGenerator {
|
| public:
|
| EnqueueOrderGenerator();
|
| ~EnqueueOrderGenerator();
|
|
|
| - // Returns a monotonically increasing integer, starting from one. Can be
|
| + // Returns a monotonically increasing enqueue order, starting from one. Can be
|
| // called from any thread.
|
| - EnqueueOrder GenerateNext();
|
| -
|
| - static bool IsValidEnqueueOrder(EnqueueOrder enqueue_order) {
|
| - return enqueue_order != 0ull;
|
| - }
|
| + EnqueueOrder GenerateNext(base::TimeTicks delayed_run_time);
|
|
|
| private:
|
| base::Lock lock_;
|
| - EnqueueOrder enqueue_order_;
|
| + SequenceNumber sequence_num_;
|
| };
|
|
|
| } // namespace internal
|
|
|