OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "platform/scheduler/base/enqueue_order.h" | 5 #include "platform/scheduler/base/enqueue_order.h" |
6 | 6 |
7 namespace blink { | 7 namespace blink { |
8 namespace scheduler { | 8 namespace scheduler { |
9 namespace internal { | 9 namespace internal { |
10 | 10 |
11 // Note we set the first |enqueue_order_| to a specific non-zero value, because | 11 // Note we set the first sequence number to a specific non-zero value, because |
12 // first N values of EnqueueOrder have special meaning (see EnqueueOrderValues). | 12 // first N values of EnqueueOrder have special meaning (see EnqueueOrderValues). |
13 EnqueueOrderGenerator::EnqueueOrderGenerator() | 13 EnqueueOrderGenerator::EnqueueOrderGenerator() |
14 : enqueue_order_(static_cast<EnqueueOrder>(EnqueueOrderValues::FIRST)) {} | 14 : sequence_num_( |
| 15 static_cast<uint64_t>(EnqueueOrderSequenceNumberValues::FIRST)) {} |
15 | 16 |
16 EnqueueOrderGenerator::~EnqueueOrderGenerator() {} | 17 EnqueueOrderGenerator::~EnqueueOrderGenerator() {} |
17 | 18 |
18 EnqueueOrder EnqueueOrderGenerator::GenerateNext() { | 19 EnqueueOrder EnqueueOrderGenerator::GenerateNext( |
| 20 base::TimeTicks delayed_run_time) { |
19 base::AutoLock lock(lock_); | 21 base::AutoLock lock(lock_); |
20 return enqueue_order_++; | 22 return {delayed_run_time, sequence_num_++}; |
| 23 } |
| 24 |
| 25 bool EnqueueOrder::operator==(const EnqueueOrder& other) const { |
| 26 return delayed_run_time == other.delayed_run_time && |
| 27 sequence_num == other.sequence_num; |
| 28 } |
| 29 |
| 30 bool EnqueueOrder::operator<=(const EnqueueOrder& other) const { |
| 31 if (delayed_run_time > other.delayed_run_time) |
| 32 return false; |
| 33 |
| 34 if (delayed_run_time < other.delayed_run_time) |
| 35 return true; |
| 36 |
| 37 return sequence_num <= other.sequence_num; |
| 38 } |
| 39 |
| 40 bool EnqueueOrder::operator<(const EnqueueOrder& other) const { |
| 41 return !(*this == other) && *this <= other; |
| 42 } |
| 43 |
| 44 std::ostream& operator<<(std::ostream& stream, const EnqueueOrder& value) { |
| 45 return stream << "(" << value.delayed_run_time << ", " << value.sequence_num |
| 46 << ")"; |
21 } | 47 } |
22 | 48 |
23 } // namespace internal | 49 } // namespace internal |
24 } // namespace scheduler | 50 } // namespace scheduler |
25 } // namespace blink | 51 } // namespace blink |
OLD | NEW |