Remove the frames() timing function
authorgraouts@webkit.org <graouts@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Oct 2018 06:55:24 +0000 (06:55 +0000)
committergraouts@webkit.org <graouts@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Oct 2018 06:55:24 +0000 (06:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190034
<rdar://problem/44827544>

Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

* web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt:
* web-platform-tests/css-timing-1/frames-timing-functions-syntax-expected.txt:
* web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-transformed-distance-expected.txt:
* web-platform-tests/web-animations/interfaces/AnimationEffectTiming/easing-expected.txt:
* web-platform-tests/web-animations/timing-model/time-transformations/transformed-progress-expected.txt:

Source/WebCore:

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::createTimingFunctionValue):
* css/CSSTimingFunctionValue.cpp:
(WebCore::CSSFramesTimingFunctionValue::customCSSText const): Deleted.
(WebCore::CSSFramesTimingFunctionValue::equals const): Deleted.
* css/CSSTimingFunctionValue.h:
* css/CSSToStyleMap.cpp:
(WebCore::CSSToStyleMap::mapAnimationTimingFunction):
* css/CSSValue.cpp:
(WebCore::CSSValue::equals const):
(WebCore::CSSValue::cssText const):
(WebCore::CSSValue::destroy):
* css/CSSValue.h:
(WebCore::CSSValue::isStepsTimingFunctionValue const):
(WebCore::CSSValue::isFramesTimingFunctionValue const): Deleted.
* css/CSSValueKeywords.in:
* css/parser/CSSPropertyParser.cpp:
(WebCore::consumeAnimationTimingFunction):
(WebCore::consumeFrames): Deleted.
* platform/animation/TimingFunction.cpp:
(WebCore::operator<<):
(WebCore::TimingFunction::transformTime const):
(WebCore::TimingFunction::createFromCSSValue):
* platform/animation/TimingFunction.h:
(WebCore::TimingFunction::isStepsTimingFunction const):
(WebCore::TimingFunction::isFramesTimingFunction const): Deleted.
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::animationCanBeAccelerated const):
(WebCore::animationHasFramesTimingFunction): Deleted.

Source/WebKit:

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<FramesTimingFunction>::encode): Deleted.
(IPC::ArgumentCoder<FramesTimingFunction>::decode): Deleted.
* Shared/WebCoreArgumentCoders.h:
* WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
(WebKit::PlatformCAAnimationRemote::Properties::encode const):
(WebKit::PlatformCAAnimationRemote::Properties::decode):

LayoutTests:

* legacy-animation-engine/transitions/frames-timing-function-expected.txt:
* legacy-animation-engine/transitions/transitions-parsing-expected.txt:
* transitions/frames-timing-function-expected.txt:
* transitions/transitions-parsing-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236998 268f45cc-cd09-0410-ab3c-d52691b4dbfc

27 files changed:
LayoutTests/ChangeLog
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt
LayoutTests/imported/w3c/web-platform-tests/css-timing-1/frames-timing-functions-syntax-expected.txt
LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-transformed-distance-expected.txt
LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/easing-expected.txt
LayoutTests/imported/w3c/web-platform-tests/web-animations/timing-model/time-transformations/transformed-progress-expected.txt
LayoutTests/legacy-animation-engine/transitions/frames-timing-function-expected.txt
LayoutTests/legacy-animation-engine/transitions/transitions-parsing-expected.txt
LayoutTests/transitions/frames-timing-function-expected.txt
LayoutTests/transitions/transitions-parsing-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/css/CSSComputedStyleDeclaration.cpp
Source/WebCore/css/CSSTimingFunctionValue.cpp
Source/WebCore/css/CSSTimingFunctionValue.h
Source/WebCore/css/CSSToStyleMap.cpp
Source/WebCore/css/CSSValue.cpp
Source/WebCore/css/CSSValue.h
Source/WebCore/css/CSSValueKeywords.in
Source/WebCore/css/parser/CSSPropertyParser.cpp
Source/WebCore/platform/animation/TimingFunction.cpp
Source/WebCore/platform/animation/TimingFunction.h
Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
Source/WebKit/ChangeLog
Source/WebKit/Shared/WebCoreArgumentCoders.cpp
Source/WebKit/Shared/WebCoreArgumentCoders.h
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm

index 8c24d39..c2e5a48 100644 (file)
@@ -1,3 +1,16 @@
+2018-10-09  Antoine Quint  <graouts@apple.com>
+
+        Remove the frames() timing function
+        https://bugs.webkit.org/show_bug.cgi?id=190034
+        <rdar://problem/44827544>
+
+        Reviewed by Dean Jackson.
+
+        * legacy-animation-engine/transitions/frames-timing-function-expected.txt:
+        * legacy-animation-engine/transitions/transitions-parsing-expected.txt:
+        * transitions/frames-timing-function-expected.txt:
+        * transitions/transitions-parsing-expected.txt:
+
 2018-10-09  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: show redirect requests in Network and Timelines tabs
index 036a10e..16d877f 100644 (file)
@@ -1,3 +1,17 @@
+2018-10-09  Antoine Quint  <graouts@apple.com>
+
+        Remove the frames() timing function
+        https://bugs.webkit.org/show_bug.cgi?id=190034
+        <rdar://problem/44827544>
+
+        Reviewed by Dean Jackson.
+
+        * web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt:
+        * web-platform-tests/css-timing-1/frames-timing-functions-syntax-expected.txt:
+        * web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-transformed-distance-expected.txt:
+        * web-platform-tests/web-animations/interfaces/AnimationEffectTiming/easing-expected.txt:
+        * web-platform-tests/web-animations/timing-model/time-transformations/transformed-progress-expected.txt:
+
 2018-10-09  Oriol Brufau  <obrufau@igalia.com>
 
         Resolve inset properties to computed style when there is overconstraintment
index e952c79..63b2c58 100644 (file)
@@ -1,10 +1,10 @@
 
-PASS For an input progress of 0.0, the output of a frames timing function is the first frame 
-PASS At a frame boundary, the output of a frames timing function is the next frame 
-PASS For an input progress of 1.0, the output of a frames timing function is the final frame 
-PASS The number of frames is correctly reflected in the frames timing function output 
-PASS The number of frames is correctly reflected in the frames timing function output on CSS Transitions 
-PASS frames easing with input progress greater than 1 
-PASS frames easing with input progress greater than 1.5 
-PASS frames easing with input progress less than 0 
+FAIL For an input progress of 0.0, the output of a frames timing function is the first frame assert_equals: expected "0px" but got "auto"
+FAIL At a frame boundary, the output of a frames timing function is the next frame assert_equals: expected "0px" but got "auto"
+FAIL For an input progress of 1.0, the output of a frames timing function is the final frame assert_equals: expected "100px" but got "auto"
+FAIL The number of frames is correctly reflected in the frames timing function output assert_equals: expected "0px" but got "auto"
+FAIL The number of frames is correctly reflected in the frames timing function output on CSS Transitions assert_equals: expected "0px" but got "100px"
+FAIL frames easing with input progress greater than 1 Type error
+FAIL frames easing with input progress greater than 1.5 Type error
+FAIL frames easing with input progress less than 0 Type error
 
index 17a8b48..a12008e 100644 (file)
@@ -1,4 +1,4 @@
 
 PASS The number of frames must be a positive integer greater than 1, or we fallback to the previously-set easing 
-PASS The serialization of frames is 'frames(n)', n is the number of frames 
+FAIL The serialization of frames is 'frames(n)', n is the number of frames assert_equals: expected "frames(2)" but got "ease"
 
index 0e27272..c2bde0a 100644 (file)
@@ -6,7 +6,7 @@ PASS A step-end function on a keyframe affects the resulting style
 PASS A steps(1) function on a keyframe affects the resulting style 
 PASS A steps(1, end) function on a keyframe affects the resulting style 
 PASS A steps(2, end) function on a keyframe affects the resulting style 
-PASS A frames function on a keyframe affects the resulting style 
+FAIL A frames function on a keyframe affects the resulting style Type error
 PASS A linear function on a keyframe affects the resulting style 
 FAIL A ease function on a keyframe affects the resulting style assert_approx_equals: The width should be approximately 109.47963055884654 at 1100ms expected 109.47963055884654 +/- 0.01 but got 109.46875
 PASS A ease-in function on a keyframe affects the resulting style 
@@ -21,7 +21,7 @@ PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a
 PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a steps(1) function does not alter the result 
 PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a steps(1, end) function does not alter the result 
 PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a steps(2, end) function does not alter the result 
-PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a frames function does not alter the result 
+FAIL Linear-equivalent cubic-bezier keyframe easing applied to an effect with a frames function does not alter the result Type error
 PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a linear function does not alter the result 
 PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a ease function does not alter the result 
 PASS Linear-equivalent cubic-bezier keyframe easing applied to an effect with a ease-in function does not alter the result 
index 35d3789..5232730 100644 (file)
@@ -7,7 +7,7 @@ PASS step-end function
 PASS steps(1) function 
 PASS steps(1, end) function 
 PASS steps(2, end) function 
-PASS frames function 
+FAIL frames function Type error
 PASS linear function 
 PASS ease function 
 PASS ease-in function 
@@ -52,6 +52,6 @@ PASS Canonical easing 'ease-in-out' is returned as set
 PASS Canonical easing 'cubic-bezier(0.1, 5, 0.23, 0)' is returned as set 
 PASS Canonical easing 'steps(3, start)' is returned as set 
 PASS Canonical easing 'steps(3)' is returned as set 
-PASS Canonical easing 'frames(3)' is returned as set 
+FAIL Canonical easing 'frames(3)' is returned as set Type error
 PASS Allows the easing to be changed while the animation is in progress 
 
index f65c3a6..9933d43 100644 (file)
@@ -6,7 +6,7 @@ PASS Transformed progress for step-end function
 PASS Transformed progress for steps(1) function 
 PASS Transformed progress for steps(1, end) function 
 PASS Transformed progress for steps(2, end) function 
-PASS Transformed progress for frames function 
+FAIL Transformed progress for frames function Type error
 PASS Transformed progress for linear function 
 PASS Transformed progress for ease function 
 PASS Transformed progress for ease-in function 
@@ -25,6 +25,6 @@ PASS Test bounds point of step-start easing with alternate-reverse direction
 PASS Test bounds point of step-end easing 
 PASS Test bounds point of step-end easing with iterationStart and delay 
 PASS Test bounds point of step-end easing with iterationStart not at a transition point 
-PASS Test bounds point of frames easing 
-PASS Test bounds point of frames easing with iterationStart and delay 
+FAIL Test bounds point of frames easing Type error
+FAIL Test bounds point of frames easing with iterationStart and delay Type error
 
index 08cf6a9..3e6bc7d 100644 (file)
@@ -1,6 +1,6 @@
 The box should move horizontally 200px over 1s, in 4 equal increments.
 
-PASS - "-webkit-transform.4" property for "box" element at 0.25s saw something close to: 50
-PASS - "-webkit-transform.4" property for "box" element at 0.5s saw something close to: 100
-PASS - "-webkit-transform.4" property for "box" element at 0.75s saw something close to: 150
+FAIL - "-webkit-transform.4" property for "box" element at 0.25s expected: 50 but saw: matrix(1, 0, 0, 1, 81.71330261230469, 0)
+FAIL - "-webkit-transform.4" property for "box" element at 0.5s expected: 100 but saw: matrix(1, 0, 0, 1, 160.4827880859375, 0)
+FAIL - "-webkit-transform.4" property for "box" element at 0.75s expected: 150 but saw: matrix(1, 0, 0, 1, 192.13755798339844, 0)
 
index 6e317fc..8a6661e 100644 (file)
@@ -220,10 +220,10 @@ PASS style.transitionTimingFunction is 'steps(5, start)'
 PASS computedStyle.transitionTimingFunction is 'steps(5, start)'
 PASS style.webkitTransitionTimingFunction is 'steps(5, start)'
 PASS computedStyle.webkitTransitionTimingFunction is 'steps(5, start)'
-PASS style.transitionTimingFunction is 'frames(2)'
-PASS computedStyle.transitionTimingFunction is 'frames(2)'
-PASS style.webkitTransitionTimingFunction is 'frames(2)'
-PASS computedStyle.webkitTransitionTimingFunction is 'frames(2)'
+FAIL style.transitionTimingFunction should be frames(2). Was steps(5, start).
+FAIL computedStyle.transitionTimingFunction should be frames(2). Was steps(5, start).
+FAIL style.webkitTransitionTimingFunction should be frames(2). Was steps(5, start).
+FAIL computedStyle.webkitTransitionTimingFunction should be frames(2). Was steps(5, start).
 PASS style.transitionTimingFunction is 'ease-in-out, ease-in'
 PASS computedStyle.transitionTimingFunction is 'ease-in-out, ease-in'
 PASS style.webkitTransitionTimingFunction is 'ease-in-out, ease-in'
index 08cf6a9..3e6bc7d 100644 (file)
@@ -1,6 +1,6 @@
 The box should move horizontally 200px over 1s, in 4 equal increments.
 
-PASS - "-webkit-transform.4" property for "box" element at 0.25s saw something close to: 50
-PASS - "-webkit-transform.4" property for "box" element at 0.5s saw something close to: 100
-PASS - "-webkit-transform.4" property for "box" element at 0.75s saw something close to: 150
+FAIL - "-webkit-transform.4" property for "box" element at 0.25s expected: 50 but saw: matrix(1, 0, 0, 1, 81.71330261230469, 0)
+FAIL - "-webkit-transform.4" property for "box" element at 0.5s expected: 100 but saw: matrix(1, 0, 0, 1, 160.4827880859375, 0)
+FAIL - "-webkit-transform.4" property for "box" element at 0.75s expected: 150 but saw: matrix(1, 0, 0, 1, 192.13755798339844, 0)
 
index 6e317fc..8a6661e 100644 (file)
@@ -220,10 +220,10 @@ PASS style.transitionTimingFunction is 'steps(5, start)'
 PASS computedStyle.transitionTimingFunction is 'steps(5, start)'
 PASS style.webkitTransitionTimingFunction is 'steps(5, start)'
 PASS computedStyle.webkitTransitionTimingFunction is 'steps(5, start)'
-PASS style.transitionTimingFunction is 'frames(2)'
-PASS computedStyle.transitionTimingFunction is 'frames(2)'
-PASS style.webkitTransitionTimingFunction is 'frames(2)'
-PASS computedStyle.webkitTransitionTimingFunction is 'frames(2)'
+FAIL style.transitionTimingFunction should be frames(2). Was steps(5, start).
+FAIL computedStyle.transitionTimingFunction should be frames(2). Was steps(5, start).
+FAIL style.webkitTransitionTimingFunction should be frames(2). Was steps(5, start).
+FAIL computedStyle.webkitTransitionTimingFunction should be frames(2). Was steps(5, start).
 PASS style.transitionTimingFunction is 'ease-in-out, ease-in'
 PASS computedStyle.transitionTimingFunction is 'ease-in-out, ease-in'
 PASS style.webkitTransitionTimingFunction is 'ease-in-out, ease-in'
index 1f71910..9732b4e 100644 (file)
@@ -1,3 +1,41 @@
+2018-10-09  Antoine Quint  <graouts@apple.com>
+
+        Remove the frames() timing function
+        https://bugs.webkit.org/show_bug.cgi?id=190034
+        <rdar://problem/44827544>
+
+        Reviewed by Dean Jackson.
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::createTimingFunctionValue):
+        * css/CSSTimingFunctionValue.cpp:
+        (WebCore::CSSFramesTimingFunctionValue::customCSSText const): Deleted.
+        (WebCore::CSSFramesTimingFunctionValue::equals const): Deleted.
+        * css/CSSTimingFunctionValue.h:
+        * css/CSSToStyleMap.cpp:
+        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
+        * css/CSSValue.cpp:
+        (WebCore::CSSValue::equals const):
+        (WebCore::CSSValue::cssText const):
+        (WebCore::CSSValue::destroy):
+        * css/CSSValue.h:
+        (WebCore::CSSValue::isStepsTimingFunctionValue const):
+        (WebCore::CSSValue::isFramesTimingFunctionValue const): Deleted.
+        * css/CSSValueKeywords.in:
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::consumeAnimationTimingFunction):
+        (WebCore::consumeFrames): Deleted.
+        * platform/animation/TimingFunction.cpp:
+        (WebCore::operator<<):
+        (WebCore::TimingFunction::transformTime const):
+        (WebCore::TimingFunction::createFromCSSValue):
+        * platform/animation/TimingFunction.h:
+        (WebCore::TimingFunction::isStepsTimingFunction const):
+        (WebCore::TimingFunction::isFramesTimingFunction const): Deleted.
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::animationCanBeAccelerated const):
+        (WebCore::animationHasFramesTimingFunction): Deleted.
+
 2018-10-09  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: show redirect requests in Network and Timelines tabs
index 2d55ea3..13d490d 100644 (file)
@@ -1592,10 +1592,6 @@ static Ref<CSSValue> createTimingFunctionValue(const TimingFunction& timingFunct
         auto& function = downcast<StepsTimingFunction>(timingFunction);
         return CSSStepsTimingFunctionValue::create(function.numberOfSteps(), function.stepAtStart());
     }
-    case TimingFunction::FramesFunction: {
-        auto& function = downcast<FramesTimingFunction>(timingFunction);
-        return CSSFramesTimingFunctionValue::create(function.numberOfFrames());
-    }
     case TimingFunction::SpringFunction: {
         auto& function = downcast<SpringTimingFunction>(timingFunction);
         return CSSSpringTimingFunctionValue::create(function.mass(), function.stiffness(), function.damping(), function.initialVelocity());
index 90ef6cd..2dd6195 100644 (file)
@@ -67,20 +67,6 @@ bool CSSStepsTimingFunctionValue::equals(const CSSStepsTimingFunctionValue& othe
     return m_steps == other.m_steps && m_stepAtStart == other.m_stepAtStart;
 }
 
-String CSSFramesTimingFunctionValue::customCSSText() const
-{
-    StringBuilder builder;
-    builder.appendLiteral("frames(");
-    builder.appendNumber(m_frames);
-    builder.appendLiteral(")");
-    return builder.toString();
-}
-
-bool CSSFramesTimingFunctionValue::equals(const CSSFramesTimingFunctionValue& other) const
-{
-    return m_frames == other.m_frames;
-}
-
 String CSSSpringTimingFunctionValue::customCSSText() const
 {
     StringBuilder builder;
index 6060979..a9bf4ee 100644 (file)
@@ -87,29 +87,6 @@ private:
     bool m_stepAtStart;
 };
 
-class CSSFramesTimingFunctionValue final : public CSSValue {
-public:
-    static Ref<CSSFramesTimingFunctionValue> create(unsigned frames)
-    {
-        return adoptRef(*new CSSFramesTimingFunctionValue(frames));
-    }
-
-    unsigned numberOfFrames() const { return m_frames; }
-
-    String customCSSText() const;
-
-    bool equals(const CSSFramesTimingFunctionValue&) const;
-
-private:
-    CSSFramesTimingFunctionValue(unsigned frames)
-        : CSSValue(FramesTimingFunctionClass)
-        , m_frames(frames)
-    {
-    }
-
-    unsigned m_frames;
-};
-
 class CSSSpringTimingFunctionValue final : public CSSValue {
 public:
     static Ref<CSSSpringTimingFunctionValue> create(double mass, double stiffness, double damping, double initialVelocity)
@@ -146,5 +123,4 @@ private:
 
 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSCubicBezierTimingFunctionValue, isCubicBezierTimingFunctionValue())
 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSStepsTimingFunctionValue, isStepsTimingFunctionValue())
-SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSFramesTimingFunctionValue, isFramesTimingFunctionValue())
 SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSSpringTimingFunctionValue, isSpringTimingFunctionValue())
index a295348..e93de99 100644 (file)
@@ -500,9 +500,6 @@ void CSSToStyleMap::mapAnimationTimingFunction(Animation& animation, const CSSVa
     } else if (is<CSSStepsTimingFunctionValue>(value)) {
         auto& stepsTimingFunction = downcast<CSSStepsTimingFunctionValue>(value);
         animation.setTimingFunction(StepsTimingFunction::create(stepsTimingFunction.numberOfSteps(), stepsTimingFunction.stepAtStart()));
-    } else if (is<CSSFramesTimingFunctionValue>(value)) {
-        auto& framesTimingFunction = downcast<CSSFramesTimingFunctionValue>(value);
-        animation.setTimingFunction(FramesTimingFunction::create(framesTimingFunction.numberOfFrames()));
     } else if (is<CSSSpringTimingFunctionValue>(value)) {
         auto& springTimingFunction = downcast<CSSSpringTimingFunctionValue>(value);
         animation.setTimingFunction(SpringTimingFunction::create(springTimingFunction.mass(), springTimingFunction.stiffness(), springTimingFunction.damping(), springTimingFunction.initialVelocity()));
index 8a2a4bc..8498b2b 100644 (file)
@@ -197,8 +197,6 @@ bool CSSValue::equals(const CSSValue& other) const
             return compareCSSValues<CSSCubicBezierTimingFunctionValue>(*this, other);
         case StepsTimingFunctionClass:
             return compareCSSValues<CSSStepsTimingFunctionValue>(*this, other);
-        case FramesTimingFunctionClass:
-            return compareCSSValues<CSSFramesTimingFunctionValue>(*this, other);
         case SpringTimingFunctionClass:
             return compareCSSValues<CSSSpringTimingFunctionValue>(*this, other);
         case UnicodeRangeClass:
@@ -295,8 +293,6 @@ String CSSValue::cssText() const
         return downcast<CSSCubicBezierTimingFunctionValue>(*this).customCSSText();
     case StepsTimingFunctionClass:
         return downcast<CSSStepsTimingFunctionValue>(*this).customCSSText();
-    case FramesTimingFunctionClass:
-        return downcast<CSSFramesTimingFunctionValue>(*this).customCSSText();
     case SpringTimingFunctionClass:
         return downcast<CSSSpringTimingFunctionValue>(*this).customCSSText();
     case UnicodeRangeClass:
@@ -415,9 +411,6 @@ void CSSValue::destroy()
     case StepsTimingFunctionClass:
         delete downcast<CSSStepsTimingFunctionValue>(this);
         return;
-    case FramesTimingFunctionClass:
-        delete downcast<CSSFramesTimingFunctionValue>(this);
-        return;
     case SpringTimingFunctionClass:
         delete downcast<CSSSpringTimingFunctionValue>(this);
         return;
index ad1d007..c16a528 100644 (file)
@@ -102,7 +102,6 @@ public:
     bool isShadowValue() const { return m_classType == ShadowClass; }
     bool isCubicBezierTimingFunctionValue() const { return m_classType == CubicBezierTimingFunctionClass; }
     bool isStepsTimingFunctionValue() const { return m_classType == StepsTimingFunctionClass; }
-    bool isFramesTimingFunctionValue() const { return m_classType == FramesTimingFunctionClass; }
     bool isSpringTimingFunctionValue() const { return m_classType == SpringTimingFunctionClass; }
     bool isLineBoxContainValue() const { return m_classType == LineBoxContainClass; }
     bool isCalcValue() const {return m_classType == CalculationClass; }
@@ -153,7 +152,6 @@ protected:
         // Timing function classes.
         CubicBezierTimingFunctionClass,
         StepsTimingFunctionClass,
-        FramesTimingFunctionClass,
         SpringTimingFunctionClass,
 
         // Other class types.
index 71d1b5e..ce0649d 100644 (file)
@@ -1237,7 +1237,6 @@ url
 cubic-bezier
 spring
 steps
-frames
 apple-invert-lightness
 
 // colors
index 5f21463..5fcc4ce 100644 (file)
@@ -1475,27 +1475,6 @@ static RefPtr<CSSValue> consumeSteps(CSSParserTokenRange& range)
     return CSSStepsTimingFunctionValue::create(steps->intValue(), stepAtStart);
 }
 
-static RefPtr<CSSValue> consumeFrames(CSSParserTokenRange& range)
-{
-    ASSERT(range.peek().functionId() == CSSValueFrames);
-    CSSParserTokenRange rangeCopy = range;
-    CSSParserTokenRange args = consumeFunction(rangeCopy);
-    
-    RefPtr<CSSPrimitiveValue> frames = consumePositiveInteger(args);
-    if (!frames)
-        return nullptr;
-
-    auto numberOfFrames = frames->intValue();
-    if (numberOfFrames < 2)
-        return nullptr;
-    
-    if (!args.atEnd())
-        return nullptr;
-    
-    range = rangeCopy;
-    return CSSFramesTimingFunctionValue::create(numberOfFrames);
-}
-
 static RefPtr<CSSValue> consumeCubicBezier(CSSParserTokenRange& range)
 {
     ASSERT(range.peek().functionId() == CSSValueCubicBezier);
@@ -1566,8 +1545,6 @@ static RefPtr<CSSValue> consumeAnimationTimingFunction(CSSParserTokenRange& rang
         return consumeCubicBezier(range);
     if (function == CSSValueSteps)
         return consumeSteps(range);
-    if (function == CSSValueFrames)
-        return consumeFrames(range);
     if (context.springTimingFunctionEnabled && function == CSSValueSpring)
         return consumeSpringFunction(range);
     return nullptr;
index 8c972d6..cfd0b36 100644 (file)
@@ -50,11 +50,6 @@ TextStream& operator<<(TextStream& ts, const TimingFunction& timingFunction)
         ts << "steps(" << function.numberOfSteps() << ", " << (function.stepAtStart() ? "start" : "end") << ")";
         break;
     }
-    case TimingFunction::FramesFunction: {
-        auto& function = downcast<FramesTimingFunction>(timingFunction);
-        ts << "frames(" << function.numberOfFrames() << ")";
-        break;
-    }
     case TimingFunction::SpringFunction: {
         auto& function = downcast<SpringTimingFunction>(timingFunction);
         ts << "spring(" << function.mass() << " " << function.stiffness() << " " <<  function.damping() << " " << function.initialVelocity() << ")";
@@ -100,16 +95,6 @@ double TimingFunction::transformTime(double inputTime, double duration, bool bef
         // 6. The output progress value is current step / steps.
         return currentStep / steps;
     }
-    case TimingFunction::FramesFunction: {
-        // https://drafts.csswg.org/css-timing/#frames-timing-functions
-        auto& function = downcast<FramesTimingFunction>(*this);
-        auto numberOfFrames = function.numberOfFrames();
-        ASSERT(numberOfFrames > 1);
-        auto outputTime = std::floor(inputTime * numberOfFrames) / (numberOfFrames - 1);
-        if (inputTime <= 1 && outputTime > 1)
-            return 1;
-        return outputTime;
-    }
     case TimingFunction::SpringFunction: {
         auto& function = downcast<SpringTimingFunction>(*this);
         return SpringSolver(function.mass(), function.stiffness(), function.damping(), function.initialVelocity()).solve(inputTime * duration);
@@ -170,10 +155,6 @@ RefPtr<TimingFunction> TimingFunction::createFromCSSValue(const CSSValue& value)
         auto& stepsTimingFunction = downcast<CSSStepsTimingFunctionValue>(value);
         return StepsTimingFunction::create(stepsTimingFunction.numberOfSteps(), stepsTimingFunction.stepAtStart());
     }
-    if (is<CSSFramesTimingFunctionValue>(value)) {
-        auto& framesTimingFunction = downcast<CSSFramesTimingFunctionValue>(value);
-        return FramesTimingFunction::create(framesTimingFunction.numberOfFrames());
-    }
     if (is<CSSSpringTimingFunctionValue>(value)) {
         auto& springTimingFunction = downcast<CSSSpringTimingFunctionValue>(value);
         return SpringTimingFunction::create(springTimingFunction.mass(), springTimingFunction.stiffness(), springTimingFunction.damping(), springTimingFunction.initialVelocity());
index f09a593..892f7d0 100644 (file)
@@ -41,13 +41,12 @@ public:
 
     virtual ~TimingFunction() = default;
 
-    enum TimingFunctionType { LinearFunction, CubicBezierFunction, StepsFunction, FramesFunction, SpringFunction };
+    enum TimingFunctionType { LinearFunction, CubicBezierFunction, StepsFunction, SpringFunction };
     TimingFunctionType type() const { return m_type; }
 
     bool isLinearTimingFunction() const { return m_type == LinearFunction; }
     bool isCubicBezierTimingFunction() const { return m_type == CubicBezierFunction; }
     bool isStepsTimingFunction() const { return m_type == StepsFunction; }
-    bool isFramesTimingFunction() const { return m_type == FramesFunction; }
     bool isSpringTimingFunction() const { return m_type == SpringFunction; }
 
     virtual bool operator==(const TimingFunction&) const = 0;
@@ -233,43 +232,6 @@ private:
     bool m_stepAtStart;
 };
 
-class FramesTimingFunction final : public TimingFunction {
-public:
-    static Ref<FramesTimingFunction> create(unsigned frames)
-    {
-        return adoptRef(*new FramesTimingFunction(frames));
-    }
-    static Ref<FramesTimingFunction> create()
-    {
-        return adoptRef(*new FramesTimingFunction(2));
-    }
-
-    bool operator==(const TimingFunction& other) const final
-    {
-        if (!is<FramesTimingFunction>(other))
-            return false;
-        auto& otherFrames = downcast<FramesTimingFunction>(other);
-        return m_frames == otherFrames.m_frames;
-    }
-    
-    unsigned numberOfFrames() const { return m_frames; }
-    void setNumberOfFrames(unsigned frames) { m_frames = frames; }
-
-private:
-    FramesTimingFunction(unsigned frames)
-        : TimingFunction(FramesFunction)
-        , m_frames(frames)
-    {
-    }
-
-    Ref<TimingFunction> clone() const final
-    {
-        return adoptRef(*new FramesTimingFunction(m_frames));
-    }
-    
-    unsigned m_frames;
-};
-
 class SpringTimingFunction final : public TimingFunction {
 public:
     static Ref<SpringTimingFunction> create(double mass, double stiffness, double damping, double initialVelocity)
@@ -338,5 +300,4 @@ SPECIALIZE_TYPE_TRAITS_END()
 SPECIALIZE_TYPE_TRAITS_TIMINGFUNCTION(WebCore::LinearTimingFunction, isLinearTimingFunction())
 SPECIALIZE_TYPE_TRAITS_TIMINGFUNCTION(WebCore::CubicBezierTimingFunction, isCubicBezierTimingFunction())
 SPECIALIZE_TYPE_TRAITS_TIMINGFUNCTION(WebCore::StepsTimingFunction, isStepsTimingFunction())
-SPECIALIZE_TYPE_TRAITS_TIMINGFUNCTION(WebCore::FramesTimingFunction, isFramesTimingFunction())
 SPECIALIZE_TYPE_TRAITS_TIMINGFUNCTION(WebCore::SpringTimingFunction, isSpringTimingFunction())
index a627b09..559a403 100644 (file)
@@ -286,21 +286,6 @@ static bool animationHasStepsTimingFunction(const KeyframeValueList& valueList,
     return false;
 }
 
-static bool animationHasFramesTimingFunction(const KeyframeValueList& valueList, const Animation* anim)
-{
-    if (is<FramesTimingFunction>(anim->timingFunction()))
-        return true;
-    
-    for (unsigned i = 0; i < valueList.size(); ++i) {
-        if (const TimingFunction* timingFunction = valueList.at(i).timingFunction()) {
-            if (is<FramesTimingFunction>(timingFunction))
-                return true;
-        }
-    }
-
-    return false;
-}
-
 static inline bool supportsAcceleratedFilterAnimations()
 {
 #if PLATFORM(COCOA)
@@ -1006,9 +991,6 @@ bool GraphicsLayerCA::animationCanBeAccelerated(const KeyframeValueList& valueLi
     if (animationHasStepsTimingFunction(valueList, anim))
         return false;
 
-    if (animationHasFramesTimingFunction(valueList, anim))
-        return false;
-
     return true;
 }
 
index 7761773..6ef050a 100644 (file)
@@ -1,3 +1,19 @@
+2018-10-09  Antoine Quint  <graouts@apple.com>
+
+        Remove the frames() timing function
+        https://bugs.webkit.org/show_bug.cgi?id=190034
+        <rdar://problem/44827544>
+
+        Reviewed by Dean Jackson.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<FramesTimingFunction>::encode): Deleted.
+        (IPC::ArgumentCoder<FramesTimingFunction>::decode): Deleted.
+        * Shared/WebCoreArgumentCoders.h:
+        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
+        (WebKit::PlatformCAAnimationRemote::Properties::encode const):
+        (WebKit::PlatformCAAnimationRemote::Properties::decode):
+
 2018-10-09  Youenn Fablet  <youenn@apple.com>
 
         ASSERTION FAILED: m_cachesLocks.contains(sessionID) in WebKit::CacheStorageEngineConnection::dereference(PAL::SessionID, unsigned long long)
index d2148bf..913bd79 100644 (file)
@@ -505,25 +505,6 @@ bool ArgumentCoder<StepsTimingFunction>::decode(Decoder& decoder, StepsTimingFun
     return true;
 }
 
-void ArgumentCoder<FramesTimingFunction>::encode(Encoder& encoder, const FramesTimingFunction& timingFunction)
-{
-    encoder.encodeEnum(timingFunction.type());
-    
-    encoder << timingFunction.numberOfFrames();
-}
-
-bool ArgumentCoder<FramesTimingFunction>::decode(Decoder& decoder, FramesTimingFunction& timingFunction)
-{
-    // Type is decoded by the caller.
-    int numFrames;
-    if (!decoder.decode(numFrames))
-        return false;
-
-    timingFunction.setNumberOfFrames(numFrames);
-
-    return true;
-}
-
 void ArgumentCoder<SpringTimingFunction>::encode(Encoder& encoder, const SpringTimingFunction& timingFunction)
 {
     encoder.encodeEnum(timingFunction.type());
index 3eeb442..0b2d968 100644 (file)
@@ -88,7 +88,6 @@ class ResourceResponse;
 class SecurityOrigin;
 class SpringTimingFunction;
 class StepsTimingFunction;
-class FramesTimingFunction;
 class StickyPositionViewportConstraints;
 class TextCheckingRequestData;
 class TransformationMatrix;
@@ -217,11 +216,6 @@ template<> struct ArgumentCoder<WebCore::StepsTimingFunction> {
     static bool decode(Decoder&, WebCore::StepsTimingFunction&);
 };
 
-template<> struct ArgumentCoder<WebCore::FramesTimingFunction> {
-    static void encode(Encoder&, const WebCore::FramesTimingFunction&);
-    static bool decode(Decoder&, WebCore::FramesTimingFunction&);
-};
-
 template<> struct ArgumentCoder<WebCore::SpringTimingFunction> {
     static void encode(Encoder&, const WebCore::SpringTimingFunction&);
     static bool decode(Decoder&, WebCore::SpringTimingFunction&);
index dcb8145..c2de0a2 100644 (file)
@@ -192,10 +192,6 @@ void PlatformCAAnimationRemote::Properties::encode(IPC::Encoder& encoder) const
             encoder << *static_cast<StepsTimingFunction*>(timingFunction.get());
             break;
 
-        case TimingFunction::FramesFunction:
-            encoder << *static_cast<FramesTimingFunction*>(timingFunction.get());
-            break;
-
         case TimingFunction::SpringFunction:
             encoder << *static_cast<SpringTimingFunction*>(timingFunction.get());
             break;
@@ -287,12 +283,6 @@ std::optional<PlatformCAAnimationRemote::Properties> PlatformCAAnimationRemote::
                     return std::nullopt;
                 break;
 
-            case TimingFunction::FramesFunction:
-                timingFunction = FramesTimingFunction::create();
-                if (!decoder.decode(*static_cast<FramesTimingFunction*>(timingFunction.get())))
-                    return std::nullopt;
-                break;
-
             case TimingFunction::SpringFunction:
                 timingFunction = SpringTimingFunction::create();
                 if (!decoder.decode(*static_cast<SpringTimingFunction*>(timingFunction.get())))