Commit Graph

191 Commits

Author SHA1 Message Date
Hiroyuki Ikezoe
6b27c1d810 Bug 1412716 - De-templatize EffectCompositor::UpdateEffectProperties and relevant stuff. r=emilio
MozReview-Commit-ID: K8yb8Kw16Mr
2018-04-09 20:15:59 +09:00
Hiroyuki Ikezoe
7c52573e52 Bug 1412716 - Drop KeyframeEffectReadOnly::mIsComposingStyle. r=emilio
The flag was introduced in bug 1322291 to prevent recursive calls of
KeyframeEffectReadOnly::ComposeStyle() on the old style system.  On the
new style system we never call the function recursively.

MozReview-Commit-ID: L5gb8G3bl4M
2018-04-09 20:15:59 +09:00
Hiroyuki Ikezoe
a5477d04c4 Bug 1412716 - De-templatize Animation::ComposeStyle and relevant stuff. r=emilio
MozReview-Commit-ID: AoDRzqG8hET
2018-04-09 20:15:59 +09:00
Hiroyuki Ikezoe
5607107199 Bug 1412716 - Rewrite a comment without using |aStyle|. r=emilio
MozReview-Commit-ID: 2OGLDBa31P
2018-04-09 20:15:59 +09:00
Emilio Cobos Álvarez
19d1b6d206 Bug 1452080: Remove ComputedStyle::PresContext usage in animation code. r=hiro
MozReview-Commit-ID: HwooTF9PGnq
2018-04-09 11:19:49 +02:00
Noemi Erli
b15aabf388 Backed out 3 changesets (bug 1452080) for bustage in /builds/worker/workspace/build/src/layout/base/nsCSSFrameConstructor.cpp on a CLOSED TREE
Backed out changeset 7f5104c7a242 (bug 1452080)
Backed out changeset 806a9c95a243 (bug 1452080)
Backed out changeset bffebe8aa254 (bug 1452080)
2018-04-09 11:18:12 +03:00
Emilio Cobos Álvarez
948ee35260 Bug 1452080: Remove ComputedStyle::PresContext usage in animation code. r=hiro
MozReview-Commit-ID: HwooTF9PGnq
2018-04-09 09:56:32 +02:00
Kartikaya Gupta
bbfd322693 Bug 1419851 - Handle OMTA throttling for webrender. r=jrmuizel
Original patch by Ethan Lin <ethlin@mozilla.com>.

MozReview-Commit-ID: AAIaskIsz9x
2018-04-06 10:06:54 -04:00
Xidorn Quan
ea8b8b1e74 Bug 1449400 part 5 - Remove StyleSetHandle. r=emilio
This patch basically does:
* remove StyleSetHandle and its corresponding files
* revisit #includes of related header files and change correspondingly
* change nsIPresShell::mStyleSet to be UniquePtr<ServoStyleSet>
* change the creating path of ServoStyleSet to pass UniquePtr
* change other mentions of StyleSetHandle to ServoStyleSet*
* remove AsServo() calls on ServoStyleSet

Some unfortunate bits:
* some methods of (Servo)StyleSet only accepts ServoStyleSheet while
  many places call into the methods with StyleSheet, so there are many
  ->AsServo() added to sheets

MozReview-Commit-ID: K4zYnuhOurA
2018-03-29 22:15:46 +11:00
Jonathan Watt
baf9ffb02b Bug 1448714 - Fix up comments referring to 'style context' after the rename of nsStyleContext. r=emilio 2018-03-23 13:49:21 +00:00
Emilio Cobos Álvarez
fb9a0faf99 Bug 1448559: Cleanup CalcStyleDifference. r=xidorn
The aSamePointerStructs argument is unused now.

Also, aIgnoreVariables can be true everywhere now, since variable changes can't
generate change hints, and anonymous boxes and such don't care about whether
they really changed or not.

Only one caller cares about struct equality, and that already compares variables
manually as an optimization on the rust side.

We had this optimization inconsistently in some cases but not others.

MozReview-Commit-ID: F2EISKlxR3K
2018-03-26 09:47:33 +02:00
Emilio Cobos Álvarez
1800e02ed5 Bug 1448665: Simplify the unanimated style setup in nsComputedDOMStyle. r=xidorn
We never create nsComputedDOMStyle objects with an unanimated computed style, so
this can be much simpler.

MozReview-Commit-ID: 2NyBoErxRtV
2018-03-26 09:43:58 +02:00
Emilio Cobos Álvarez
c48b1f646b Bug 1448690: Remove IsStyledByServo. r=xidorn
MozReview-Commit-ID: I3MDbo2Yu7d
2018-03-26 09:39:26 +02:00
Emilio Cobos Álvarez
68ee99d4c8 Bug 1448688: Remove RestyleTracker, ComputedStyle::AsServo, old style system element bits. r=xidorn
MozReview-Commit-ID: ALiOngGqozN
2018-03-26 09:38:07 +02:00
Xidorn Quan
bcaf98550b Bug 1448716 - Remove PropertyValuePair::mValue. r=hiro
MozReview-Commit-ID: GLGJuXgontY
2018-03-26 16:15:56 +11:00
Jonathan Watt
19a102f496 Bug 1448294 - Clean up naming of 'styleContext' variables after the big nsStyleContext rename. r=emilio
Reviewers: emilio

Bug #: 1448294

Differential Revision: https://phabricator.services.mozilla.com/D796

MozReview-Commit-ID: KJq2i9nrg7y
2018-03-25 20:49:58 +02:00
Narcis Beleuzu
2764b805dc Backed out 2 changesets (bug 1448294, bug 1448337) for wpt and reftest failures on /mathml
Backed out changeset 180051cfe357 (bug 1448294)
Backed out changeset c188176f3289 (bug 1448337)
2018-03-25 21:31:08 +03:00
Jonathan Watt
68804bb222 Summary: Bug 1448294 - Clean up naming of 'styleContext' variables after the big nsStyleContext rename. r=emilio
Reviewers: emilio

Bug #: 1448294

Differential Revision: https://phabricator.services.mozilla.com/D796
2018-03-22 13:49:21 +00:00
Emilio Cobos Álvarez
1d4859a89a Bug 1447483: Merge nsStyleContext and ServoStyleContext, rename to ComputedStyle. r=jwatt on a CLOSED TREE
MozReview-Commit-ID: JPopq0LudD
2018-03-22 20:06:24 +01:00
Emilio Cobos Álvarez
97286b35c8 Back out changeset b683bb3f22a1 (Bug 1447483) for not landing with all the files. r=me on a CLOSED TREE
This reverts commit 1808914126bb9f9e4a82d2c3d7ac961885fe7d62.

MozReview-Commit-ID: 5skESBseEvo
2018-03-22 20:05:22 +01:00
Emilio Cobos Álvarez
1f5d8de5cc Bug 1447483: Merge nsStyleContext and ServoStyleContext, rename to ComputedStyle. r=jwatt
MozReview-Commit-ID: JPopq0LudD
2018-03-22 19:48:42 +01:00
Emilio Cobos Álvarez
b1a35fbef7 Bug 1447358: Unifdef the old style system code. r=jwatt
Summary:
This has been automatically generated using:

  http://dotat.at/prog/unifdef/

And:

find $OBJDIR -type f -name '*.h' |
while read FILE; do
  echo "$FILE"
  unifdef -m -DMOZ_STYLO -UMOZ_OLD_STYLE "$FILE";
done

find $OBJDIR -type f -name '*.cpp' |
while read FILE; do
  echo "$FILE"
  unifdef -m -DMOZ_STYLO -UMOZ_OLD_STYLE "$FILE";
done

MozReview-Commit-ID: I4NdKqbMXzJ

Reviewers: jwatt

Bug #: 1447358

Differential Revision: https://phabricator.services.mozilla.com/D779
2018-03-21 10:20:34 +01:00
Hiroyuki Ikezoe
196669340a Bug 1437272 - Don't throttle finite transform animations in out-of-view element. r=birtles
Transform animation in out-of-view element might move in visible area so if we
throttle it the transform animation might come in view suddenly.  So we don't
throttle transform animations in ouf-of-view element anymore if it's not
infinite.  Finite animations don't last so that they won't consume CPU so much
time.

MozReview-Commit-ID: HaMjmxqXPIK
2018-03-08 18:22:45 +09:00
Hiroyuki Ikezoe
7806658a27 Bug 1439485 - Don't try to unthrottle transform animations that don't affect overflow region. r=birtles
MozReview-Commit-ID: AtQPiPnsC3z
2018-02-27 14:46:32 +09:00
Emilio Cobos Álvarez
954d76f2db Bug 1432490: Make nsComputedDOMStyle::GetStyleContext / GetStyleContextNoFlush not take a presShell. r=bz
Everyone calls them with the shell of the current composed document, and this
allows the multi-presShell stuff to just be in UpdateCurrentStyleSources /
DoGetStyleContextNoFlush.

The only reason we need to use OwnerDoc()->GetShell() instead of the composed
doc in GetStyleContext / GetStyleContextNoFlush is Element::GetBindingURL, which
does expect to get the binding URL for stuff outside of the composed doc (and
changing that gave me a useless browser).

That's technically a behavior change on the cases that used to pass nullptr, but
I think all callers are fine with that. I could also just add a special function
for that particular case, it may be worth it.

MozReview-Commit-ID: 2XlnkgdgDCK
2018-02-25 02:23:59 +01:00
Tooru Fujisawa
ec45bb8511 Bug 1414674 - Do not enter the compartment of the target window when calling KeyframeEffect and KeyframeEffectReadOnly constructor via Xray. r=bz,birtles
KeyframeEffect and KeyframeEffectReadOnly constructors can run in the caller
compartment, which is okay because the current compartment is used in the
following places and all of them are safe:

1. GlobalObject::CallerType(), that is ultimately passed to
   nsDocument::IsWebAnimationsEnabled in KeyframeEffectParamsFromUnion,
   to decide whether to copy mIterationComposite/mComposite to
   KeyframeEffectParams.

   GlobalObject::CallerType() can now be different than the target window's one,
   if the caller has the system principal and the target is web content, and
   in that case nsDocument::IsWebAnimationsEnabled there always returns true
   while Web Animations can be disabled on web content.

   honoring the mIterationComposite/mComposite properties is OK, since it just
   changes the animation behavior, and this is disabled by default until
   remaining spec issues are resolved.

2. GlobalObject::Context(), that is ultimately passed to
   KeyframeUtils::GetKeyframesFromObject and used while extracting information
   from passed-in keyframe object, with iterable/iterator protocols.

   Performing that operation in the caller side is okay, since the same thing
   can be done on caller, and the operation doesn't perform any GCThing
   allocation on the target window global.
2018-02-17 17:21:13 +09:00
Tooru Fujisawa
bc0f4e34a3 Backed out changeset c3f16a179c93 (bug 1414674) 2018-02-18 01:24:08 +09:00
Tooru Fujisawa
319f4a707f Bug 1414674 - Do not enter the compartment of the target window when calling KeyframeEffect and KeyframeEffectReadOnly constructor via Xray. r=bz,birtles
KeyframeEffect and KeyframeEffectReadOnly constructors can run in the caller
compartment, which is okay because of the following reasons:

1. The target window global is used for most operation:
     * KeyframeEffectReadOnly::ConstructKeyframeEffect uses the target window
       global instead of current global.
     * KeyframeEffectParamsFromUnion which receives `aGlobal.CallerType()`

   In Xray case, Web Animations API can be disabled on web content
   (currently disabled on beta/release by default), and in that case some API
   won't work even it's triggered from WebExtensions, but it should be fine.

2. GetKeyframesFromObject is executed in the caller's compartment to access
   the passed-in JSObject that is keyframe, with iterable/iterator protocols.
   This operation doesn't perform any GCThing allocation on the target window
   global.
2018-02-17 17:21:13 +09:00
Hiroyuki Ikezoe
58607cd832 Bug 1237454 - Unthrottle transform animations in visibility:hidden element periodically only if the element is scrolled out. r=birtles
In the case where we throttle transform animations in visibility:hidden
element, we just need to unthrottle only if the element is scrolled out since
unlike the scrolled out element, visibility:hidden element keeps invisible
even after the element moved into view.

MozReview-Commit-ID: 7X2SsOLz4Y5
2018-02-09 19:00:19 +09:00
Hiroyuki Ikezoe
af98d2cc14 Bug 1237454 - Throttle animations on visibility:hidden element. r=birtles,boris,emilio
This patch does basically throttle animations on visibility:hidden element
and unthrottle it once the animating element became visible or a child of the
animating element became visible.  But still there are some cases that we don't
throttle such animations perfectly.  For example;

  div.style.visibility = 'hidden'; // the 'div' has no children at this moment
  div.animate(..);
  // The animation is throttled

  div.appendChild(visibleChild);
  // The animation isn't throttled

  visibleChild.style.visibility = 'hidden';
  // Now the animation should be throttled again, but actually it's not.

To throttle this case properly, when the |visibleChild|'s visibility changed
to hidden, we would need to do either

 1) Check all siblings of the |visibleChild| have no visible children

or

 2) The parent element stores visible children count somewhere and decrease it
    and check whether the count is zero

To achieve 1) we need to walk up ancestors and their siblings, actually it's
inefficient.

2) is somewhat similar to what we already do for animating images but it's hard
to reuse it for CSS animations since it does not take into account that
descendants' visibilities.

Another example that this patch does not optimize is the the case where
animating element has children whose visibility is inherited and the element
itself initially visible something like this;

  let child = document.createElement('div'); // child visibility is 'inherit'
  div.appendChild(child);

  div.animate(..); // the 'div' is visible
  // The animation isn't throttled since the animating element is visible

  div.style.visiblily = 'hidden';
  // Now the animation should be throttled, but it's not since this patch does
  // not descend down all descendants to check they are invisible or not when the
  // animating element visibility changed to hidden.

This patch adds a test case for this case introduced with todo_is().

Another test case added in this patch fails if we don't use
nsPlaceholderFrame::GetRealFrameFor() in HasNoVisibleDescendants().

MozReview-Commit-ID: BJwzQvP9Yc4
2018-02-09 10:43:10 +09:00
Hiroyuki Ikezoe
e8baf8bc50 Bug 1419339 - Unthrottle transform animations periodically if there is any IntersectionObservers. r=birtles
MozReview-Commit-ID: CBFQva02HUc
2018-02-07 10:46:15 +09:00
Narcis Beleuzu
48308c4297 Backed out 6 changesets (bug 1237454) for bc failures on /browser_toolbariconcolor_restyles.js. CLOSED TREE
Backed out changeset f8d771835fd2 (bug 1237454)
Backed out changeset 2dbbfc331bdf (bug 1237454)
Backed out changeset c481f409feaa (bug 1237454)
Backed out changeset 0b9872865f0e (bug 1237454)
Backed out changeset 43ca55e7c93b (bug 1237454)
Backed out changeset 027b0c65d944 (bug 1237454)
2018-02-06 11:19:56 +02:00
Hiroyuki Ikezoe
35ab3ac6b8 Bug 1237454 - Throttle animations on visibility:hidden element. r=birtles,boris,emilio
This patch does basically throttle animations on visibility:hidden element
and unthrottle it once the animating element became visible or a child of the
animating element became visible.  But still there are some cases that we don't
throttle such animations perfectly.  For example;

  div.style.visibility = 'hidden'; // the 'div' has no children at this moment
  div.animate(..);
  // The animation is throttled

  div.appendChild(visibleChild);
  // The animation isn't throttled

  visibleChild.style.visibility = 'hidden';
  // Now the animation should be throttled again, but actually it's not.

To throttle this case properly, when the |visibleChild|'s visibility changed
to hidden, we would need to do either

 1) Check all siblings of the |visibleChild| have no visible children

or

 2) The parent element stores visible children count somewhere and decrease it
    and check whether the count is zero

To achieve 1) we need to walk up ancestors and their siblings, actually it's
inefficient.

2) is somewhat similar to what we already do for animating images but it's hard
to reuse it for CSS animations since it does not take into account that
descendants' visibilities.

Another example that this patch does not optimize is the the case where
animating element has children whose visibility is inherited and the element
itself initially visible something like this;

  let child = document.createElement('div'); // child visibility is 'inherit'
  div.appendChild(child);

  div.animate(..); // the 'div' is visible
  // The animation isn't throttled since the animating element is visible

  div.style.visiblily = 'hidden';
  // Now the animation should be throttled, but it's not since this patch does
  // not descend down all descendants to check they are invisible or not when the
  // animating element visibility changed to hidden.

This patch adds a test case for this case introduced with todo_is().

Another test case added in this patch fails if we don't use
nsPlaceholderFrame::GetRealFrameFor() in HasNoVisibleDescendants().

MozReview-Commit-ID: BJwzQvP9Yc4
2018-02-06 08:43:53 +09:00
Cameron McCormack
f2d37b44c3 Bug 1430014 - Part 6: #ifdef out a bit more animation-related code. r=hiro
MozReview-Commit-ID: B9TaVJFak26
2018-02-01 15:04:04 +11:00
Cameron McCormack
34288f7f48 Bug 1430014 - Part 5: Stop building old style system classes when MOZ_OLD_STYLE is not defined. r=xidorn
MozReview-Commit-ID: CIHyPdF7Exl
2018-02-01 15:04:04 +11:00
Cameron McCormack
02c617875f Bug 1430014 - Part 4: #ifdef out unnecessary code when the old style system is not built. r=xidorn
MozReview-Commit-ID: 1FZ9VzjcPzN
2018-02-01 15:04:04 +11:00
cku
afd0b3d14e Bug 1207734 - Part 4.c. Temporarily disable async-transform for individual-transform. r=birtles
Since we do not support async-transform for individual-transform yet.

MozReview-Commit-ID: gfOzHpjOnQ
(grafted from dd508458f70d5473256a4bfe5a2f6bc665bbac9d)
2018-01-05 14:45:05 +08:00
Wei-Cheng Pan
a1a59b0b56 Bug 1425213 - Unthrottle transform animations regardless in overflowable frames or not. r=hiro
Because we don't know whether the transformed position will be visible or not.
2018-01-17 22:44:00 +02:00
Cosmin Sabou
9b89d00a36 Backed out 11 changesets (bug 1207734) for asserting at layout/painting/nsDisplayList.h:2835 while running mda's dom/media/tests/mochitest/test_getUserMedia_peerIdentity.html on a CLOSED TREE
Backed out changeset 4efc37f978d2 (bug 1207734)
Backed out changeset a42b83c0d1b4 (bug 1207734)
Backed out changeset 5b3dfc8f3031 (bug 1207734)
Backed out changeset a4626910ce09 (bug 1207734)
Backed out changeset 8991d0468642 (bug 1207734)
Backed out changeset 2bc1fdf79e03 (bug 1207734)
Backed out changeset 7d5913531948 (bug 1207734)
Backed out changeset c6be6571ad12 (bug 1207734)
Backed out changeset cfa892d6aa84 (bug 1207734)
Backed out changeset 71f635d9a86f (bug 1207734)
Backed out changeset 3f27af783ce1 (bug 1207734)
2018-01-17 18:32:25 +02:00
Cosmin Sabou
ff4300652c Merge mozilla-central to inbound a=merge on a CLOSED TREE 2018-01-17 11:50:40 +02:00
Hiroyuki Ikezoe
6d1a589c88 Bug 1419079 - Don't bail out from CalculateCumulativeChangeHint() in the case of opacity property even if there is a missing keyframe or composite operation is not 'replace'. r=birtles
For opacity property, we only generate nsChangeHint_UpdateUsesOpacity,
nsChangeHint_UpdateOpacityLayer and nsChangeHint_RepaintFrame.  All of them are
included in nsChangeHint_Hints_CanIgnoreIfNotVisible.  So we can throttle
opacity animations on out-of-view elements whatever underlying opacity value is.

MozReview-Commit-ID: FdQJbItAndG
2018-01-17 11:48:20 +09:00
cku
9371badfad Bug 1207734 - Part 4.c. Temporary disable async-transform for individual-transform. r=birtles
Since we do not support async-transform for individual-transform yet.

MozReview-Commit-ID: gfOzHpjOnQ
2018-01-05 14:45:05 +08:00
Brian Birtles
28b2c902bd Bug 1429671 - Make composite member of Keyframe dictionary objects accept null values; r=bz
This patch reflects the following change to the Web Animations spec:

  abf76745b5

MozReview-Commit-ID: A2GD1igUf5f
2018-01-11 16:20:49 +09:00
Brian Birtles
fd5d22a778 Bug 1414000 - Assert that either the pres context is nullptr OR that there are no properties when filling in base styles; r=hiro
The call stack where this assertion would otherwise fail is as follows:

 KeyframeEffectReadOnly::UpdateProperties
   KeyframeEffectReadOnly::DoUpdateProperties
     KeyframeEffectReadOnly::BuildProperties
       KeyframeUtils::GetAnimationPropertiesFromKeyframes
         KeyframeUtils.cpp::GetComputedKeyframeValues
     KeyframeEffectReadOnly::EnsureBaseStyles

In bug 1407898 we made GetComputedKeyframes return an empty list when the pres
context is nullptr so if we get a null pres context in EnsureBaseStyles (which
uses the same method for getting the pres context:
nsContentUtils::GetContextForContent) we know that |aProperties| will be empty.
Also, if |aProperties| is empty we're not going to dereferences |presContext| so
we don't need to assert that it is non-null.

I have not included the crashtest in this patch for the same reason as described
in bug 1407898 comment 6.

MozReview-Commit-ID: 6OZ2yJfRLMV
2017-12-20 17:34:57 +09:00
Brian Birtles
0c6901d581 Bug 1425548 - Update references to Web Animations spec in dom/animation; r=hiro
MozReview-Commit-ID: 1f2Mz0VhnBm
2017-12-15 14:55:08 -06:00
63b6495c6f Bug 1413104 - Drop telemetry probes for layer size; r=botond
MozReview-Commit-ID: FtpTJDC50A8
2017-12-14 21:36:09 +00:00
Hiroyuki Ikezoe
49d07e92ed Bug 1418867 - Pass element or pseudo element to Servo_StyleSet_GetBaseComputedValuesForElement(). r=emilio
MozReview-Commit-ID: Ae3iZ6g3x3c
2017-11-22 11:03:40 +09:00
Hiroyuki Ikezoe
5d5b9b0ec6 Bug 1418867 - Drop pseudo type argument from KeyframeEffectReadOnly::EnsureBaseStyle(). r=birtles
We have the pseudo type in mTarget.

MozReview-Commit-ID: GoXzoavnwpL
2017-11-22 09:56:56 +09:00
Brian Birtles
14ebce261c Bug 1418220 - Drop AnimationUtils::IsCoreAPIEnabled(ForCaller) and use nsContentUtils::AnimationsAPICoreEnabled / nsDocument::IsWebAnimationsEnabled instead; r=hiro
The difference between nsDocument::IsWebAnimationsEnabled and
nsContentUtils::AnimationsAPICoreEnabled is that the former checks the caller
type and treats the preference as set for system callers which is particularly
needed for enabling things like the getProperties() API for DevTools etc.

Generally in API-facing call sites we have a JS context / CallerType and so we
want to distinguish between system callers and non-system callers. However, for
a few internal uses--specifically filling-in missing keyframes--we don't care
about the caller type and always follow the pref setting.

That may or not be quite what we want, but this patch doesn't change that except
for one call site: KeyframeUtils::GetKeyframesFromObject. This patch changes
GetKeyframesFromObject from *not* checking the caller type to checking the
caller type. That seems to be the correct behavior here since this is called
from KeyframeEffectReadOnly::SetKeyframes(JSContext*, JS::Handle<JSObject*>,
ErrorResult&) (i.e. a JS API-facing call site) where we *should* enable the full
API when the caller is chrome code.

MozReview-Commit-ID: FQJBk3zytwd
2017-11-20 14:18:43 +09:00
Jonathan Watt
255f0e0b47 Bug 1417365 - Unified build issues in dom/animation. r=baku 2017-10-26 11:55:28 +01:00