Commit c0dca2a1 authored by jamesr@google.com's avatar jamesr@google.com

2011-01-06 James Robinson <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        Tests for window.webkitAnimationTime.

        * animations/animation-time-expected.txt: Added.
        * animations/animation-time.html: Added.
        * animations/script-tests/animation-time.js: Added.
2011-01-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        Chromium DRT support for webkitAnimationTime.

        * DumpRenderTree/chromium/WebViewHost.cpp:
        (WebViewHost::paintInvalidatedRegion):
2011-01-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        Implements mozilla's animationTime property as described here:
        https://developer.mozilla.org/en/DOM/window.mozAnimationStartTime
        and http://hacks.mozilla.org/2010/08/more-efficient-javascript-animations-with-mozrequestanimationframe/
        The property is called webkitAnimationTime as calling it the 'Start' time is not very informative.
        This property exposes a notion of a 'current' time to use for declarative animations and allows
        scripts to synchronize imperative animations with declarative ones if they choose to.  Once queried
        this time is saved and used for all declarative animation updates until the embedder paints/composites
        the next frame and clears it, or 15ms elapse (in case the embedder isn't producing frames, for example
        if the page is in a background tab).

        This patch also ensures that all declarative animations started in the same script execution block
        are synchronized even if some time elapses while script is running.

        Test: fast/animation/animation-time.html

        * WebCore.gypi:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitAnimationTime):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        (WebCore::Frame::currentAnimationTime):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::animationTime):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        * page/animation/AnimationTimeController.cpp: Added.
        (WebCore::AnimationTimeController::AnimationTimeController):
        (WebCore::AnimationTimeController::~AnimationTimeController):
        (WebCore::AnimationTimeController::currentAnimationTime):
        (WebCore::AnimationTimeController::clearCurrentAnimationTime):
        (WebCore::AnimationTimeController::clearCurrentAnimationTimeTimerFired):
        * page/animation/AnimationTimeController.h: Added.
        (WebCore::AnimationTimeController::create):
2011-01-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        WebKit API support for webkitAnimationTime.

        * public/WebWidget.h:
        * src/WebPopupMenuImpl.cpp:
        (WebKit::WebPopupMenuImpl::clearCurrentAnimationTime):
        * src/WebPopupMenuImpl.h:
        * src/WebViewImpl.cpp:
        (WebKit::WebViewImpl::clearCurrentAnimationTime):
        * src/WebViewImpl.h:
2011-01-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        Tells the page to clear the current animation time after producing a frame.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75169 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent c8367559
2011-01-06 James Robinson <jamesr@chromium.org>
Reviewed by Simon Fraser.
Implement mozilla's animationTime property
https://bugs.webkit.org/show_bug.cgi?id=51952
Tests for window.webkitAnimationTime.
* animations/animation-time-expected.txt: Added.
* animations/animation-time.html: Added.
* animations/script-tests/animation-time.js: Added.
2011-01-06 Abhishek Arya <inferno@chromium.org> 2011-01-06 Abhishek Arya <inferno@chromium.org>
Reviewed by Simon Fraser. Reviewed by Simon Fraser.
......
Tests that window.webkitAnimationTime remains the same during a script run and that all animations started within a script run are synchronized
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS startAnimationTime is defined.
PASS startAnimationTime is endAnimationTime
PASS window.getComputedStyle(div1).left is window.getComputedStyle(div2).left
PASS successfullyParsed is true
TEST COMPLETE
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="../fast/js/resources/js-test-style.css">
<script src="../fast/js/resources/js-test-pre.js"></script>
<style>
.d {
position:absolute;
left:0px;
}
.d.animated {
left:100px;
-webkit-transition: left 0.1s linear;
-moz-transition: left 0.1s linear;
}
</style>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<div class="d" id="div1"></div>
<div class="d" id="div2"></div>
<script src="script-tests/animation-time.js"></script>
<script src="../fast/js/resources/js-test-post.js"></script>
</body>
</html>
description("Tests that window.webkitAnimationTime remains the same during a script run and that all animations started within a script run are synchronized");
window.jsTestIsAsync = true;
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
div1.classList.add("animated");
document.body.offsetTop; // Force a style recalc to start the first animation.
var startAnimationTime = window.webkitAnimationTime;
shouldBeDefined('startAnimationTime');
var startTime = Date.now();
while (Date.now() - startTime < 10) {}
var endAnimationTime = window.webkitAnimationTime;
// Test that the webkitAnimationTime value hasn't changed out from under us.
shouldBe('startAnimationTime', 'endAnimationTime');
// Start a second declarative animation ~10ms after the first one. They should be in sync.
div2.classList.add("animated");
window.setTimeout(function() {
shouldBe('window.getComputedStyle(div1).left', 'window.getComputedStyle(div2).left');
finishJSTest();
}, 50);
var successfullyParsed = true;
2011-01-06 James Robinson <jamesr@chromium.org>
Reviewed by Simon Fraser.
Implement mozilla's animationTime property
https://bugs.webkit.org/show_bug.cgi?id=51952
Chromium DRT support for webkitAnimationTime.
* DumpRenderTree/chromium/WebViewHost.cpp:
(WebViewHost::paintInvalidatedRegion):
2011-01-06 Julie Parent <jparent@chromium.org> 2011-01-06 Julie Parent <jparent@chromium.org>
Reviewed by Tony Chang. Reviewed by Tony Chang.
...@@ -1482,6 +1482,7 @@ void WebViewHost::paintInvalidatedRegion() ...@@ -1482,6 +1482,7 @@ void WebViewHost::paintInvalidatedRegion()
paintRect(rect); paintRect(rect);
} }
ASSERT(m_paintRect.isEmpty()); ASSERT(m_paintRect.isEmpty());
webWidget()->clearCurrentAnimationTime();
} }
PlatformCanvas* WebViewHost::canvas() PlatformCanvas* WebViewHost::canvas()
......
...@@ -446,6 +446,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ ...@@ -446,6 +446,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
\ \
page/animation/AnimationBase.cpp \ page/animation/AnimationBase.cpp \
page/animation/AnimationController.cpp \ page/animation/AnimationController.cpp \
page/animation/AnimationTimeController.cpp \
page/animation/CompositeAnimation.cpp \ page/animation/CompositeAnimation.cpp \
page/animation/ImplicitAnimation.cpp \ page/animation/ImplicitAnimation.cpp \
page/animation/KeyframeAnimation.cpp \ page/animation/KeyframeAnimation.cpp \
......
...@@ -1278,6 +1278,7 @@ SET(WebCore_SOURCES ...@@ -1278,6 +1278,7 @@ SET(WebCore_SOURCES
page/animation/AnimationBase.cpp page/animation/AnimationBase.cpp
page/animation/AnimationController.cpp page/animation/AnimationController.cpp
page/animation/AnimationTimeController.cpp
page/animation/CompositeAnimation.cpp page/animation/CompositeAnimation.cpp
page/animation/ImplicitAnimation.cpp page/animation/ImplicitAnimation.cpp
page/animation/KeyframeAnimation.cpp page/animation/KeyframeAnimation.cpp
......
2011-01-06 James Robinson <jamesr@chromium.org>
Reviewed by Simon Fraser.
Implement mozilla's animationTime property
https://bugs.webkit.org/show_bug.cgi?id=51952
Implements mozilla's animationTime property as described here:
https://developer.mozilla.org/en/DOM/window.mozAnimationStartTime
and http://hacks.mozilla.org/2010/08/more-efficient-javascript-animations-with-mozrequestanimationframe/
The property is called webkitAnimationTime as calling it the 'Start' time is not very informative.
This property exposes a notion of a 'current' time to use for declarative animations and allows
scripts to synchronize imperative animations with declarative ones if they choose to. Once queried
this time is saved and used for all declarative animation updates until the embedder paints/composites
the next frame and clears it, or 15ms elapse (in case the embedder isn't producing frames, for example
if the page is in a background tab).
This patch also ensures that all declarative animations started in the same script execution block
are synchronized even if some time elapses while script is running.
Test: fast/animation/animation-time.html
* WebCore.gypi:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::webkitAnimationTime):
* page/DOMWindow.h:
* page/DOMWindow.idl:
* page/Frame.cpp:
(WebCore::Frame::currentAnimationTime):
* page/Frame.h:
* page/Page.cpp:
(WebCore::Page::Page):
* page/Page.h:
(WebCore::Page::animationTime):
* page/animation/AnimationController.cpp:
(WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
* page/animation/AnimationTimeController.cpp: Added.
(WebCore::AnimationTimeController::AnimationTimeController):
(WebCore::AnimationTimeController::~AnimationTimeController):
(WebCore::AnimationTimeController::currentAnimationTime):
(WebCore::AnimationTimeController::clearCurrentAnimationTime):
(WebCore::AnimationTimeController::clearCurrentAnimationTimeTimerFired):
* page/animation/AnimationTimeController.h: Added.
(WebCore::AnimationTimeController::create):
2011-01-06 Abhishek Arya <inferno@chromium.org> 2011-01-06 Abhishek Arya <inferno@chromium.org>
Reviewed by Simon Fraser. Reviewed by Simon Fraser.
......
...@@ -2143,6 +2143,8 @@ webcore_sources += \ ...@@ -2143,6 +2143,8 @@ webcore_sources += \
WebCore/page/animation/AnimationController.cpp \ WebCore/page/animation/AnimationController.cpp \
WebCore/page/animation/AnimationController.h \ WebCore/page/animation/AnimationController.h \
WebCore/page/animation/AnimationControllerPrivate.h \ WebCore/page/animation/AnimationControllerPrivate.h \
WebCore/page/animation/AnimationTimeController.cpp \
WebCore/page/animation/AnimationTimeController.h \
WebCore/page/animation/CompositeAnimation.cpp \ WebCore/page/animation/CompositeAnimation.cpp \
WebCore/page/animation/CompositeAnimation.h \ WebCore/page/animation/CompositeAnimation.h \
WebCore/page/animation/ImplicitAnimation.cpp \ WebCore/page/animation/ImplicitAnimation.cpp \
......
...@@ -519,6 +519,7 @@ __ZN7WebCore22contextMenuItemTagBoldEv ...@@ -519,6 +519,7 @@ __ZN7WebCore22contextMenuItemTagBoldEv
__ZN7WebCore22counterValueForElementEPNS_7ElementE __ZN7WebCore22counterValueForElementEPNS_7ElementE
__ZN7WebCore22createFragmentFromTextEPNS_5RangeERKN3WTF6StringE __ZN7WebCore22createFragmentFromTextEPNS_5RangeERKN3WTF6StringE
__ZN7WebCore22externalRepresentationEPNS_5FrameEj __ZN7WebCore22externalRepresentationEPNS_5FrameEj
__ZN7WebCore23AnimationTimeController25clearCurrentAnimationTimeEv
__ZN7WebCore23AuthenticationChallengeC1ERKNS_15ProtectionSpaceERKNS_10CredentialEjRKNS_16ResourceResponseERKNS_13ResourceErrorE __ZN7WebCore23AuthenticationChallengeC1ERKNS_15ProtectionSpaceERKNS_10CredentialEjRKNS_16ResourceResponseERKNS_13ResourceErrorE
__ZN7WebCore23ReplaceSelectionCommandC1EPNS_8DocumentEN3WTF10PassRefPtrINS_16DocumentFragmentEEEbbbbbNS_10EditActionE __ZN7WebCore23ReplaceSelectionCommandC1EPNS_8DocumentEN3WTF10PassRefPtrINS_16DocumentFragmentEEEbbbbbNS_10EditActionE
__ZN7WebCore23createFragmentFromNodesEPNS_8DocumentERKN3WTF6VectorIPNS_4NodeELm0EEE __ZN7WebCore23createFragmentFromNodesEPNS_8DocumentERKN3WTF6VectorIPNS_4NodeELm0EEE
......
...@@ -2220,6 +2220,8 @@ ...@@ -2220,6 +2220,8 @@
'page/animation/AnimationController.cpp', 'page/animation/AnimationController.cpp',
'page/animation/AnimationController.h', 'page/animation/AnimationController.h',
'page/animation/AnimationControllerPrivate.h', 'page/animation/AnimationControllerPrivate.h',
'page/animation/AnimationTimeController.cpp',
'page/animation/AnimationTimeController.h',
'page/animation/CompositeAnimation.cpp', 'page/animation/CompositeAnimation.cpp',
'page/animation/CompositeAnimation.h', 'page/animation/CompositeAnimation.h',
'page/animation/ImplicitAnimation.cpp', 'page/animation/ImplicitAnimation.cpp',
......
...@@ -1113,6 +1113,7 @@ SOURCES += \ ...@@ -1113,6 +1113,7 @@ SOURCES += \
notifications/NotificationCenter.cpp \ notifications/NotificationCenter.cpp \
page/animation/AnimationBase.cpp \ page/animation/AnimationBase.cpp \
page/animation/AnimationController.cpp \ page/animation/AnimationController.cpp \
page/animation/AnimationTimeController.cpp \
page/animation/CompositeAnimation.cpp \ page/animation/CompositeAnimation.cpp \
page/animation/ImplicitAnimation.cpp \ page/animation/ImplicitAnimation.cpp \
page/animation/KeyframeAnimation.cpp \ page/animation/KeyframeAnimation.cpp \
......
...@@ -24241,6 +24241,14 @@ ...@@ -24241,6 +24241,14 @@
RelativePath="..\page\animation\AnimationControllerPrivate.h" RelativePath="..\page\animation\AnimationControllerPrivate.h"
> >
</File> </File>
<File
RelativePath="..\page\animation\AnimationTimeController.cpp"
>
</File>
<File
RelativePath="..\page\animation\AnimationTimeController.h"
>
</File>
<File <File
RelativePath="..\page\BarInfo.cpp" RelativePath="..\page\BarInfo.cpp"
> >
...@@ -910,6 +910,8 @@ ...@@ -910,6 +910,8 @@
37FD4298118368460093C029 /* TreeDepthLimit.h in Headers */ = {isa = PBXBuildFile; fileRef = 37FD4297118368460093C029 /* TreeDepthLimit.h */; }; 37FD4298118368460093C029 /* TreeDepthLimit.h in Headers */ = {isa = PBXBuildFile; fileRef = 37FD4297118368460093C029 /* TreeDepthLimit.h */; };
3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */; }; 3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */; };
3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */; }; 3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */; };
38DF1B3512D5284200F0477E /* AnimationTimeController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 38DF1B3312D5284200F0477E /* AnimationTimeController.cpp */; };
38DF1B3612D5284200F0477E /* AnimationTimeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 38DF1B3412D5284200F0477E /* AnimationTimeController.h */; settings = {ATTRIBUTES = (Private, ); }; };
3AC648B2129E146500C3EB25 /* EditingBoundary.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AC648B1129E146500C3EB25 /* EditingBoundary.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3AC648B2129E146500C3EB25 /* EditingBoundary.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AC648B1129E146500C3EB25 /* EditingBoundary.h */; settings = {ATTRIBUTES = (Private, ); }; };
41002CCD0F66EDEF009E660D /* ScriptFunctionCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */; }; 41002CCD0F66EDEF009E660D /* ScriptFunctionCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */; };
41002CCE0F66EDEF009E660D /* ScriptFunctionCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */; }; 41002CCE0F66EDEF009E660D /* ScriptFunctionCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */; };
...@@ -7228,6 +7230,8 @@ ...@@ -7228,6 +7230,8 @@
37FD4297118368460093C029 /* TreeDepthLimit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TreeDepthLimit.h; sourceTree = "<group>"; }; 37FD4297118368460093C029 /* TreeDepthLimit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TreeDepthLimit.h; sourceTree = "<group>"; };
3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorFileSystemAgent.cpp; sourceTree = "<group>"; }; 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorFileSystemAgent.cpp; sourceTree = "<group>"; };
3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFileSystemAgent.h; sourceTree = "<group>"; }; 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFileSystemAgent.h; sourceTree = "<group>"; };
38DF1B3312D5284200F0477E /* AnimationTimeController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationTimeController.cpp; path = animation/AnimationTimeController.cpp; sourceTree = "<group>"; };
38DF1B3412D5284200F0477E /* AnimationTimeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationTimeController.h; path = animation/AnimationTimeController.h; sourceTree = "<group>"; };
3AC648B1129E146500C3EB25 /* EditingBoundary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBoundary.h; sourceTree = "<group>"; }; 3AC648B1129E146500C3EB25 /* EditingBoundary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBoundary.h; sourceTree = "<group>"; };
41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptFunctionCall.h; sourceTree = "<group>"; }; 41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptFunctionCall.h; sourceTree = "<group>"; };
41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptFunctionCall.cpp; sourceTree = "<group>"; }; 41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptFunctionCall.cpp; sourceTree = "<group>"; };
...@@ -13023,6 +13027,8 @@ ...@@ -13023,6 +13027,8 @@
316FE1090E6E1DA700BF6088 /* AnimationController.cpp */, 316FE1090E6E1DA700BF6088 /* AnimationController.cpp */,
316FE10A0E6E1DA700BF6088 /* AnimationController.h */, 316FE10A0E6E1DA700BF6088 /* AnimationController.h */,
0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */, 0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */,
38DF1B3312D5284200F0477E /* AnimationTimeController.cpp */,
38DF1B3412D5284200F0477E /* AnimationTimeController.h */,
316FE10B0E6E1DA700BF6088 /* CompositeAnimation.cpp */, 316FE10B0E6E1DA700BF6088 /* CompositeAnimation.cpp */,
316FE10C0E6E1DA700BF6088 /* CompositeAnimation.h */, 316FE10C0E6E1DA700BF6088 /* CompositeAnimation.h */,
316FE10D0E6E1DA700BF6088 /* ImplicitAnimation.cpp */, 316FE10D0E6E1DA700BF6088 /* ImplicitAnimation.cpp */,
...@@ -19310,6 +19316,7 @@ ...@@ -19310,6 +19316,7 @@
316FE1120E6E1DA700BF6088 /* AnimationBase.h in Headers */, 316FE1120E6E1DA700BF6088 /* AnimationBase.h in Headers */,
316FE1140E6E1DA700BF6088 /* AnimationController.h in Headers */, 316FE1140E6E1DA700BF6088 /* AnimationController.h in Headers */,
0F15DA8A0F3AAEE70000CE47 /* AnimationControllerPrivate.h in Headers */, 0F15DA8A0F3AAEE70000CE47 /* AnimationControllerPrivate.h in Headers */,
38DF1B3612D5284200F0477E /* AnimationTimeController.h in Headers */,
49E912AD0EFAC906009D0CAF /* AnimationList.h in Headers */, 49E912AD0EFAC906009D0CAF /* AnimationList.h in Headers */,
93309DD7099E64920056E581 /* AppendNodeCommand.h in Headers */, 93309DD7099E64920056E581 /* AppendNodeCommand.h in Headers */,
1A8F6BBD0DB55CDC001DB794 /* ApplicationCache.h in Headers */, 1A8F6BBD0DB55CDC001DB794 /* ApplicationCache.h in Headers */,
...@@ -22595,6 +22602,7 @@ ...@@ -22595,6 +22602,7 @@
49E912AA0EFAC906009D0CAF /* Animation.cpp in Sources */, 49E912AA0EFAC906009D0CAF /* Animation.cpp in Sources */,
316FE1110E6E1DA700BF6088 /* AnimationBase.cpp in Sources */, 316FE1110E6E1DA700BF6088 /* AnimationBase.cpp in Sources */,
316FE1130E6E1DA700BF6088 /* AnimationController.cpp in Sources */, 316FE1130E6E1DA700BF6088 /* AnimationController.cpp in Sources */,
38DF1B3512D5284200F0477E /* AnimationTimeController.cpp in Sources */,
49E912AC0EFAC906009D0CAF /* AnimationList.cpp in Sources */, 49E912AC0EFAC906009D0CAF /* AnimationList.cpp in Sources */,
93309DD6099E64920056E581 /* AppendNodeCommand.cpp in Sources */, 93309DD6099E64920056E581 /* AppendNodeCommand.cpp in Sources */,
1A8F6BBC0DB55CDC001DB794 /* ApplicationCache.cpp in Sources */, 1A8F6BBC0DB55CDC001DB794 /* ApplicationCache.cpp in Sources */,
...@@ -1464,6 +1464,13 @@ void DOMWindow::clearInterval(int timeoutId) ...@@ -1464,6 +1464,13 @@ void DOMWindow::clearInterval(int timeoutId)
DOMTimer::removeById(context, timeoutId); DOMTimer::removeById(context, timeoutId);
} }
DOMTimeStamp DOMWindow::webkitAnimationTime()
{
if (Frame* f = frame())
return convertSecondsToDOMTimeStamp(f->currentAnimationTime());
return convertSecondsToDOMTimeStamp(currentTime());
}
bool DOMWindow::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture) bool DOMWindow::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture)
{ {
if (!EventTarget::addEventListener(eventType, listener, useCapture)) if (!EventTarget::addEventListener(eventType, listener, useCapture))
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#ifndef DOMWindow_h #ifndef DOMWindow_h
#define DOMWindow_h #define DOMWindow_h
#include "DOMTimeStamp.h"
#include "KURL.h" #include "KURL.h"
#include "MessagePort.h" #include "MessagePort.h"
#include "SecurityOrigin.h" #include "SecurityOrigin.h"
...@@ -237,6 +238,9 @@ namespace WebCore { ...@@ -237,6 +238,9 @@ namespace WebCore {
int setInterval(PassOwnPtr<ScheduledAction>, int timeout, ExceptionCode&); int setInterval(PassOwnPtr<ScheduledAction>, int timeout, ExceptionCode&);
void clearInterval(int timeoutId); void clearInterval(int timeoutId);
// WebKit animation extensions
DOMTimeStamp webkitAnimationTime();
// Events // Events
// EventTarget API // EventTarget API
virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture); virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture);
......
...@@ -236,6 +236,9 @@ module window { ...@@ -236,6 +236,9 @@ module window {
// [Custom] long setInterval(in DOMString code, in long timeout); // [Custom] long setInterval(in DOMString code, in long timeout);
void clearInterval(in long handle); void clearInterval(in long handle);
// WebKit animation extensions
readonly attribute DOMTimeStamp webkitAnimationTime;
// Base64 // Base64
DOMString atob(in [ConvertNullToNullString] DOMString string) DOMString atob(in [ConvertNullToNullString] DOMString string)
raises(DOMException); raises(DOMException);
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "config.h" #include "config.h"
#include "Frame.h" #include "Frame.h"
#include "AnimationTimeController.h"
#include "ApplyStyleCommand.h" #include "ApplyStyleCommand.h"
#include "CSSComputedStyleDeclaration.h" #include "CSSComputedStyleDeclaration.h"
#include "CSSMutableStyleDeclaration.h" #include "CSSMutableStyleDeclaration.h"
...@@ -83,6 +84,7 @@ ...@@ -83,6 +84,7 @@
#include "markup.h" #include "markup.h"
#include "npruntime_impl.h" #include "npruntime_impl.h"
#include "visible_units.h" #include "visible_units.h"
#include <wtf/CurrentTime.h>
#include <wtf/RefCountedLeakCounter.h> #include <wtf/RefCountedLeakCounter.h>
#include <wtf/StdLibExtras.h> #include <wtf/StdLibExtras.h>
...@@ -752,6 +754,14 @@ void Frame::transferChildFrameToNewDocument() ...@@ -752,6 +754,14 @@ void Frame::transferChildFrameToNewDocument()
} }
} }
double Frame::currentAnimationTime()
{
if (Page* p = page())
return p->animationTime()->currentAnimationTime();
return currentTime();
}
String Frame::documentTypeString() const String Frame::documentTypeString() const
{ {
if (DocumentType* doctype = document()->doctype()) if (DocumentType* doctype = document()->doctype())
......
...@@ -107,6 +107,8 @@ namespace WebCore { ...@@ -107,6 +107,8 @@ namespace WebCore {
void transferChildFrameToNewDocument(); void transferChildFrameToNewDocument();
double currentAnimationTime();
// ======== All public functions below this point are candidates to move out of Frame into another class. ======== // ======== All public functions below this point are candidates to move out of Frame into another class. ========
bool isDisconnected() const; bool isDisconnected() const;
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "config.h" #include "config.h"
#include "Page.h" #include "Page.h"
#include "AnimationTimeController.h"
#include "BackForwardController.h" #include "BackForwardController.h"
#include "BackForwardList.h" #include "BackForwardList.h"
#include "Base64.h" #include "Base64.h"
...@@ -156,6 +157,7 @@ Page::Page(const PageClients& pageClients) ...@@ -156,6 +157,7 @@ Page::Page(const PageClients& pageClients)
, m_settings(adoptPtr(new Settings(this))) , m_settings(adoptPtr(new Settings(this)))
, m_progress(adoptPtr(new ProgressTracker)) , m_progress(adoptPtr(new ProgressTracker))
, m_backForwardController(adoptPtr(new BackForwardController(this, pageClients.backForwardClient))) , m_backForwardController(adoptPtr(new BackForwardController(this, pageClients.backForwardClient)))
, m_animationTimeController(AnimationTimeController::create())
, m_theme(RenderTheme::themeForPage(this)) , m_theme(RenderTheme::themeForPage(this))
, m_editorClient(pageClients.editorClient) , m_editorClient(pageClients.editorClient)
, m_frameCount(0) , m_frameCount(0)
......
...@@ -39,6 +39,7 @@ namespace JSC { ...@@ -39,6 +39,7 @@ namespace JSC {
namespace WebCore { namespace WebCore {
class AnimationTimeController;
class BackForwardController; class BackForwardController;
class BackForwardList; class BackForwardList;
class Chrome; class Chrome;
...@@ -182,6 +183,7 @@ namespace WebCore { ...@@ -182,6 +183,7 @@ namespace WebCore {
Settings* settings() const { return m_settings.get(); } Settings* settings() const { return m_settings.get(); }
ProgressTracker* progress() const { return m_progress.get(); } ProgressTracker* progress() const { return m_progress.get(); }
BackForwardController* backForward() const { return m_backForwardController.get(); } BackForwardController* backForward() const { return m_backForwardController.get(); }
AnimationTimeController* animationTime() const { return m_animationTimeController.get(); }
enum ViewMode { enum ViewMode {
ViewModeInvalid, ViewModeInvalid,
...@@ -327,6 +329,7 @@ namespace WebCore { ...@@ -327,6 +329,7 @@ namespace WebCore {
OwnPtr<ProgressTracker> m_progress; OwnPtr<ProgressTracker> m_progress;
OwnPtr<BackForwardController> m_backForwardController; OwnPtr<BackForwardController> m_backForwardController;
OwnPtr<AnimationTimeController> m_animationTimeController;
RefPtr<Frame> m_mainFrame; RefPtr<Frame> m_mainFrame;
RefPtr<HistoryItem> m_globalHistoryItem; RefPtr<HistoryItem> m_globalHistoryItem;
...@@ -380,6 +383,8 @@ namespace WebCore { ...@@ -380,6 +383,8 @@ namespace WebCore {
NotificationPresenter* m_notificationPresenter; NotificationPresenter* m_notificationPresenter;
#endif #endif
double m_currentAnimationTime;
ViewMode m_viewMode; ViewMode m_viewMode;
ViewportArguments m_viewportArguments; ViewportArguments m_viewportArguments;
......
...@@ -316,7 +316,7 @@ bool AnimationControllerPrivate::pauseTransitionAtTime(RenderObject* renderer, c ...@@ -316,7 +316,7 @@ bool AnimationControllerPrivate::pauseTransitionAtTime(RenderObject* renderer, c
double AnimationControllerPrivate::beginAnimationUpdateTime() double AnimationControllerPrivate::beginAnimationUpdateTime()
{ {
if (m_beginAnimationUpdateTime == cBeginAnimationUpdateTimeNotSet) if (m_beginAnimationUpdateTime == cBeginAnimationUpdateTimeNotSet)
m_beginAnimationUpdateTime = currentTime(); m_beginAnimationUpdateTime = m_frame->currentAnimationTime();
return m_beginAnimationUpdateTime; return m_beginAnimationUpdateTime;
} }
......
/*
* Copyright (C) 2011, Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "AnimationTimeController.h"
#include <wtf/CurrentTime.h>
static const double cCurrentAnimationTimeNotSet = -1;
namespace WebCore {
AnimationTimeController::AnimationTimeController()
: m_currentAnimationTime(cCurrentAnimationTimeNotSet)
, m_clearCurrentAnimationTimeTimer(this, &AnimationTimeController::clearCurrentAnimationTimeTimerFired)
{
}
AnimationTimeController::~AnimationTimeController()
{
}
double AnimationTimeController::currentAnimationTime()
{
if (m_currentAnimationTime == cCurrentAnimationTimeNotSet) {
m_currentAnimationTime = currentTime();
// Clear out the animation time after 15ms if it hasn't been already.
m_clearCurrentAnimationTimeTimer.startOneShot(0.015);
}
return m_currentAnimationTime;
}
void AnimationTimeController::clearCurrentAnimationTime()
{
m_currentAnimationTime = cCurrentAnimationTimeNotSet;
if (m_clearCurrentAnimationTimeTimer.isActive())
m_clearCurrentAnimationTimeTimer.stop();
}
void AnimationTimeController::clearCurrentAnimationTimeTimerFired(Timer<AnimationTimeController>*)
{
clearCurrentAnimationTime();
}
}
/*
* Copyright (C) 2011, Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions