| 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 // Do a re-entrancy check. | 115 // Do a re-entrancy check. |
| 116 if (m_firingTimers) | 116 if (m_firingTimers) |
| 117 return; | 117 return; |
| 118 m_firingTimers = true; | 118 m_firingTimers = true; |
| 119 m_pendingSharedTimerFireTime = 0; | 119 m_pendingSharedTimerFireTime = 0; |
| 120 | 120 |
| 121 double fireTime = monotonicallyIncreasingTime(); | 121 double fireTime = monotonicallyIncreasingTime(); |
| 122 double timeToQuit = fireTime + maxDurationOfFiringTimers; | 122 double timeToQuit = fireTime + maxDurationOfFiringTimers; |
| 123 | 123 |
| 124 while (!m_timerHeap.isEmpty() && m_timerHeap.first()->m_nextFireTime <= fire
Time) { | 124 while (!m_timerHeap.isEmpty() && m_timerHeap.first()->m_nextFireTime <= fire
Time) { |
| 125 TimerBase* timer = m_timerHeap.first(); | 125 TimerBase& timer = *m_timerHeap.first(); |
| 126 timer->m_nextFireTime = 0; | 126 timer.m_nextFireTime = 0; |
| 127 timer->m_unalignedNextFireTime = 0; | 127 timer.m_unalignedNextFireTime = 0; |
| 128 timer->heapDeleteMin(); | 128 timer.heapDeleteMin(); |
| 129 | 129 |
| 130 double interval = timer->repeatInterval(); | 130 double interval = timer.repeatInterval(); |
| 131 timer->setNextFireTime(interval ? fireTime + interval : 0); | 131 timer.setNextFireTime(interval ? fireTime + interval : 0); |
| 132 |
| 133 TRACE_EVENT2("blink", "ThreadTimers::sharedTimerFiredInternal", |
| 134 "src_file", timer.location().fileName(), |
| 135 "src_func", timer.location().functionName()); |
| 132 | 136 |
| 133 // Once the timer has been fired, it may be deleted, so do nothing else
with it after this point. | 137 // Once the timer has been fired, it may be deleted, so do nothing else
with it after this point. |
| 134 timer->fired(); | 138 timer.fired(); |
| 135 | 139 |
| 136 // Catch the case where the timer asked timers to fire in a nested event
loop, or we are over time limit. | 140 // Catch the case where the timer asked timers to fire in a nested event
loop, or we are over time limit. |
| 137 if (!m_firingTimers || timeToQuit < monotonicallyIncreasingTime()) | 141 if (!m_firingTimers || timeToQuit < monotonicallyIncreasingTime()) |
| 138 break; | 142 break; |
| 139 } | 143 } |
| 140 | 144 |
| 141 m_firingTimers = false; | 145 m_firingTimers = false; |
| 142 | 146 |
| 143 updateSharedTimer(); | 147 updateSharedTimer(); |
| 144 } | 148 } |
| 145 | 149 |
| 146 void ThreadTimers::fireTimersInNestedEventLoop() | 150 void ThreadTimers::fireTimersInNestedEventLoop() |
| 147 { | 151 { |
| 148 // Reset the reentrancy guard so the timers can fire again. | 152 // Reset the reentrancy guard so the timers can fire again. |
| 149 m_firingTimers = false; | 153 m_firingTimers = false; |
| 150 updateSharedTimer(); | 154 updateSharedTimer(); |
| 151 } | 155 } |
| 152 | 156 |
| 153 } // namespace WebCore | 157 } // namespace WebCore |
| 154 | 158 |
| OLD | NEW |