| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 25 */ | 25 */ |
| 26 | 26 |
| 27 #include "config.h" | 27 #include "config.h" |
| 28 #include "platform/Timer.h" | 28 #include "platform/Timer.h" |
| 29 | 29 |
| 30 #include "platform/PlatformThreadData.h" | 30 #include "platform/PlatformThreadData.h" |
| 31 #include "platform/ThreadTimers.h" | 31 #include "platform/ThreadTimers.h" |
| 32 #include "platform/heap/AddressSanitizer.h" |
| 32 #include "wtf/Atomics.h" | 33 #include "wtf/Atomics.h" |
| 33 #include "wtf/CurrentTime.h" | 34 #include "wtf/CurrentTime.h" |
| 34 #include "wtf/HashSet.h" | 35 #include "wtf/HashSet.h" |
| 35 #include <algorithm> | 36 #include <algorithm> |
| 36 #include <limits.h> | 37 #include <limits.h> |
| 37 #include <limits> | 38 #include <limits> |
| 38 #include <math.h> | 39 #include <math.h> |
| 39 | 40 |
| 40 namespace blink { | 41 namespace blink { |
| 41 | 42 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 70 TimerHeapReference& operator=(TimerHeapReference); | 71 TimerHeapReference& operator=(TimerHeapReference); |
| 71 private: | 72 private: |
| 72 TimerBase*& m_reference; | 73 TimerBase*& m_reference; |
| 73 }; | 74 }; |
| 74 | 75 |
| 75 inline TimerHeapReference TimerHeapPointer::operator*() const | 76 inline TimerHeapReference TimerHeapPointer::operator*() const |
| 76 { | 77 { |
| 77 return *m_pointer; | 78 return *m_pointer; |
| 78 } | 79 } |
| 79 | 80 |
| 81 NO_LAZY_SWEEP_SANITIZE_ADDRESS |
| 80 inline TimerHeapReference& TimerHeapReference::operator=(TimerBase* timer) | 82 inline TimerHeapReference& TimerHeapReference::operator=(TimerBase* timer) |
| 81 { | 83 { |
| 82 m_reference = timer; | 84 m_reference = timer; |
| 83 Vector<TimerBase*>& heap = timer->timerHeap(); | 85 Vector<TimerBase*>& heap = timer->timerHeap(); |
| 84 if (&m_reference >= heap.data() && &m_reference < heap.data() + heap.size()) | 86 if (&m_reference >= heap.data() && &m_reference < heap.data() + heap.size()) |
| 85 timer->m_heapIndex = &m_reference - heap.data(); | 87 timer->m_heapIndex = &m_reference - heap.data(); |
| 86 return *this; | 88 return *this; |
| 87 } | 89 } |
| 88 | 90 |
| 91 NO_LAZY_SWEEP_SANITIZE_ADDRESS |
| 89 inline TimerHeapReference& TimerHeapReference::operator=(TimerHeapReference b) | 92 inline TimerHeapReference& TimerHeapReference::operator=(TimerHeapReference b) |
| 90 { | 93 { |
| 91 TimerBase* timer = b; | 94 TimerBase* timer = b; |
| 92 return *this = timer; | 95 return *this = timer; |
| 93 } | 96 } |
| 94 | 97 |
| 95 inline void swap(TimerHeapReference a, TimerHeapReference b) | 98 inline void swap(TimerHeapReference a, TimerHeapReference b) |
| 96 { | 99 { |
| 97 TimerBase* timerA = a; | 100 TimerBase* timerA = a; |
| 98 TimerBase* timerB = b; | 101 TimerBase* timerB = b; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 inline TimerHeapIterator operator-(TimerHeapIterator a, size_t b) { return Timer
HeapIterator(a.m_pointer - b); } | 164 inline TimerHeapIterator operator-(TimerHeapIterator a, size_t b) { return Timer
HeapIterator(a.m_pointer - b); } |
| 162 inline ptrdiff_t operator-(TimerHeapIterator a, TimerHeapIterator b) { return a.
m_pointer - b.m_pointer; } | 165 inline ptrdiff_t operator-(TimerHeapIterator a, TimerHeapIterator b) { return a.
m_pointer - b.m_pointer; } |
| 163 | 166 |
| 164 // ---------------- | 167 // ---------------- |
| 165 | 168 |
| 166 class TimerHeapLessThanFunction { | 169 class TimerHeapLessThanFunction { |
| 167 public: | 170 public: |
| 168 bool operator()(const TimerBase*, const TimerBase*) const; | 171 bool operator()(const TimerBase*, const TimerBase*) const; |
| 169 }; | 172 }; |
| 170 | 173 |
| 174 NO_LAZY_SWEEP_SANITIZE_ADDRESS |
| 171 inline bool TimerHeapLessThanFunction::operator()(const TimerBase* a, const Time
rBase* b) const | 175 inline bool TimerHeapLessThanFunction::operator()(const TimerBase* a, const Time
rBase* b) const |
| 172 { | 176 { |
| 173 // The comparisons below are "backwards" because the heap puts the largest | 177 // The comparisons below are "backwards" because the heap puts the largest |
| 174 // element first and we want the lowest time to be the first one in the heap
. | 178 // element first and we want the lowest time to be the first one in the heap
. |
| 175 double aFireTime = a->m_nextFireTime; | 179 double aFireTime = a->m_nextFireTime; |
| 176 double bFireTime = b->m_nextFireTime; | 180 double bFireTime = b->m_nextFireTime; |
| 177 if (bFireTime != aFireTime) | 181 if (bFireTime != aFireTime) |
| 178 return bFireTime < aFireTime; | 182 return bFireTime < aFireTime; |
| 179 | 183 |
| 180 // We need to look at the difference of the insertion orders instead of comp
aring the two | 184 // We need to look at the difference of the insertion orders instead of comp
aring the two |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 } | 287 } |
| 284 | 288 |
| 285 inline void TimerBase::heapInsert() | 289 inline void TimerBase::heapInsert() |
| 286 { | 290 { |
| 287 ASSERT(!inHeap()); | 291 ASSERT(!inHeap()); |
| 288 timerHeap().append(this); | 292 timerHeap().append(this); |
| 289 m_heapIndex = timerHeap().size() - 1; | 293 m_heapIndex = timerHeap().size() - 1; |
| 290 heapDecreaseKey(); | 294 heapDecreaseKey(); |
| 291 } | 295 } |
| 292 | 296 |
| 297 NO_LAZY_SWEEP_SANITIZE_ADDRESS |
| 293 inline void TimerBase::heapPop() | 298 inline void TimerBase::heapPop() |
| 294 { | 299 { |
| 295 // Temporarily force this timer to have the minimum key so we can pop it. | 300 // Temporarily force this timer to have the minimum key so we can pop it. |
| 296 double fireTime = m_nextFireTime; | 301 double fireTime = m_nextFireTime; |
| 297 m_nextFireTime = -std::numeric_limits<double>::infinity(); | 302 m_nextFireTime = -std::numeric_limits<double>::infinity(); |
| 298 heapDecreaseKey(); | 303 heapDecreaseKey(); |
| 299 heapPopMin(); | 304 heapPopMin(); |
| 300 m_nextFireTime = fireTime; | 305 m_nextFireTime = fireTime; |
| 301 } | 306 } |
| 302 | 307 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 setNextFireTime(m_unalignedNextFireTime); | 405 setNextFireTime(m_unalignedNextFireTime); |
| 401 } | 406 } |
| 402 | 407 |
| 403 double TimerBase::nextUnalignedFireInterval() const | 408 double TimerBase::nextUnalignedFireInterval() const |
| 404 { | 409 { |
| 405 ASSERT(isActive()); | 410 ASSERT(isActive()); |
| 406 return std::max(m_unalignedNextFireTime - monotonicallyIncreasingTime(), 0.0
); | 411 return std::max(m_unalignedNextFireTime - monotonicallyIncreasingTime(), 0.0
); |
| 407 } | 412 } |
| 408 | 413 |
| 409 } // namespace blink | 414 } // namespace blink |
| OLD | NEW |