Changeset 76278 in webkit
- Timestamp:
- Jan 20, 2011 1:50:34 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 12 added
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r76276 r76278 1 2011-01-20 James Robinson <jamesr@chromium.org> 2 3 Reviewed by Darin Fisher. 4 5 Implement mozilla's requestAnimationFrame API 6 https://bugs.webkit.org/show_bug.cgi?id=51218 7 8 Tests for window.webkitRequestAnimationFrame(). The new tests 9 are in the Skipped lists for platforms that do not set 10 ENABLE(REQUEST_ANIMATION_FRAME) - which is currently all but chromium. 11 12 * fast/animation/request-animation-frame-cancel-expected.txt: Added. 13 * fast/animation/request-animation-frame-cancel.html: Added. 14 Tests cancelling a callback within a webkitRequestAnimationFrame() callback. 15 * fast/animation/request-animation-frame-cancel2-expected.txt: Added. 16 * fast/animation/request-animation-frame-cancel2.html: Added. 17 Tests interactions between multiple webkitRequestAnimationFrame() callbacks. 18 * fast/animation/request-animation-frame-display-expected.txt: Added. 19 * fast/animation/request-animation-frame-display.html: Added. 20 Tests changing the display: property of an element within a callback. 21 * fast/animation/request-animation-frame-expected.txt: Added. 22 * fast/animation/request-animation-frame.html: Added. 23 Tests the basic use of window.webkitRequestAnimationFrame(). 24 * fast/animation/request-animation-frame-within-callback-expected.txt: Added. 25 * fast/animation/request-animation-frame-within-callback.html: Added. 26 Tests setting one webkit.webkitRequestAnimationFrame() callback within another. 27 * platform/gtk/Skipped: 28 * platform/mac/Skipped: 29 * platform/qt/Skipped: 30 * platform/win/Skipped: 31 1 32 2011-01-20 James Robinson <jamesr@chromium.org> 2 33 -
trunk/LayoutTests/platform/gtk/Skipped
r76225 r76278 5583 5583 http/tests/local/link-stylesheet-load-order-preload.html 5584 5584 5585 # Request ENABLE(REQUEST_ANIMATION_FRAME) support 5586 fast/animation 5587 5585 5588 # https://bugs.webkit.org/show_bug.cgi?id=51380 5586 5589 http/tests/inspector/console-websocket-error.html -
trunk/LayoutTests/platform/mac/Skipped
r76198 r76278 281 281 # DRT does not support toggling caret browsing on / off 282 282 editing/selection/caret-mode-paragraph-keys-navigation.html 283 284 # Request ENABLE(REQUEST_ANIMATION_FRAME) support 285 fast/animation 286 -
trunk/LayoutTests/platform/qt/Skipped
r76218 r76278 5089 5089 fast/text/emphasis-avoid-ruby.html 5090 5090 5091 # Requires requestAnimationFrame support 5092 fast/animation/ 5093 5091 5094 # https://bugs.webkit.org/show_bug.cgi?id=42578 5092 5095 # [Qt] DRT sideeffect revealed by r63657 and r75305 -
trunk/LayoutTests/platform/win/Skipped
r76225 r76278 1115 1115 # DRT does not obey addURLToRedirect 1116 1116 http/tests/loading/cross-origin-XHR-willLoadRequest.html 1117 1118 # Request ENABLE(REQUEST_ANIMATION_FRAME) support 1119 fast/animation 1120 -
trunk/Source/WebCore/ChangeLog
r76277 r76278 1 2011-01-20 James Robinson <jamesr@chromium.org> 2 3 Reviewed by Darin Fisher. 4 5 Implement mozilla's requestAnimationFrame API 6 https://bugs.webkit.org/show_bug.cgi?id=51218 7 8 This implements mozilla's proposed requestAnimationFrame API. The idea with this API is that 9 an author driving an animation from script could use window.requestAnimationFrame(callback) 10 instead of window.setTimeout(callback, 0) to schedule their update logic and let the browser 11 decide when to update the animations. This avoids doing unnecessary work when the page content 12 is offscreen or is being displayed at a different framerate than what the page author expects. 13 14 Mozilla's proposal is here: https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame 15 This implements window.mozRequestAnimationFrame as window.webkitRequestAnimationFrame with the 16 following changes: 17 *) Only the callback syntax is supported, there is no before paint event 18 *) webkitRequestAnimationFrame supports a second parameter Element to let the author indicate 19 what content they intend to animate. That way if the page is being displayed but the element 20 in question is offscreen, we can avoid invoking the callback. 21 *) No timestamp is provided to the caller and there is no window.animationStartTime property 22 (see https://bugs.webkit.org/show_bug.cgi?id=51952 for discussion of this property) 23 *) window.webkitRequestAnimationFrame returns a numerical id that can be used to cancel the callback 24 using window.cancelWebkitRequestAnimationFrame, to parallel window.setTimeout()/window.clearTime(). 25 26 The implementation depends on the embedder scheduling the callbacks since the callback invocation 27 depends on the page's visibility and the embedder's paint scheduling, neither of which are exposed 28 to WebCore. The expectation for the embedder is that at some point Chrome::scheduleAnimation() is 29 called FrameView::serviceScriptedAnimations() should be called for the associated Page's main frame. 30 Ideally serviceScriptedAnimations() would be called prior to rendering - although in practice the 31 embedder has to rate limit callbacks and may not be able to tie the callback directly to the 32 rendering loop. 33 34 Tests: fast/animation/request-animation-frame-cancel.html 35 fast/animation/request-animation-frame-cancel2.html 36 fast/animation/request-animation-frame-display.html 37 fast/animation/request-animation-frame-within-callback.html 38 fast/animation/request-animation-frame.html 39 40 * WebCore.gypi: 41 * dom/Document.cpp: 42 (WebCore::Document::Document): 43 (WebCore::Document::webkitRequestAnimationFrame): 44 (WebCore::Document::webkitCancelRequestAnimationFrame): 45 (WebCore::Document::serviceScriptedAnimations): 46 * dom/Document.h: 47 * dom/RequestAnimationFrameCallback.h: Added. 48 (WebCore::RequestAnimationFrameCallback::~RequestAnimationFrameCallback): 49 * dom/RequestAnimationFrameCallback.idl: Added. 50 * loader/EmptyClients.h: 51 (WebCore::EmptyChromeClient::scheduleAnimation): 52 * page/Chrome.cpp: 53 (WebCore::Chrome::scheduleAnimation): 54 * page/Chrome.h: 55 * page/ChromeClient.h: 56 * page/DOMWindow.cpp: 57 (WebCore::DOMWindow::webkitRequestAnimationFrame): 58 (WebCore::DOMWindow::webkitCancelRequestAnimationFrame): 59 * page/DOMWindow.h: 60 * page/DOMWindow.idl: 61 * page/FrameView.cpp: 62 (WebCore::FrameView::scheduleAnimation): 63 (WebCore::FrameView::serviceScriptedAnimations): 64 * page/FrameView.h: 65 * platform/HostWindow.h: 66 1 67 2011-01-20 James Robinson <jamesr@chromium.org> 2 68 -
trunk/Source/WebCore/WebCore.gypi
r76246 r76278 76 76 'dom/Range.idl', 77 77 'dom/RangeException.idl', 78 'dom/RequestAnimationFrameCallback.idl', 78 79 'dom/Text.idl', 79 80 'dom/TextEvent.idl', … … 1317 1318 'dom/RangeBoundaryPoint.h', 1318 1319 'dom/RangeException.h', 1320 'dom/RequestAnimationFrameCallback.h', 1319 1321 'dom/RawDataDocumentParser.h', 1320 1322 'dom/RegisteredEventListener.cpp', -
trunk/Source/WebCore/dom/Document.cpp
r76248 r76278 208 208 #endif 209 209 210 #if ENABLE(REQUEST_ANIMATION_FRAME) 211 #include "RequestAnimationFrameCallback.h" 212 #endif 213 210 214 using namespace std; 211 215 using namespace WTF; … … 426 430 , m_directionSetOnDocumentElement(false) 427 431 , m_writingModeSetOnDocumentElement(false) 432 #if ENABLE(REQUEST_ANIMATION_FRAME) 433 , m_nextRequestAnimationFrameCallbackId(0) 434 #endif 428 435 { 429 436 m_document = this; … … 4952 4959 } 4953 4960 4961 #if ENABLE(REQUEST_ANIMATION_FRAME) 4962 int Document::webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback> callback, Element* e) 4963 { 4964 if (!m_requestAnimationFrameCallbacks) 4965 m_requestAnimationFrameCallbacks = new RequestAnimationFrameCallbackList; 4966 int id = m_nextRequestAnimationFrameCallbackId++; 4967 callback->m_firedOrCancelled = false; 4968 callback->m_id = id; 4969 callback->m_element = e; 4970 m_requestAnimationFrameCallbacks->append(callback); 4971 if (FrameView* v = view()) 4972 v->scheduleAnimation(); 4973 return id; 4974 } 4975 4976 void Document::webkitCancelRequestAnimationFrame(int id) 4977 { 4978 if (!m_requestAnimationFrameCallbacks) 4979 return; 4980 for (size_t i = 0; i < m_requestAnimationFrameCallbacks->size(); ++i) { 4981 if (m_requestAnimationFrameCallbacks->at(i)->m_id == id) { 4982 m_requestAnimationFrameCallbacks->at(i)->m_firedOrCancelled = true; 4983 m_requestAnimationFrameCallbacks->remove(i); 4984 return; 4985 } 4986 } 4987 } 4988 4989 void Document::serviceScriptedAnimations() 4990 { 4991 if (!m_requestAnimationFrameCallbacks) 4992 return; 4993 // We want to run the callback for all elements in the document that have registered 4994 // for a callback and that are visible. Running the callbacks can cause new callbacks 4995 // to be registered, existing callbacks to be cancelled, and elements to gain or lose 4996 // visibility so this code has to iterate carefully. 4997 4998 // FIXME: Currently, this code doesn't do any visibility tests beyond checking display: 4999 5000 // First, generate a list of callbacks to consider. Callbacks registered from this point 5001 // on are considered only for the "next" frame, not this one. 5002 RequestAnimationFrameCallbackList callbacks(*m_requestAnimationFrameCallbacks); 5003 5004 // Firing the callback may cause the visibility of other elements to change. To avoid 5005 // missing any callbacks, we keep iterating through the list of candiate callbacks and firing 5006 // them until nothing new becomes visible. 5007 bool firedCallback; 5008 do { 5009 firedCallback = false; 5010 // A previous iteration may have invalidated style (or layout). Update styles for each iteration 5011 // for now since all we check is the existence of a renderer. 5012 updateStyleIfNeeded(); 5013 for (size_t i = 0; i < callbacks.size(); ++i) { 5014 RequestAnimationFrameCallback* callback = callbacks[i].get(); 5015 if (!callback->m_firedOrCancelled && (!callback->m_element || callback->m_element->renderer())) { 5016 callback->m_firedOrCancelled = true; 5017 callback->handleEvent(); 5018 firedCallback = true; 5019 callbacks.remove(i); 5020 break; 5021 } 5022 } 5023 } while (firedCallback); 5024 5025 // Remove any callbacks we fired from the list of pending callbacks. 5026 for (size_t i = 0; i < m_requestAnimationFrameCallbacks->size();) { 5027 if (m_requestAnimationFrameCallbacks->at(i)->m_firedOrCancelled) 5028 m_requestAnimationFrameCallbacks->remove(i); 5029 else 5030 ++i; 5031 } 5032 5033 // In most cases we expect this list to be empty, so no need to keep around the vector's inline buffer. 5034 if (!m_requestAnimationFrameCallbacks->size()) 5035 m_requestAnimationFrameCallbacks.clear(); 5036 else if (FrameView* v = view()) 5037 v->scheduleAnimation(); 5038 } 5039 #endif 5040 4954 5041 #if ENABLE(TOUCH_EVENTS) 4955 5042 PassRefPtr<Touch> Document::createTouch(DOMWindow* window, EventTarget* target, int identifier, int pageX, int pageY, int screenX, int screenY, ExceptionCode&) const -
trunk/Source/WebCore/dom/Document.h
r76216 r76278 147 147 #endif 148 148 149 #if ENABLE(REQUEST_ANIMATION_FRAME) 150 class RequestAnimationFrameCallback; 151 #endif 152 149 153 typedef int ExceptionCode; 150 154 … … 1072 1076 const DocumentTiming* timing() const { return &m_documentTiming; } 1073 1077 1078 #if ENABLE(REQUEST_ANIMATION_FRAME) 1079 int webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback>, Element*); 1080 void webkitCancelRequestAnimationFrame(int id); 1081 void serviceScriptedAnimations(); 1082 #endif 1083 1074 1084 bool mayCauseFlashOfUnstyledContent() const; 1075 1085 … … 1394 1404 DocumentTiming m_documentTiming; 1395 1405 RefPtr<MediaQueryMatcher> m_mediaQueryMatcher; 1406 1407 #if ENABLE(REQUEST_ANIMATION_FRAME) 1408 typedef Vector<RefPtr<RequestAnimationFrameCallback> > RequestAnimationFrameCallbackList; 1409 OwnPtr<RequestAnimationFrameCallbackList> m_requestAnimationFrameCallbacks; 1410 int m_nextRequestAnimationFrameCallbackId; 1411 #endif 1396 1412 }; 1397 1413 -
trunk/Source/WebCore/loader/EmptyClients.h
r76248 r76278 158 158 virtual void delegatedScrollRequested(const IntSize&) { } 159 159 #endif 160 #if ENABLE(REQUEST_ANIMATION_FRAME) 161 virtual void scheduleAnimation() { } 162 #endif 160 163 161 164 virtual IntPoint screenToWindow(const IntPoint& p) const { return p; } -
trunk/Source/WebCore/page/Chrome.cpp
r76198 r76278 446 446 } 447 447 448 #if ENABLE(REQUEST_ANIMATION_FRAME) 449 void Chrome::scheduleAnimation() 450 { 451 m_client->scheduleAnimation(); 452 } 453 #endif 454 448 455 #if ENABLE(NOTIFICATIONS) 449 456 NotificationPresenter* Chrome::notificationPresenter() const -
trunk/Source/WebCore/page/Chrome.h
r76198 r76278 79 79 virtual void scrollbarsModeDidChange() const; 80 80 virtual void setCursor(const Cursor&); 81 #if ENABLE(REQUEST_ANIMATION_FRAME) 82 virtual void scheduleAnimation(); 83 #endif 81 84 82 85 void scrollRectIntoView(const IntRect&) const; -
trunk/Source/WebCore/page/ChromeClient.h
r76198 r76278 152 152 virtual void scrollbarsModeDidChange() const = 0; 153 153 virtual void setCursor(const Cursor&) = 0; 154 #if ENABLE(REQUEST_ANIMATION_FRAME) 155 virtual void scheduleAnimation() = 0; 156 #endif 154 157 // End methods used by HostWindow. 155 158 -
trunk/Source/WebCore/page/DOMWindow.cpp
r76198 r76278 106 106 #endif 107 107 108 #if ENABLE(REQUEST_ANIMATION_FRAME) 109 #include "RequestAnimationFrameCallback.h" 110 #endif 111 108 112 using std::min; 109 113 using std::max; … … 1461 1465 } 1462 1466 1467 #if ENABLE(REQUEST_ANIMATION_FRAME) 1468 int DOMWindow::webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback> callback, Element* e) 1469 { 1470 if (Document* d = document()) 1471 return d->webkitRequestAnimationFrame(callback, e); 1472 return 0; 1473 } 1474 1475 void DOMWindow::webkitCancelRequestAnimationFrame(int id) 1476 { 1477 if (Document* d = document()) 1478 d->webkitCancelRequestAnimationFrame(id); 1479 } 1480 #endif 1481 1463 1482 bool DOMWindow::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture) 1464 1483 { -
trunk/Source/WebCore/page/DOMWindow.h
r76198 r76278 65 65 class WebKitPoint; 66 66 67 #if ENABLE(REQUEST_ANIMATION_FRAME) 68 class RequestAnimationFrameCallback; 69 #endif 70 67 71 struct WindowFeatures; 68 72 … … 237 241 int setInterval(PassOwnPtr<ScheduledAction>, int timeout, ExceptionCode&); 238 242 void clearInterval(int timeoutId); 243 244 // WebKit animation extensions 245 #if ENABLE(REQUEST_ANIMATION_FRAME) 246 int webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback>, Element*); 247 void webkitCancelRequestAnimationFrame(int id); 248 #endif 239 249 240 250 // Events -
trunk/Source/WebCore/page/DOMWindow.idl
r76208 r76278 235 235 // [Custom] long setInterval(in DOMString code, in long timeout); 236 236 void clearInterval(in long handle); 237 238 #if defined(ENABLE_REQUEST_ANIMATION_FRAME) 239 // WebKit animation extensions 240 long webkitRequestAnimationFrame(in [Callback] RequestAnimationFrameCallback callback, in Element element); 241 void webkitCancelRequestAnimationFrame(in long id); 242 #endif 237 243 238 244 // Base64 -
trunk/Source/WebCore/page/FrameView.cpp
r76248 r76278 346 346 } 347 347 348 #if ENABLE(REQUEST_ANIMATION_FRAME) 349 void FrameView::scheduleAnimation() 350 { 351 if (hostWindow()) 352 hostWindow()->scheduleAnimation(); 353 } 354 #endif 355 348 356 void FrameView::setMarginWidth(int w) 349 357 { … … 1642 1650 } 1643 1651 1652 #if ENABLE(REQUEST_ANIMATION_FRAME) 1653 void FrameView::serviceScriptedAnimations() 1654 { 1655 for (Frame* frame = m_frame.get(); frame; frame = frame->tree()->traverseNext()) 1656 frame->document()->serviceScriptedAnimations(); 1657 } 1658 #endif 1659 1644 1660 bool FrameView::isTransparent() const 1645 1661 { -
trunk/Source/WebCore/page/FrameView.h
r76198 r76278 63 63 virtual void invalidateRect(const IntRect&); 64 64 virtual void setFrameRect(const IntRect&); 65 #if ENABLE(REQUEST_ANIMATION_FRAME) 66 void scheduleAnimation(); 67 #endif 65 68 66 69 Frame* frame() const { return m_frame.get(); } … … 97 100 98 101 bool needsFullRepaint() const { return m_doFullRepaint; } 102 103 #if ENABLE(REQUEST_ANIMATION_FRAME) 104 void serviceScriptedAnimations(); 105 #endif 99 106 100 107 #if USE(ACCELERATED_COMPOSITING) -
trunk/Source/WebCore/platform/HostWindow.h
r76248 r76278 68 68 // Request that the cursor change. 69 69 virtual void setCursor(const Cursor&) = 0; 70 71 #if ENABLE(REQUEST_ANIMATION_FRAME) 72 virtual void scheduleAnimation() = 0; 73 #endif 70 74 }; 71 75 -
trunk/Source/WebKit/chromium/ChangeLog
r76224 r76278 1 2011-01-20 James Robinson <jamesr@chromium.org> 2 3 Reviewed by Darin Fisher. 4 5 Implement mozilla's requestAnimationFrame API 6 https://bugs.webkit.org/show_bug.cgi?id=51218 7 8 Chromium WebKit API support for window.webkitRequestAnimationFrame() 9 10 * features.gypi: 11 * public/WebWidget.h: 12 * public/WebWidgetClient.h: 13 (WebKit::WebWidgetClient::scheduleAnimation): 14 * src/ChromeClientImpl.cpp: 15 (WebKit::ChromeClientImpl::scheduleAnimation): 16 * src/ChromeClientImpl.h: 17 * src/WebPopupMenuImpl.cpp: 18 (WebKit::WebPopupMenuImpl::animate): 19 (WebKit::WebPopupMenuImpl::scheduleAnimation): 20 * src/WebPopupMenuImpl.h: 21 * src/WebViewImpl.cpp: 22 (WebKit::WebViewImpl::animate): 23 * src/WebViewImpl.h: 24 1 25 2010-12-14 Yury Semikhatsky <yurys@chromium.org> 2 26 -
trunk/Source/WebKit/chromium/features.gypi
r76198 r76278 70 70 'ENABLE_ORIENTATION_EVENTS=0', 71 71 'ENABLE_PROGRESS_TAG=1', 72 'ENABLE_REQUEST_ANIMATION_FRAME=1', 72 73 'ENABLE_SHARED_WORKERS=1', 73 74 'ENABLE_SVG=1', -
trunk/Source/WebKit/chromium/public/WebWidget.h
r76198 r76278 56 56 // Called to resize the WebWidget. 57 57 virtual void resize(const WebSize&) = 0; 58 59 // Called to update imperative animation state. This should be called before 60 // paint, although the client can rate-limit these calls. 61 virtual void animate() = 0; 58 62 59 63 // Called to layout the WebWidget. This MUST be called before Paint, -
trunk/Source/WebKit/chromium/public/WebWidgetClient.h
r76198 r76278 57 57 virtual void scheduleComposite() { } 58 58 59 // Called when a call to WebWidget::animate is required 60 virtual void scheduleAnimation() { } 61 59 62 // Called when the widget acquires or loses focus, respectively. 60 63 virtual void didFocus() { } -
trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp
r76224 r76278 528 528 } 529 529 530 #if ENABLE(REQUEST_ANIMATION_FRAME) 531 void ChromeClientImpl::scheduleAnimation() 532 { 533 m_webView->client()->scheduleAnimation(); 534 } 535 #endif 536 530 537 void ChromeClientImpl::scroll( 531 538 const IntSize& scrollDelta, const IntRect& scrollRect, -
trunk/Source/WebKit/chromium/src/ChromeClientImpl.h
r76198 r76278 106 106 virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool); 107 107 virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool); 108 #if ENABLE(REQUEST_ANIMATION_FRAME) 109 virtual void scheduleAnimation(); 110 #endif 108 111 virtual void scroll( 109 112 const WebCore::IntSize& scrollDelta, const WebCore::IntRect& rectToScroll, -
trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp
r76198 r76278 152 152 } 153 153 154 void WebPopupMenuImpl::animate() 155 { 156 } 157 154 158 void WebPopupMenuImpl::layout() 155 159 { … … 300 304 } 301 305 306 void WebPopupMenuImpl::scheduleAnimation() 307 { 308 } 309 302 310 void WebPopupMenuImpl::scroll(const IntSize& scrollDelta, 303 311 const IntRect& scrollRect, -
trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.h
r76248 r76278 63 63 virtual WebSize size() { return m_size; } 64 64 virtual void resize(const WebSize&); 65 virtual void animate(); 65 66 virtual void layout(); 66 67 virtual void paint(WebCanvas* canvas, const WebRect& rect); … … 107 108 virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool); 108 109 virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool); 110 virtual void scheduleAnimation(); 109 111 virtual void scroll( 110 112 const WebCore::IntSize& scrollDelta, const WebCore::IntRect& scrollRect, -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r76207 r76278 973 973 } 974 974 975 void WebViewImpl::animate() 976 { 977 #if ENABLE(REQUEST_ANIMATION_FRAME) 978 WebFrameImpl* webframe = mainFrameImpl(); 979 if (webframe) { 980 FrameView* view = webframe->frameView(); 981 if (view) 982 view->serviceScriptedAnimations(); 983 } 984 #endif 985 } 986 975 987 void WebViewImpl::layout() 976 988 { -
trunk/Source/WebKit/chromium/src/WebViewImpl.h
r76198 r76278 92 92 virtual WebSize size() { return m_size; } 93 93 virtual void resize(const WebSize&); 94 virtual void animate(); 94 95 virtual void layout(); 95 96 virtual void paint(WebCanvas*, const WebRect&); -
trunk/Tools/ChangeLog
r76259 r76278 1 2011-01-20 James Robinson <jamesr@chromium.org> 2 3 Reviewed by Darin Fisher. 4 5 Implement mozilla's requestAnimationFrame API 6 https://bugs.webkit.org/show_bug.cgi?id=51218 7 8 Chromium DumpRenderTree support for window.webkitRequestAnimationFrame. 9 10 * DumpRenderTree/chromium/WebViewHost.cpp: 11 (invokeScheduleComposite): 12 (WebViewHost::scheduleAnimation): 13 (WebViewHost::paintInvalidatedRegion): 14 * DumpRenderTree/chromium/WebViewHost.h: 15 1 16 2011-01-20 Maciej Stachowiak <mjs@apple.com> 2 17 -
trunk/Tools/DumpRenderTree/chromium/WebViewHost.cpp
r76198 r76278 625 625 } 626 626 627 #if ENABLE(REQUEST_ANIMATION_FRAME) 628 static void invokeScheduleComposite(void* context) 629 { 630 WebViewHost* wvh = static_cast<WebViewHost*>(context); 631 wvh->scheduleComposite(); 632 } 633 634 void WebViewHost::scheduleAnimation() 635 { 636 webkit_support::PostDelayedTask(invokeScheduleComposite, this, 0); 637 } 638 #endif 639 627 640 void WebViewHost::didFocus() 628 641 { … … 1439 1452 void WebViewHost::paintInvalidatedRegion() 1440 1453 { 1454 #if ENABLE(REQUEST_ANIMATION_FRAME) 1455 webWidget()->animate(); 1456 #endif 1441 1457 webWidget()->layout(); 1442 1458 WebSize widgetSize = webWidget()->size(); -
trunk/Tools/DumpRenderTree/chromium/WebViewHost.h
r76198 r76278 148 148 virtual void didScrollRect(int dx, int dy, const WebKit::WebRect&); 149 149 virtual void scheduleComposite(); 150 #if ENABLE(REQUEST_ANIMATION_FRAME) 151 virtual void scheduleAnimation(); 152 #endif 150 153 virtual void didFocus(); 151 154 virtual void didBlur();
Note: See TracChangeset
for help on using the changeset viewer.