- From: Joe Pea via GitHub <sysbot+gh@w3.org>
- Date: Fri, 27 Dec 2024 08:43:01 +0000
- To: public-fxtf-archive@w3.org
trusktr has just created a new issue for https://github.com/w3c/fxtf-drafts:
== [geometry-1] Steps for `multiplySelf` are inefficient ==
The steps for [multiplySelf](https://drafts.fxtf.org/geometry/#dom-dommatrix-multiplyself) are:
1. Let otherObject be the result of invoking [create a DOMMatrix from the dictionary](https://drafts.fxtf.org/geometry/#create-a-dommatrix-from-the-dictionary) other.
2. The otherObject matrix gets post-multiplied to the current matrix.
3. If [is 2D](https://drafts.fxtf.org/geometry/#matrix-is-2d) of otherObject is false, set is 2D of the current matrix to false.
4. Return the current matrix.
This means that for step 1, if we pass in a DOMMatrix (which is assignable to DOMMatrixInit), we will create a new DOMMatrix from the passed-in DOMMatrix, which is unnecessary overhead.
In practice, that means something like the following for the implementation:
```ts
multiplySelf(other: DOMMatrixInit) {
const otherMat = new DOMMatrix([other.m11, other.m12, ..., other.m44])
// ... perform the multiplication ...
if (!otherMat[is2D]) this[is2D] = false
return this
}
```
(where `is2D` is a `symbol` that I use for the "priate" `is2D` state in JavaScript (`DOMMatrixReadOnly` returns the value from a readonly `get`ter, and `DOMMatrix` adds the `set`ter for it).
As you can see here, creating a `new DOMMatrix` every time we want to multiply is wasteful, and for every frame of an animation this will create a new object that needs to be garbage collected.
Can we change the spec to specify that a new DOMMatrix does not need to be constructed if a DOMMatrix is passed in?
Please view or discuss this issue at https://github.com/w3c/fxtf-drafts/issues/580 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Friday, 27 December 2024 08:43:02 UTC