Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: Source/core/dom/ScriptedAnimationController.cpp

Issue 92913002: Manage RequestAnimationFrameCallbacks with OwnPtrs instead of RefPtrs (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/ScriptedAnimationController.h ('k') | Source/core/frame/DOMWindow.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 void ScriptedAnimationController::resume() 60 void ScriptedAnimationController::resume()
61 { 61 {
62 // It would be nice to put an ASSERT(m_suspendCount > 0) here, but in WK1 re sume() can be called 62 // It would be nice to put an ASSERT(m_suspendCount > 0) here, but in WK1 re sume() can be called
63 // even when suspend hasn't (if a tab was created in the background). 63 // even when suspend hasn't (if a tab was created in the background).
64 if (m_suspendCount > 0) 64 if (m_suspendCount > 0)
65 --m_suspendCount; 65 --m_suspendCount;
66 scheduleAnimationIfNeeded(); 66 scheduleAnimationIfNeeded();
67 } 67 }
68 68
69 ScriptedAnimationController::CallbackId ScriptedAnimationController::registerCal lback(PassRefPtr<RequestAnimationFrameCallback> callback) 69 ScriptedAnimationController::CallbackId ScriptedAnimationController::registerCal lback(PassOwnPtr<RequestAnimationFrameCallback> callback)
70 { 70 {
71 ScriptedAnimationController::CallbackId id = ++m_nextCallbackId; 71 ScriptedAnimationController::CallbackId id = ++m_nextCallbackId;
72 callback->m_firedOrCancelled = false; 72 callback->m_cancelled = false;
73 callback->m_id = id; 73 callback->m_id = id;
74 m_callbacks.append(callback); 74 m_callbacks.append(callback);
75 scheduleAnimationIfNeeded(); 75 scheduleAnimationIfNeeded();
76 76
77 InspectorInstrumentation::didRequestAnimationFrame(m_document, id); 77 InspectorInstrumentation::didRequestAnimationFrame(m_document, id);
78 78
79 return id; 79 return id;
80 } 80 }
81 81
82 void ScriptedAnimationController::cancelCallback(CallbackId id) 82 void ScriptedAnimationController::cancelCallback(CallbackId id)
83 { 83 {
84 for (size_t i = 0; i < m_callbacks.size(); ++i) { 84 for (size_t i = 0; i < m_callbacks.size(); ++i) {
85 if (m_callbacks[i]->m_id == id) { 85 if (m_callbacks[i]->m_id == id) {
86 m_callbacks[i]->m_firedOrCancelled = true;
87 InspectorInstrumentation::didCancelAnimationFrame(m_document, id); 86 InspectorInstrumentation::didCancelAnimationFrame(m_document, id);
88 m_callbacks.remove(i); 87 m_callbacks.remove(i);
89 return; 88 return;
90 } 89 }
91 } 90 }
91 for (size_t i = 0; i < m_callbacksToInvoke.size(); ++i) {
92 if (m_callbacksToInvoke[i]->m_id == id) {
93 InspectorInstrumentation::didCancelAnimationFrame(m_document, id);
94 m_callbacksToInvoke[i]->m_cancelled = true;
95 // will be removed at the end of executeCallbacks()
96 return;
97 }
98 }
92 } 99 }
93 100
94 void ScriptedAnimationController::dispatchEvents() 101 void ScriptedAnimationController::dispatchEvents()
95 { 102 {
96 Vector<RefPtr<Event> > events; 103 Vector<RefPtr<Event> > events;
97 events.swap(m_eventQueue); 104 events.swap(m_eventQueue);
98 m_perFrameEvents.clear(); 105 m_perFrameEvents.clear();
99 106
100 for (size_t i = 0; i < events.size(); ++i) { 107 for (size_t i = 0; i < events.size(); ++i) {
101 EventTarget* eventTarget = events[i]->target(); 108 EventTarget* eventTarget = events[i]->target();
(...skipping 11 matching lines...) Expand all
113 { 120 {
114 // dispatchEvents() runs script which can cause the document to be destroyed . 121 // dispatchEvents() runs script which can cause the document to be destroyed .
115 if (!m_document) 122 if (!m_document)
116 return; 123 return;
117 124
118 double highResNowMs = 1000.0 * m_document->loader()->timing()->monotonicTime ToZeroBasedDocumentTime(monotonicTimeNow); 125 double highResNowMs = 1000.0 * m_document->loader()->timing()->monotonicTime ToZeroBasedDocumentTime(monotonicTimeNow);
119 double legacyHighResNowMs = 1000.0 * m_document->loader()->timing()->monoton icTimeToPseudoWallTime(monotonicTimeNow); 126 double legacyHighResNowMs = 1000.0 * m_document->loader()->timing()->monoton icTimeToPseudoWallTime(monotonicTimeNow);
120 127
121 // First, generate a list of callbacks to consider. Callbacks registered fr om this point 128 // First, generate a list of callbacks to consider. Callbacks registered fr om this point
122 // on are considered only for the "next" frame, not this one. 129 // on are considered only for the "next" frame, not this one.
123 CallbackList callbacks(m_callbacks); 130 ASSERT(m_callbacksToInvoke.isEmpty());
131 m_callbacksToInvoke.swap(m_callbacks);
124 132
125 for (size_t i = 0; i < callbacks.size(); ++i) { 133 for (size_t i = 0; i < m_callbacksToInvoke.size(); ++i) {
126 RequestAnimationFrameCallback* callback = callbacks[i].get(); 134 RequestAnimationFrameCallback* callback = m_callbacksToInvoke[i].get();
127 if (!callback->m_firedOrCancelled) { 135 if (!callback->m_cancelled) {
128 callback->m_firedOrCancelled = true;
129 InspectorInstrumentationCookie cookie = InspectorInstrumentation::wi llFireAnimationFrame(m_document, callback->m_id); 136 InspectorInstrumentationCookie cookie = InspectorInstrumentation::wi llFireAnimationFrame(m_document, callback->m_id);
130 if (callback->m_useLegacyTimeBase) 137 if (callback->m_useLegacyTimeBase)
131 callback->handleEvent(legacyHighResNowMs); 138 callback->handleEvent(legacyHighResNowMs);
132 else 139 else
133 callback->handleEvent(highResNowMs); 140 callback->handleEvent(highResNowMs);
134 InspectorInstrumentation::didFireAnimationFrame(cookie); 141 InspectorInstrumentation::didFireAnimationFrame(cookie);
135 } 142 }
136 } 143 }
137 144
138 // Remove any callbacks we fired from the list of pending callbacks. 145 m_callbacksToInvoke.clear();
139 for (size_t i = 0; i < m_callbacks.size();) {
140 if (m_callbacks[i]->m_firedOrCancelled)
141 m_callbacks.remove(i);
142 else
143 ++i;
144 }
145 } 146 }
146 147
147 void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTime Now) 148 void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTime Now)
148 { 149 {
149 if (!m_callbacks.size() && !m_eventQueue.size()) 150 if (!m_callbacks.size() && !m_eventQueue.size())
150 return; 151 return;
151 152
152 if (m_suspendCount) 153 if (m_suspendCount)
153 return; 154 return;
154 155
(...skipping 27 matching lines...) Expand all
182 return; 183 return;
183 184
184 if (!m_callbacks.size() && !m_eventQueue.size()) 185 if (!m_callbacks.size() && !m_eventQueue.size())
185 return; 186 return;
186 187
187 if (FrameView* frameView = m_document->view()) 188 if (FrameView* frameView = m_document->view())
188 frameView->scheduleAnimation(); 189 frameView->scheduleAnimation();
189 } 190 }
190 191
191 } 192 }
OLDNEW
« no previous file with comments | « Source/core/dom/ScriptedAnimationController.h ('k') | Source/core/frame/DOMWindow.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698