New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 674317 link

Starred by 5 users

Issue metadata

Status: Fixed
Owner:
Closed: Dec 11
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , All
Pri: 2
Type: Task


Sign in to add a comment

Animations work under SPv2.

Project Member Reported by wkorman@chromium.org, Dec 14 2016

Issue description

Creating bug to track details of getting some of the basic test cases under virtual/threaded/animations that fail today working on SPv2. Focusing on:

virtual/threaded/animations/composited-animation-style-update.html

which can be tested locally via:

% ./out/Default/content_shell --expose-internals-for-testing --enable-slimming-paint-v2 --enable-threaded-compositing --disable-composited-antialiasing third_party/WebKit/LayoutTests/virtual/threaded/animations/composited-animation-style-update.html

Comparing with and without SPv2 flag, we never see the composited animation come into being. CompositorPendingAnimations::update() considers the animation, which returns false for hasActiveAnimationsOnCompositor() with SPv2, and true without.

hasActiveAnimationsOnCompositor() is driven by the associated KeyframeEffectReadOnly, which has an internal list of animation ids for that keyframe effect. Those ids are populated when started via KeyframeEffectReadOnly::maybeStartAnimationOnCompositor(), which passes the mutable list of animation ids on to CompositorAnimations::startAnimationOnCompositor().

Via logging we determine that CompositorAnimations::canStartAnimationOnCompositor() returns false in SPv2, due to the target layout object failing this check:

element.layoutObject()->compositingState() == PaintsIntoOwnBacking

This failure is easily explained as we no longer run the legacy compositing logic which is surely where that state is set in SPv1.

Need to look into details of SPv1 logic that produces PaintsIntoOwnBacking state. Not sure whether it's safe to just blindly presume that an animation otherwise deemed appropriate for compositing will end up as such with new PaintArtifactCompositor logic.

It looks like the animation is falling into an alternate code path in CompositorPendingAnimations::update(), since it did not end up in the startedSynchronizedOnCompositor case, where it's tacked onto waitingForStartTime. While we could explore the separate issue of why it isn't eventually started on that path (am guessing due to our discussion earlier today leading to  http://crbug.com/674258 ), I'm sure we want this synchronized start path to still function for performance reasons if possible.
 
LayoutObject::compositingState() defers to the object's paint layer. In this case we have a div that has an animation set on it post-document-load via JS animate(). That div has a layer, but it is not noted as PaintsIntoOwnBacking, of course, per discussion above.
Cc: loyso@chromium.org
Proposal from email: for SPv2, rather than checking compositing state on the object's paint layer, check whether the element has a transform or opacity node on its ObjectPaintProperties that has a direct compositing reason. Ref: http://crrev.com/2571043002.
Project Member

Comment 3 by bugdroid1@chromium.org, Dec 20 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b

commit 2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b
Author: wkorman <wkorman@chromium.org>
Date: Tue Dec 20 01:37:12 2016

Support compositing for active animations in SPv2.

Revise CompositorAnimations::canStartAnimationOnCompositor() to
consider direct compositing reasons rather than layer compositing
state.

BUG= 674317 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2578343002
Cr-Commit-Position: refs/heads/master@{#439657}

[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/LayoutTests/virtual/threaded/animations/composited-animation-style-update.html
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/animation/CompositorAnimationsTest.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/animation/CompositorPendingAnimations.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/platform/graphics/CompositingReasons.cpp
[modify] https://crrev.com/2bf83fd5b59fe18bc2a25e05f29a965a4887dc6b/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp

Project Member

Comment 4 by bugdroid1@chromium.org, Dec 21 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/03fe8f6efab3e8e3cc7833c8a7534d2c633bb308

commit 03fe8f6efab3e8e3cc7833c8a7534d2c633bb308
Author: wkorman <wkorman@chromium.org>
Date: Wed Dec 21 21:17:54 2016

Constrain transform animation direct compositing reason to transforms.

Only affects SPv2 code path. Follow-up to http://crrev.com/2578343002
which was overly broad in considering animation state.

BUG= 674317 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2593833002
Cr-Commit-Position: refs/heads/master@{#440215}

[modify] https://crrev.com/03fe8f6efab3e8e3cc7833c8a7534d2c633bb308/third_party/WebKit/Source/core/layout/compositing/CompositingReasonFinder.cpp
[modify] https://crrev.com/03fe8f6efab3e8e3cc7833c8a7534d2c633bb308/third_party/WebKit/Source/core/layout/compositing/CompositingReasonFinder.h
[modify] https://crrev.com/03fe8f6efab3e8e3cc7833c8a7534d2c633bb308/third_party/WebKit/Source/core/layout/compositing/CompositingReasonFinderTest.cpp
[modify] https://crrev.com/03fe8f6efab3e8e3cc7833c8a7534d2c633bb308/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
[modify] https://crrev.com/03fe8f6efab3e8e3cc7833c8a7534d2c633bb308/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/03fe8f6efab3e8e3cc7833c8a7534d2c633bb308/third_party/WebKit/Source/core/paint/PaintPropertyTreeUpdateTests.cpp

Project Member

Comment 5 by bugdroid1@chromium.org, Dec 22 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/fbbcd30726ccc750fb8434b0992e7a006b106473

commit fbbcd30726ccc750fb8434b0992e7a006b106473
Author: wkorman <wkorman@chromium.org>
Date: Thu Dec 22 01:20:11 2016

Create compositor animations for effect animations in SPv2.

Further work needed to complete starting animation cc-side inclusive
of routing start time back to Blink.

Addition of direct compositing reason to EffectPaintProperyNode in this change
is lifted from http://crrev.com/2581843002.

BUG= 674317 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2596623002
Cr-Commit-Position: refs/heads/master@{#440295}

[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/animation/CompositorAnimationsTest.cpp
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/layout/compositing/CompositingReasonFinder.cpp
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/layout/compositing/CompositingReasonFinder.h
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/layout/compositing/CompositingReasonFinderTest.cpp
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/core/paint/PaintPropertyTreeUpdateTests.cpp
[modify] https://crrev.com/fbbcd30726ccc750fb8434b0992e7a006b106473/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h

Note re: next work item: CompositorAnimations::attachCompositedLayers() never ends up calling CompositorAnimationPlayer::attachElement() due to early-out requiring existence of LayoutObject -> PaintLayer -> CompositedLayerMapping which is not SPv2 compatible.
Cc: wangxianzhu@chromium.org
Rough patch set plan to allow for smaller incremental changes:

1. generate and store compositor element ids on transform/effect paint property nodes when there is an animation present for them
2. update PaintArtifactCompositor to generate maps from compositor element id to cc property tree nodes and set them in cc without cc yet making use of them
3. update cc PropertyTreeBuilder to generate those same maps for SPv1 but not yet make use of them
4. update cc to actually use the maps from (2) and (3), basically, the rest of  http://crbug.com/674258#c1 
5. order TBD, but somewhere we need to skip the CLM check noted in c#6 above when SPv2 is enabled.

We reserve the right to change the patch set plan as new information comes to light.
Project Member

Comment 8 by bugdroid1@chromium.org, Jan 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8

commit 8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8
Author: wkorman <wkorman@chromium.org>
Date: Tue Jan 03 23:55:33 2017

Store compositor element id in paint properties for animated objects.

BUG= 674258 , 674317 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2608543002
Cr-Commit-Position: refs/heads/master@{#441255}

[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.h
[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/core/paint/PaintPropertyTreeUpdateTests.cpp
[add] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/core/paint/test_data/opacity-animation.html
[add] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/core/paint/test_data/transform-animation.html
[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.cpp
[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h
[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/platform/graphics/paint/TransformPaintPropertyNode.cpp
[modify] https://crrev.com/8a4ccdb5a2bef0e128a64cea83fa9de3daf785a8/third_party/WebKit/Source/platform/graphics/paint/TransformPaintPropertyNode.h

Brief update on  http://crbug.com/674317#c7  have done #1, 2, and 4, and am now working on #3 and 5, with whatever discoveries ensue. Have been submitting changes against  http://crbug.com/674258  mostly.
A few changes I am planning to prepare per discussion today:

1a. Add compositor element id field to ScrollPaintPropertyNode, similar to what we did in http://crrev.com/2608543002. These nodes are created/updated from a few different places, so I am presuming there will be an apparent owning layout object (from the ScrollableArea) from each callsite.

1b. ScrollPaintPropertyNode has an associated TransformPaintPropertyNode for the scroll offset. This may also need the compositor element id set on it. Maybe won't do this until we determine it is in fact needed unless someone has feedback. I think this also has multiple update callsites.

2. Call SetElementId on cc::Layer when we create it in PaintArtifactCompositor, pulling the element id from any of the involved scroll/effect/transform paint property nodes. For loyso@ awareness, a comment from ajuma@: "...ideally we'd remove [the fact that animation logic around registering elements depends on Layers] eventually so that property tree nodes can stand on their own (without assuming an owning layer)".
For anyone following along, work in flight, referencing comment and items above:

c#10: 1a = http://crrev.com/2638333007 - Add compositor element id for scroll nodes in SPv2
c#10: 1b = postponing for now until we see need
c#10: 2  = http://crrev.com/2637383006 - Set layer element id when building layers in PaintArtifactCompositor
c#7 : 2  = http://crrev.com/2642183003 - Populate cc element id maps for transform/effect nodes
c#7 : 5  = http://crrev.com/2643283003 - For SPv2, attach element to compositor animation player without a CLM

Note that in c#9 I said I had done #2 but I actually meant #3.
Project Member

Comment 12 by bugdroid1@chromium.org, Jan 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/cfdf2d92414d581e8fdc5fdc04d825c668113fcc

commit cfdf2d92414d581e8fdc5fdc04d825c668113fcc
Author: wkorman <wkorman@chromium.org>
Date: Sat Jan 21 01:26:05 2017

Add compositor element id for scroll nodes in SPv2.

- Add compositor element id field to ScrollPaintPropertyNode.
- Generate compositor element id for ScrollPaintPropertyNodes when
  created/updated.
- Copy element id into cc::ScrollNode when generating cc property trees.

BUG= 674317 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2638333007
Cr-Commit-Position: refs/heads/master@{#445240}

[modify] https://crrev.com/cfdf2d92414d581e8fdc5fdc04d825c668113fcc/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
[modify] https://crrev.com/cfdf2d92414d581e8fdc5fdc04d825c668113fcc/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/cfdf2d92414d581e8fdc5fdc04d825c668113fcc/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
[modify] https://crrev.com/cfdf2d92414d581e8fdc5fdc04d825c668113fcc/third_party/WebKit/Source/platform/graphics/compositing/PropertyTreeManager.cpp
[modify] https://crrev.com/cfdf2d92414d581e8fdc5fdc04d825c668113fcc/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.cpp
[modify] https://crrev.com/cfdf2d92414d581e8fdc5fdc04d825c668113fcc/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h

Project Member

Comment 14 by bugdroid1@chromium.org, Jan 23 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/653f787c53cd2f9104e85dc61238d9ef25e9d347

commit 653f787c53cd2f9104e85dc61238d9ef25e9d347
Author: wkorman <wkorman@chromium.org>
Date: Mon Jan 23 21:41:33 2017

For SPv2, attach element to compositor animation player without a CLM.

BUG= 674317 

Review-Url: https://codereview.chromium.org/2643283003
Cr-Commit-Position: refs/heads/master@{#445494}

[modify] https://crrev.com/653f787c53cd2f9104e85dc61238d9ef25e9d347/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp

Brief update: a simple composited text translate animation starts and runs in SPv2 now, but we hit a DCHECK failure around differing compositor element ids in the scroll vs transform nodes when the animation finishes and text de-composites, and visual behavior following is incorrect. Investigating.
Blockedon: 684842
SPv2 currently passes 50% (21 / 42) of the tests under virtual/threaded. Of the failures, 16 are timeouts and 5 are text failures.

5 look obviously scroll related (we know there is scrolling work still to be done, see for example  http://crbug.com/683774 ).

Some of the failures look like there's an issue with cancelling animations.

Test failures below:

Regressions: Unexpected text-only failures (5)
  virtual/threaded/animations/composited-filter-webkit-filter.html [ Failure ]
  virtual/threaded/animations/compositor-independent-transform-cancel.html [ Failure ]
  virtual/threaded/fast/compositorworker/basic-plumbing-main-to-worker.html [ Failure ]
  virtual/threaded/fast/compositorworker/basic-plumbing-worker-to-main.html [ Failure ]
  virtual/threaded/fast/scroll-behavior/smooth-scroll/fixed-background-in-iframe.html [ Failure ]

Regressions: Unexpected timeouts (16)
  virtual/threaded/animations/KeyframeEffectReadOnly-composited-animation.html [ Timeout ]
  virtual/threaded/animations/composited-animations-rotate-zero-degrees.html [ Timeout ]
  virtual/threaded/animations/composited-animations-simple.html [ Timeout ]
  virtual/threaded/animations/composited-animations-timing-function.html [ Timeout ]
  virtual/threaded/animations/composited-animations-translate-rotate-scale.html [ Timeout ]
  virtual/threaded/animations/element-animate-positive-delay.html [ Timeout ]
  virtual/threaded/animations/img-element-transform.html [ Timeout ]
  virtual/threaded/animations/inline-block-transform.html [ Timeout ]
  virtual/threaded/animations/transitions-retarget.html [ Timeout ]
  virtual/threaded/fast/compositorworker/compositor-attribute-change-worker.html [ Timeout ]
  virtual/threaded/fast/compositorworker/compositor-proxy-disconnect-worker.html [ Timeout ]
  virtual/threaded/fast/compositorworker/visual-update.html [ Timeout ]
  virtual/threaded/fast/scroll-behavior/first-scroll-runs-on-compositor.html [ Timeout ]
  virtual/threaded/fast/scroll-behavior/smooth-scroll/main-thread-scrolling-reason-added.html [ Timeout ]
  virtual/threaded/fast/scroll-behavior/smooth-scroll/main-thread-scrolling-reason-correctness.html [ Timeout ]
  virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted.html [ Timeout ]

Blockedon: 686897
Project Member

Comment 19 by bugdroid1@chromium.org, Jan 31 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/42bd2b1a523f7c73cdade1e528703e3a1e9b768f

commit 42bd2b1a523f7c73cdade1e528703e3a1e9b768f
Author: wkorman <wkorman@chromium.org>
Date: Tue Jan 31 03:57:01 2017

Enable half of virtual/threaded tests for SPv2.

BUG= 674317 , 686897 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2667743002
Cr-Commit-Position: refs/heads/master@{#447182}

[modify] https://crrev.com/42bd2b1a523f7c73cdade1e528703e3a1e9b768f/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2

Brief update, currently investigating virtual/threaded/animations/composited-animations-simple.html as a test timeout failure likely representative of a larger batch. Instrumenting composited-animation-test.js shows that this.waitForCompositor().then(...) is hanging indefinitely. The adventure continues!
Partial reduction of the more complex aforementioned layout test attached. Suspect animation is stuck in pending state for some reason.
composited-animation-simple.html
1.9 KB View Download
The call to internals.pauseAnimations(0) in composited-animation-test.js causes hang in SPv2. For some reason pausing animations doesn't produce hang in SPv1. Need to look further.

Commenting out pauseAnimations() call leads to a subsequent failure for that test in SPv2 with what looks like a missing transform node for the various transform animation test cases such as scale(). Opacity animation appears to be fine, however.
In SPv1:

0. Internals::pauseAnimations is called by test page script and ends up calling AnimationPlayer::PauseAnimation
1. Thus animation starts out ticking in PAUSED run state with AnimationPlayer.needs_to_start_animations = true
2. AnimationPlayer::StartAnimations considers the animation, does not add it to animations_waiting_for_target, and sets AnimationPlayer.needs_to_start_animations = false
3. animation transitions to WAITING_FOR_TARGET_AVAILABILITY in some manner that also sets AnimationPlayer.needs_to_start_animations = true again
4. AnimationPlayer::StartAnimations executes and sets the animation to STARTING

In SPv2 (0 - 2) happen, but we never see (3/4) and so we tick forever with AnimationPlayer.needs_to_start_animations = false and never call AnimationPlayer::StartAnimations again (and if we did, presumably animation state is still not WAITING_FOR_TARGET_AVAILABILITY so we'd still not actually start it).

More clarity:
- there are two animations: the one intended to vary with the test case, which is paused (animation_id=1, player_id=4); and a second one associated with the 'error' span, created by waitForCompositor(), and which is not paused (animation_id=2, player_id=5).
- the ready-promise that's hanging is blocked on the latter.
- for that one, in both SPv1 and SPv2 we construct the animation player and call AnimationPlayer::AnimationAdded and AnimationPlayer::UpdateTickingState. However has_element_in_any_list is always false in SPv2, thus we never add the player to the ticking players via AnimationHost::AddToTicking. Since it's not in the vector of ticking players we never start its animation.
- this difference is explained by: in SPv1, between construction of that animation player and the call to AnimationPlayer::AnimationAdded on it, we see a call to ElementAnimations::InitAffectedElementTypes which executes set_has_element_in_active_list=1.

So, need to figure out (something along the lines of) why we never seem to attach the composited layer for element id=5 in SPv2.

Stack trace excerpt for SPv1:

#2 0x7f73c455a8d0 cc::ElementAnimations::InitAffectedElementTypes()
#3 0x7f73c4532f00 cc::AnimationHost::RegisterPlayerForElement()
#4 0x7f73c45448c7 cc::AnimationPlayer::RegisterPlayer()
#5 0x7f73c4544a95 cc::AnimationPlayer::AttachElement()
#6 0x7f73cd021757 blink::CompositorAnimationPlayer::attachElement()
#7 0x7f73c9a81d84 blink::CompositorAnimations::attachCompositedLayers()
#8 0x7f73c9ab9181 blink::KeyframeEffectReadOnly::attachCompositedLayers()
#9 0x7f73c99eeb01 blink::Animation::attachCompositedLayers()
#10 0x7f73c99eb68d blink::Animation::createCompositorPlayer()
#11 0x7f73c99eb2c3 blink::Animation::preCommit()
#12 0x7f73c9a8d273 blink::CompositorPendingAnimations::update()
#13 0x7f73c9a95661 blink::DocumentAnimations::updateAnimations()
#14 0x7f73ca8ff4d3 blink::PaintLayerCompositor::updateIfNeededRecursiveInternal()

- N.B. in SPv2 the element id for error span is 4, rather than 5.
- it appears that we're never adding a layer with that element id in PaintArtifactCompositor, thus we fail animation_host_->mutator_host_client()->IsElementInList(...) check in ElementAnimations::InitAffectedElementTypes.

I haven't figured out why we're running sans-layer yet.
Checkpointing a simplified test case that fails in SPv2 and passes in SPv1, representative of a batch of pause-animation tests as explored above. Run locally via:

% ./out/Default/content_shell --run-layout-test --expose-internals-for-testing --enable-threaded-compositing [--enable-slimming-paint-v2] composited-animation-ready-hang.html

composited-animation-ready-hang.html
411 bytes View Download
Filed  http://crbug.com/692310  to track work around making sure ready promises eventually resolve for animations in SPv2. What we see in this case is that the 'error' span, which is animated to effect (I believe) a sort of "final single tick flush" of the composited animation subsystem, paints no content = has no paint chunk = has no layer = thus no layer exists with an element id, and the composited animation is never started.

That bug, even if addressed (proposal noted in the bug is to not bother making animations that paint no content composited, and then the animation should follow normal non-composited animation subsystem readiness and promise resolution), would not fix what we see here since we still want, for testing purposes, a way to flush the composited animation subsystem.

An interim fix could be to add some content such as a colored background to the error span. A more proper fix would be to add an internal testing method that does whatever motivated the sort-of-fake animate() call on the error span.
Project Member

Comment 28 by bugdroid1@chromium.org, Feb 15 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5cfa87ff259fb01681ec6f509f1bad1d0702fa75

commit 5cfa87ff259fb01681ec6f509f1bad1d0702fa75
Author: wkorman <wkorman@chromium.org>
Date: Wed Feb 15 20:20:51 2017

Enable most of virtual/threaded/transitions for SPv2.

BUG= 674317 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2691933006
Cr-Commit-Position: refs/heads/master@{#450787}

[modify] https://crrev.com/5cfa87ff259fb01681ec6f509f1bad1d0702fa75/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2

Re #27 and the use of animation ready promises in tests:
If we had a test helper like internals.waitForCompositorFrame() that would be absolutely ideal and would bypass the need to create dummy elements with paint content.
Project Member

Comment 30 by bugdroid1@chromium.org, Mar 15 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/391cd0aa0d814f9f35bcd5a29df7ba91200e5d4f

commit 391cd0aa0d814f9f35bcd5a29df7ba91200e5d4f
Author: wkorman <wkorman@chromium.org>
Date: Wed Mar 15 09:25:33 2017

Enable more tests now passing under SPv2.

- stop skipping animations/ and transitions/ as most of those
  directories are now passing.
- five scroll-behavior tests that failed with
  --enable-threaded-compositing previously are now passing.
- perhaps unrelated to animation/scrolling specific work, but
  two compositing/ tests are now passing.

BUG= 666986 , 674317 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2743373004
Cr-Commit-Position: refs/heads/master@{#457041}

[modify] https://crrev.com/391cd0aa0d814f9f35bcd5a29df7ba91200e5d4f/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2

Blockedon: 702350
Blockedon: 702353
Blockedon: 702365
Blockedon: 702370
Blockedon: 702379
Project Member

Comment 36 by bugdroid1@chromium.org, Mar 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4b27b9c50ff50212f502eccdba7179650c1cd9db

commit 4b27b9c50ff50212f502eccdba7179650c1cd9db
Author: wkorman <wkorman@chromium.org>
Date: Tue Mar 21 02:14:18 2017

Assign more granular bugs to remaining SPv2 animation test failures.

BUG= 674317 

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2758203003
Cr-Commit-Position: refs/heads/master@{#458280}

[modify] https://crrev.com/4b27b9c50ff50212f502eccdba7179650c1cd9db/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2

Labels: -Type-Bug Type-Task
Cc: e...@chromium.org skobes@chromium.org rbyers@chromium.org dtapu...@chromium.org aelias@chromium.org miletus@chromium.org rjkroege@chromium.org wkorman@chromium.org lfg@chromium.org enne@chromium.org vollick@chromium.org
 Issue 666986  has been merged into this issue.
Summary: Animations work under SPv2. (was: virtual/threaded/animations basic composited animation test cases function in SPv2.)
Blockedon: 700176
Blockedon: 709137
Cc: -wkorman@chromium.org
Owner: chrishtr@chromium.org
Owner: ----
Status: Available (was: Started)
Project Member

Comment 44 by sheriffbot@chromium.org, Dec 7

Labels: Hotlist-Recharge-Cold
Status: Untriaged (was: Available)
This issue has been Available for over a year. If it's no longer important or seems unlikely to be fixed, please consider closing it out. If it is important, please re-triage the issue.

Sorry for the inconvenience if the bug really should have been left as Available.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Owner: wangxianzhu@chromium.org
Status: Assigned (was: Untriaged)
I don't think there will be animation differences between SPV2 (now called CompositeAfterPaint) and BlinkGenPropertyTrees. I think this can be merged into https://crbug.com/836897.
Will examine the failure entries in the FlagExpectations/enable-blink-features=CompositeAfterPaint, and merge into bug 836897 if there is no CAP-specific failures.
The following two failures are CAP-specific:

 crbug.com/702350  virtual/threaded/transitions/opacity-transform-transitions-inside-iframe.html [ Timeout ]
 crbug.com/702353  virtual/threaded/transitions/transition-end-event-destroy-iframe.html [ Timeout ]

Given  bug 702350  has been fixed, I think both of the failures are because of  bug 702353 .

Status: Fixed (was: Assigned)
All blocking bugs have been fixed.

Sign in to add a comment