Teams‎ > ‎Animations Team‎ > ‎Highlights Archive‎ > ‎

June 2021 - New features, stability fixes, Interop fixes and more!

June  2021

Chrome Interactions Highlights

Archives: go/interactions-team-highlights

Chapter I: New features

Composite background-color animation

xidachen@ launched finch study for this feature and this doc summarizes its result. Here are some high-level points:

  • We are seeing more animations being composited.

  • Unfortunately we don’t see improvement in the “PercentDroppedFrame”, which reflects the smoothness of the animations overall. One possible reason is that background-color animation is mostly applied on small buttons and it is not the dominant factor of dropped animation frames.

  • We are seeing memory regression and this is tracked by

Moreover, this feature is now experimental, which means one can enable it by enabling “Experimental Web Platform features” in chrome://flags.

Capability Delegation Spec

mustaq@ finished the draft spec (link) and it is ready for review.

Android 12 Overscroll

flackr@ has finished the initial version of working overscroll.

Chapter II: Stability fixes

Fix privacy leak of visited links

kevers@ fixed a privacy leak issue of visited links. A repro case is shown above. The fix to the issue is:

  • Extract the visited style even if link is unvisited during style resolution.

  • Generate a transition if either the visited or unvisited style changed.

  • animation.effect.getKeyframes reports unvisited style regardless of whether visited.

  • Visually render with the correct style. This is possible since the interpolation code retains a pair of colors to interpolate corresponding to the visited and unvisited style.

Fix a crash in Mac IME fix

flackr@ fixed a crash by performing a null check.

Removed one fake user activation

mustaq@ fixed a fake activation issue as a suspect for a navigation problem.

  • UMA investigation revealed <0.005% page loads could be affected.

  • Tentatively removed the fake user activation notification from JS play() and everything seems good as before!

Chapter III: Interop fixes


xidachen@ kept working on the bug, where chrome propagates overscroll-behavior from the <body> element, while by spec it should be from the <html> element.

  • A detailed doc describing the problem.

  • Break the feature counter into two cases. (CL)

  • Querying UKM table shows that is the major site that have this problem.

Chapter IV: à la carte

Bisecting on Android

skobes@ found that it is quite annoying to bisect on Android, but it is possible, and also that the tool could be improved.

AtomicString for PointerEvent type


flackr@ replaced char* with AtomicString for PointerEvent type. Why?

  • The returned string is passed to PointerEventInit::setPointerType implicitly cast to a WTF::string for the rest of its existence. What’s the problem?

  • First, we take the strlen of the string, which is O(n) operation.

  • Then, we allocate storage space and copy the string constant, which is O(n) time + space.

  • If we instead construct a String from another String, then it just adds a ref to the StringImpl, and that’s O(1). Refer to the screenshot on the left hand side for details.

Now the String is constructed, are we done? Well, not yet, we have to compare two strings.

  • Comparing two arbitrary Strings is O(n), see EqualStringView implementation.

  • But, comparing two AtomicStrings is O(1)! Refer to the screenshot on the right hand side for details.

Chapter V: Bug Updates


Our team kept on top of bugs. We closed almost the same amount of P1 bugs vs opened P1 bugs.

Chrome Interactions Highlights | June 2021