| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. | 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 , m_animationTimer(this, &ScriptedAnimationController::animationTimerFired) | 54 , m_animationTimer(this, &ScriptedAnimationController::animationTimerFired) |
| 55 , m_lastAnimationFrameTime(0) | 55 , m_lastAnimationFrameTime(0) |
| 56 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) | 56 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) |
| 57 , m_useTimer(false) | 57 , m_useTimer(false) |
| 58 #endif | 58 #endif |
| 59 #endif | 59 #endif |
| 60 { | 60 { |
| 61 windowScreenDidChange(displayID); | 61 windowScreenDidChange(displayID); |
| 62 } | 62 } |
| 63 | 63 |
| 64 ScriptedAnimationController::~ScriptedAnimationController() |
| 65 { |
| 66 } |
| 67 |
| 64 void ScriptedAnimationController::suspend() | 68 void ScriptedAnimationController::suspend() |
| 65 { | 69 { |
| 66 ++m_suspendCount; | 70 ++m_suspendCount; |
| 67 } | 71 } |
| 68 | 72 |
| 69 void ScriptedAnimationController::resume() | 73 void ScriptedAnimationController::resume() |
| 70 { | 74 { |
| 71 --m_suspendCount; | 75 --m_suspendCount; |
| 72 if (!m_suspendCount && m_callbacks.size()) | 76 if (!m_suspendCount && m_callbacks.size()) |
| 73 scheduleAnimation(); | 77 scheduleAnimation(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 // FIXME: Currently, this code doesn't do any visibility tests beyond checki
ng display: | 116 // FIXME: Currently, this code doesn't do any visibility tests beyond checki
ng display: |
| 113 | 117 |
| 114 // First, generate a list of callbacks to consider. Callbacks registered fr
om this point | 118 // First, generate a list of callbacks to consider. Callbacks registered fr
om this point |
| 115 // on are considered only for the "next" frame, not this one. | 119 // on are considered only for the "next" frame, not this one. |
| 116 CallbackList callbacks(m_callbacks); | 120 CallbackList callbacks(m_callbacks); |
| 117 | 121 |
| 118 // Firing the callback may cause the visibility of other elements to change.
To avoid | 122 // Firing the callback may cause the visibility of other elements to change.
To avoid |
| 119 // missing any callbacks, we keep iterating through the list of candiate cal
lbacks and firing | 123 // missing any callbacks, we keep iterating through the list of candiate cal
lbacks and firing |
| 120 // them until nothing new becomes visible. | 124 // them until nothing new becomes visible. |
| 121 bool firedCallback; | 125 bool firedCallback; |
| 126 |
| 127 // Invoking callbacks may detach elements from our document, which clear's t
he document's |
| 128 // reference to us, so take a defensive reference. |
| 129 RefPtr<ScriptedAnimationController> protector(this); |
| 122 do { | 130 do { |
| 123 firedCallback = false; | 131 firedCallback = false; |
| 132 // A previous iteration may have detached this Document from the DOM tre
e. |
| 133 // If so, then we do not need to process any more callbacks. |
| 134 if (!m_document) |
| 135 continue; |
| 136 |
| 124 // A previous iteration may have invalidated style (or layout). Update
styles for each iteration | 137 // A previous iteration may have invalidated style (or layout). Update
styles for each iteration |
| 125 // for now since all we check is the existence of a renderer. | 138 // for now since all we check is the existence of a renderer. |
| 126 m_document->updateStyleIfNeeded(); | 139 m_document->updateStyleIfNeeded(); |
| 127 for (size_t i = 0; i < callbacks.size(); ++i) { | 140 for (size_t i = 0; i < callbacks.size(); ++i) { |
| 128 RequestAnimationFrameCallback* callback = callbacks[i].get(); | 141 RequestAnimationFrameCallback* callback = callbacks[i].get(); |
| 129 if (!callback->m_firedOrCancelled && (!callback->m_element || callba
ck->m_element->renderer())) { | 142 if (!callback->m_firedOrCancelled && (!callback->m_element || callba
ck->m_element->renderer())) { |
| 130 callback->m_firedOrCancelled = true; | 143 callback->m_firedOrCancelled = true; |
| 131 InspectorInstrumentationCookie cookie = InspectorInstrumentation
::willFireAnimationFrameEvent(m_document, callback->m_id); | 144 InspectorInstrumentationCookie cookie = InspectorInstrumentation
::willFireAnimationFrameEvent(m_document, callback->m_id); |
| 132 callback->handleEvent(time); | 145 callback->handleEvent(time); |
| 133 InspectorInstrumentation::didFireAnimationFrameEvent(cookie); | 146 InspectorInstrumentation::didFireAnimationFrameEvent(cookie); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 154 { | 167 { |
| 155 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) | 168 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) |
| 156 DisplayRefreshMonitorManager::sharedManager()->windowScreenDidChange(display
ID, this); | 169 DisplayRefreshMonitorManager::sharedManager()->windowScreenDidChange(display
ID, this); |
| 157 #else | 170 #else |
| 158 UNUSED_PARAM(displayID); | 171 UNUSED_PARAM(displayID); |
| 159 #endif | 172 #endif |
| 160 } | 173 } |
| 161 | 174 |
| 162 void ScriptedAnimationController::scheduleAnimation() | 175 void ScriptedAnimationController::scheduleAnimation() |
| 163 { | 176 { |
| 177 if (!m_document) |
| 178 return; |
| 179 |
| 164 #if USE(REQUEST_ANIMATION_FRAME_TIMER) | 180 #if USE(REQUEST_ANIMATION_FRAME_TIMER) |
| 165 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) | 181 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) |
| 166 if (!m_useTimer) { | 182 if (!m_useTimer) { |
| 167 if (DisplayRefreshMonitorManager::sharedManager()->scheduleAnimation(thi
s)) | 183 if (DisplayRefreshMonitorManager::sharedManager()->scheduleAnimation(thi
s)) |
| 168 return; | 184 return; |
| 169 | 185 |
| 170 m_useTimer = true; | 186 m_useTimer = true; |
| 171 } | 187 } |
| 172 #endif | 188 #endif |
| 173 if (m_animationTimer.isActive()) | 189 if (m_animationTimer.isActive()) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 186 { | 202 { |
| 187 m_lastAnimationFrameTime = currentTime(); | 203 m_lastAnimationFrameTime = currentTime(); |
| 188 serviceScriptedAnimations(convertSecondsToDOMTimeStamp(m_lastAnimationFrameT
ime)); | 204 serviceScriptedAnimations(convertSecondsToDOMTimeStamp(m_lastAnimationFrameT
ime)); |
| 189 } | 205 } |
| 190 #endif | 206 #endif |
| 191 | 207 |
| 192 } | 208 } |
| 193 | 209 |
| 194 #endif | 210 #endif |
| 195 | 211 |
| OLD | NEW |