Chromium Code Reviews| 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..9b7794a4fc9051e854a7697a24fddd83c9de1ddc 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,49 @@ |
| #include <stdint.h> |
| #include "base/synchronization/lock.h" |
| +#include "public/platform/WebCommon.h" |
| namespace blink { |
| namespace scheduler { |
| namespace internal { |
| -using EnqueueOrder = uint64_t; |
| +// 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; |
| + uint64_t sequence_num; |
|
alex clarke (OOO till 29th)
2017/04/13 07:46:00
I wonder if we should have
using SequenceNum = ui
Sami
2017/04/18 10:47:49
Good idea, done.
|
| -// TODO(scheduler-dev): Remove explicit casts when c++17 comes. |
| -enum class EnqueueOrderValues : EnqueueOrder { |
| - // Invalid EnqueueOrder. |
| + 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 |
|
alex clarke (OOO till 29th)
2017/04/13 07:46:00
We should keep the comment about not overflowing.
Sami
2017/04/18 10:47:49
Yep, it's now further up the file where the enqueu
|
| -// 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_; |
| + uint64_t sequence_num_; |
| }; |
| } // namespace internal |