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_(static_cast<SequenceNumber>( |
| 15 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 EnqueueOrder::EnqueueOrder() : sequence_num(0) {} |
| 26 |
| 27 EnqueueOrder::EnqueueOrder(base::TimeTicks delayed_run_time, |
| 28 SequenceNumber sequence_num) |
| 29 : delayed_run_time(delayed_run_time), sequence_num(sequence_num) {} |
| 30 |
| 31 bool EnqueueOrder::operator==(const EnqueueOrder& other) const { |
| 32 return delayed_run_time == other.delayed_run_time && |
| 33 sequence_num == other.sequence_num; |
| 34 } |
| 35 |
| 36 bool EnqueueOrder::operator<=(const EnqueueOrder& other) const { |
| 37 if (delayed_run_time > other.delayed_run_time) |
| 38 return false; |
| 39 |
| 40 if (delayed_run_time < other.delayed_run_time) |
| 41 return true; |
| 42 |
| 43 return sequence_num <= other.sequence_num; |
| 44 } |
| 45 |
| 46 bool EnqueueOrder::operator<(const EnqueueOrder& other) const { |
| 47 return !(*this == other) && *this <= other; |
| 48 } |
| 49 |
| 50 std::ostream& operator<<(std::ostream& stream, const EnqueueOrder& value) { |
| 51 return stream << "(" << value.delayed_run_time << ", " << value.sequence_num |
| 52 << ")"; |
21 } | 53 } |
22 | 54 |
23 } // namespace internal | 55 } // namespace internal |
24 } // namespace scheduler | 56 } // namespace scheduler |
25 } // namespace blink | 57 } // namespace blink |
OLD | NEW |