Skip to content

Commit

Permalink
Ensure _localMatMdf is reset to false
Browse files Browse the repository at this point in the history
With efeb109, support for transform effects has been added, which
required introducing another matrix on `TransformElement` to represent
the final transform matrix including the effects. This matrix is denoted
as `localMat`

If there are no transform effects, `localMat` is the same
(referentially) as the existing transform matrix (`mat`). Otherwise,
it's calculated by composing the transform effects and then composing
that with the "old" transform matrix.

Alongside `localMat`, a `_localMatMdf` member is introduced, which
tracks whether the local matrix was modified since its last commit to
the DOM, analogously to `_matMdf`.

Unfortunately, a logic bug introduced by efeb109 meant that, in the
absence of transform effects, `_localMatMdf` was latched to `true`,
i.e. no code path would ever be able to reset it to `false` after it was
once set to `true` (e.g. as a result of the matrix being animated).

This causes a serious performance regression, since all matrices that
once had `_matMdf` set to `true` will keep being updated in the DOM
every frame, causing costly full style recalculations.

Fix by forcing `_matMdf` and `_localMatMdf` to be equivalent in the
case of no transform effects, just as `mat` and `localMat` are
referentially equal. In the case of >0 transform effects, the custom
logic in `renderLocalTransform()` will take over and compute
`_localMatMdf` separately from and based on `_matMdf`.
  • Loading branch information
geomaster committed Oct 31, 2023
1 parent 7615026 commit 5e6164b
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion player/js/elements/helpers/TransformElement.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ TransformElement.prototype = {
}
}
}
if (this.finalTransform._matMdf) {
if (!this.localTransforms || this.finalTransform._matMdf) {
this.finalTransform._localMatMdf = this.finalTransform._matMdf;
}
if (this.finalTransform._opMdf) {
Expand Down

0 comments on commit 5e6164b

Please sign in to comment.