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 |