Changeset 212541 in webkit for trunk/Source/JavaScriptCore/heap/HeapTimer.cpp
- Timestamp:
- Feb 17, 2017, 1:13:58 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/heap/HeapTimer.cpp
r212464 r212541 109 109 #elif USE(GLIB) 110 110 111 const long HeapTimer::s_decade = 60 * 60 * 24 * 365 * 10; 112 111 113 static GSourceFuncs heapTimerSourceFunctions = { 112 114 nullptr, // prepare 113 115 nullptr, // check 114 116 // dispatch 115 [](GSource* source, GSourceFunc callback, gpointer userData) -> gboolean117 [](GSource*, GSourceFunc callback, gpointer userData) -> gboolean 116 118 { 117 if (g_source_get_ready_time(source) == -1)118 return G_SOURCE_CONTINUE;119 g_source_set_ready_time(source, -1);120 119 return callback(userData); 121 120 }, … … 132 131 g_source_set_name(m_timer.get(), "[JavaScriptCore] HeapTimer"); 133 132 g_source_set_callback(m_timer.get(), [](gpointer userData) -> gboolean { 134 static_cast<HeapTimer*>(userData)->timerDidFire(); 133 auto& heapTimer = *static_cast<HeapTimer*>(userData); 134 g_source_set_ready_time(heapTimer.m_timer.get(), g_get_monotonic_time() + HeapTimer::s_decade * G_USEC_PER_SEC); 135 heapTimer.timerDidFire(); 135 136 return G_SOURCE_CONTINUE; 136 137 }, this, nullptr); … … 163 164 void HeapTimer::scheduleTimer(double intervalInSeconds) 164 165 { 165 auto delayDuration = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(intervalInSeconds)); 166 gint64 currentTime = g_get_monotonic_time(); 167 gint64 targetTime = currentTime + std::min<gint64>(G_MAXINT64 - currentTime, delayDuration.count()); 168 ASSERT(targetTime >= currentTime); 169 g_source_set_ready_time(m_timer.get(), targetTime); 166 g_source_set_ready_time(m_timer.get(), g_get_monotonic_time() + intervalInSeconds * G_USEC_PER_SEC); 170 167 m_isScheduled = true; 171 168 } … … 173 170 void HeapTimer::cancelTimer() 174 171 { 175 g_source_set_ready_time(m_timer.get(), -1);172 g_source_set_ready_time(m_timer.get(), g_get_monotonic_time() + s_decade * G_USEC_PER_SEC); 176 173 m_isScheduled = false; 177 174 }
Note:
See TracChangeset
for help on using the changeset viewer.