Closed Bug 1842773 Opened 10 months ago Closed 3 months ago

Implement Resizable and growable ArrayBuffers

Categories

(Core :: JavaScript Engine, enhancement, P1)

enhancement

Tracking

()

RESOLVED FIXED
124 Branch
Tracking Status
firefox117 --- wontfix
firefox124 --- fixed

People

(Reporter: anba, Assigned: anba)

References

(Blocks 1 open bug, )

Details

(Keywords: dev-doc-complete)

Attachments

(36 files)

48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review

The rendered proposal text has been pulled from https://tc39.es/proposal-resizablearraybuffer/. https://arai-a.github.io/ecma262-compare/?pr=3116 is currently the best option to see the changes.

Thanks for picking this up :)

Severity: -- → S3
Priority: -- → P1

There's intentionally only a single shell option which controls both options.
This makes testing easier and the test262 tests are also using a single
feature flag for resizable ArrayBuffers and growable SharedArrayBuffers.

Disallow resizable ArrayBuffers for:

  • asm.js because it's not designed for resizable buffers.
  • DOM bindings because mozilla::dom::TypedArray caches the TypedArrays's length.
  • Structured cloning because I haven't yet checked how structured cloning should
    work when resizable ArrayBuffers are used.

Depends on D183317

Change ArrayBufferObject into an abstract base class for the two new
classes FixedLengthArrayBufferObject and ResizableArrayBufferObject.

We need different classes, because resizable ArrayBuffers have slightly different
semantics and also need another reserved slot. Adding another reserved slot to
ArrayBufferObject changes the allocation kind from AllocKind::ARRAYBUFFER4
to AllocKind::ARRAYBUFFER8, which seems unfortunate for the common case of
non-resizable ArrayBuffers.

Depends on D183318

Resizable ArrayBuffers need an additional reserved slot to store the maximum
byte length. Similar to ArrayBufferObject::BYTE_LENGTH_SLOT, this slot is set
to zero when the buffer is detached.

Depends on D183319

Getters for maxByteLength or resizable simply read the corresponding slots.

Depends on D183320

In preparation for actually enabling the ArrayBuffer constructor to create
resizable ArrayBuffers, we need additional functions to pass through the
correct JSClass and adjust the memory reporting to use the correct number of
associated bytes.

Depends on D183321

Update the ArrayBuffer constructor function to create resizable ArrayBuffers.
DataViews and TypedArrays don't yet support resizable ArrayBuffers, so they
throw when a resizable ArrayBuffer is used as the input.

Depends on D183322

Resizing simply adjusts the byte-length slot and sets the memory to
zero if the array is shrunk.

Depends on D183323

Similar to part 3, add separate classes for fixed-length and resizable
DataView objects.

Depends on D183325

DataViews which are baked by a resizable ArrayBuffer can get out-of-bounds when
the ArrayBuffer is shrunk. It can later get again in-bounds when the ArrayBuffer
is grown. That means it's no longer possible to directly read the byte-length
and byte-offset from the reserved slots. Instead all accesses need to validate
the ArrayBufferView is still in-bounds. mozilla::Maybe is used to to represent
in-bound and out-of-bounds results.

Depends on D183326

Similar to part 3, add separate classes for fixed-length and resizable
TypedArray objects.

Depends on D183329

It's easy to add support for resizable typed arrays to branchIfClassIsNotTypedArray,
because the classes are in contiguous memory.

MacroAssembler::typedArrayElementSize is a bit more difficult, at least when
trying to avoid duplicating the detection for both fixed length and resizable
typed array classes.

Depends on D183330

Replace TypedArrayObject with FixedLengthTypedArrayObject for part 18, when
TypedArrayObject::length() gets changed to handle out-of-bounds.

Depends on D183331

Disabled until support gets added in a later patch in this stack.

Depends on D183332

Update all accesses to handle possible out-of-bounds. In some cases the TypedArray
is guaranteed to be a FixedLengthTypedArrayObject, which ensures the accesses are
always in-bounds.

Depends on D183333

Part 14 only disallowed attaching resizable typed arrays in CacheIR, but we
still need to guard the object is also a fixed-length typed array at runtime.

Depends on D183334

Update the step comments and reload the TypedArray length before filling the
TypedArray per the resizable ArrayBuffer proposal.

Depends on D183335

Throw a TypeError for out-of-bounds, but keep returning zero for detached buffers
to match the inlined JIT code.

Depends on D183336

Simply calls PossiblyWrappedTypedArrayLength which throws an error for
out-of-bounds TypedArrays.

Depends on D183338

Part 21 changed the TypedArrayLength to throw for out-of-bounds typed arrays,
but in a handful of cases we actually need to read the typed array length
without throwing an error for out-of-bounds.

Add a separate intrinsic for these cases and update the relevant self-hosted
functions to call TypedArrayLengthZeroOnOutOfBounds.

Depends on D183339

The ArrayBuffer.prototype.slice update for resizable array buffers was
still missing.

Depends on D183342

Part 17 disabled Atomics for resizable buffers. Remove this restriction again.

Inlining Atomics functions for resizable buffers isn't affected by this change.

Depends on D183344

This is an initial implementation of the resizable ArrayBuffers proposal. The rendered spec is no longer available at https://tc39.es/proposal-resizablearraybuffer/, instead https://arai-a.github.io/ecma262-compare/?pr=3116 is probably right now the best option to view the changes. This is still missing SpiderMonkey-specific tests, but before starting to write tests I want to make sure the proposed implementation is actually acceptable.

Flags: needinfo?(sphink)
Flags: needinfo?(jdemooij)

(In reply to André Bargull [:anba] from comment #37)

This is an initial implementation of the resizable ArrayBuffers proposal. The rendered spec is no longer available at https://tc39.es/proposal-resizablearraybuffer/, instead https://arai-a.github.io/ecma262-compare/?pr=3116 is probably right now the best option to view the changes. This is still missing SpiderMonkey-specific tests, but before starting to write tests I want to make sure the proposed implementation is actually acceptable.

I left a bunch of comments on various phabricator revisions, which you probably won't see because it says it won't send out notifications for them since none of them are marked for review yet. I'm not actually sure how to see my comments without looking at each one in turn.

But to summarize, I think the approach is good. Most of my comments were in https://phabricator.services.mozilla.com/D183330. I'd like to hash out the C++ type hierarchy, because it's a mess before your patches and your patches multiply the stuff that's there.

Also, although I'm ok with allocating the max byte length up front, I'm worried about writing to the unused portion (for zeroing). It's pretty easy to imagine someone creating a whole bunch of max-1GB ABs with small initial sizes and then never resizing them, which would generate a lot of pressure (on the TLB, on paging space, etc.) It's certainly safer, but I'm worried that it won't fly. (It would also be nice to rely on demand-zeroed pages from the OS, but that's an optimization of much lesser concern.)

Flags: needinfo?(sphink)
Keywords: dev-doc-needed

Sorry for the delay. These patches look good overall and the approach makes sense to me.

What's the situation for code outside of SpiderMonkey? Do we need to audit that or add support for resizable buffers?

Flags: needinfo?(jdemooij)

(In reply to Steve Fink [:sfink] [:s:] from comment #38)

I left a bunch of comments on various phabricator revisions, which you probably won't see because it says it won't send out notifications for them since none of them are marked for review yet. I'm not actually sure how to see my comments without looking at each one in turn.

Thanks! I'll go through the individual commits.

But to summarize, I think the approach is good. Most of my comments were in https://phabricator.services.mozilla.com/D183330. I'd like to hash out the C++ type hierarchy, because it's a mess before your patches and your patches multiply the stuff that's there.

I'll respond there.

Also, although I'm ok with allocating the max byte length up front, I'm worried about writing to the unused portion (for zeroing). It's pretty easy to imagine someone creating a whole bunch of max-1GB ABs with small initial sizes and then never resizing them, which would generate a lot of pressure (on the TLB, on paging space, etc.) It's certainly safer, but I'm worried that it won't fly. (It would also be nice to rely on demand-zeroed pages from the OS, but that's an optimization of much lesser concern.)

We use calloc when creating zeroed buffers, which should be fast when using system allocators (likely implemented using mmap(MAP_ANONYMOUS)), but I don't know if jemalloc's calloc uses the same kind of optimisations which are present in system allocators. If jemalloc's calloc touches every byte on the initial allocation, that's bad for the reasons outlined by you.

(In reply to Jan de Mooij [:jandem] from comment #39)

What's the situation for code outside of SpiderMonkey? Do we need to audit that or add support for resizable buffers?

The current patches are zeroing length (and byteOffset) output-parameters when an ArrayBufferView is out-of-bounds, so existing callers see them as zero-size views, which should be safe. If user-code can be executed to possibly resize the buffer between reading and using the length, existing code should (hopefully) already handle this case, because it's similar to detaching a buffer. mozilla::dom::TypedArray will require changes, so https://phabricator.services.mozilla.com/D183318 for now rejects creating mozilla::dom::TypedArray from resizable TypedArrays. That also means most DOM code won't currently work when resizable TypedArrays are used.

Attachment #9343392 - Attachment description: WIP: Bug 1842773 - Part 1: Add prefs for resizable ArrayBuffers and growable SharedArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 1: Add prefs for resizable ArrayBuffers and growable SharedArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343394 - Attachment description: WIP: Bug 1842773 - Part 3: Add {FixedLength,Resizable}ArrayBufferObject classes. r=#spidermonkey-reviewers! → Bug 1842773 - Part 3: Add {FixedLength,Resizable}ArrayBufferObject classes. r=#spidermonkey-reviewers!
Attachment #9343393 - Attachment description: WIP: Bug 1842773 - Part 2: Add "resizable" flag to ArrayBuffer objects. r=#spidermonkey-reviewers! → Bug 1842773 - Part 2: Add "resizable" flag to ArrayBuffer objects. r=#spidermonkey-reviewers!
Attachment #9343395 - Attachment description: WIP: Bug 1842773 - Part 4: Add ResizableArrayBufferObject::MAX_BYTE_LENGTH_SLOT. r=#spidermonkey-reviewers! → Bug 1842773 - Part 4: Add ResizableArrayBufferObject::MAX_BYTE_LENGTH_SLOT. r=#spidermonkey-reviewers!
Attachment #9343396 - Attachment description: WIP: Bug 1842773 - Part 5: Add ArrayBuffer.prototype.{maxByteLength,resizable} getters. r=#spidermonkey-reviewers! → Bug 1842773 - Part 5: Add ArrayBuffer.prototype.{maxByteLength,resizable} getters. r=#spidermonkey-reviewers!
Attachment #9343397 - Attachment description: WIP: Bug 1842773 - Part 6: Add support to create resizable ArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 6: Add support to create resizable ArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343398 - Attachment description: WIP: Bug 1842773 - Part 7: Support constructing resizable ArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 7: Support constructing resizable ArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343399 - Attachment description: WIP: Bug 1842773 - Part 8: Implement ArrayBuffer.prototype.resize method. r=#spidermonkey-reviewers! → Bug 1842773 - Part 8: Implement ArrayBuffer.prototype.resize method. r=#spidermonkey-reviewers!
Attachment #9343400 - Attachment description: WIP: Bug 1842773 - Part 9: Add support to preserve resizability to ArrayBuffer.prototype.transfer. r=#spidermonkey-reviewers! → Bug 1842773 - Part 9: Add support to preserve resizability to ArrayBuffer.prototype.transfer. r=#spidermonkey-reviewers!
Attachment #9343401 - Attachment description: WIP: Bug 1842773 - Part 10: Add {FixedLength,Resizable}DataViewObject classes. r=#spidermonkey-reviewers! → Bug 1842773 - Part 10: Add {FixedLength,Resizable}DataViewObject classes. r=#spidermonkey-reviewers!
Attachment #9343402 - Attachment description: WIP: Bug 1842773 - Part 11: Make DataView byteOffset and byteLength accessors aware of resizable buffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 11: Make DataView byteOffset and byteLength accessors aware of resizable buffers. r=#spidermonkey-reviewers!
Attachment #9343403 - Attachment description: WIP: Bug 1842773 - Part 12: Allow constructing DataViews with resizable ArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 12: Allow constructing DataViews with resizable ArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343404 - Attachment description: WIP: Bug 1842773 - Part 13: Remove TypedArrayObject::{length,byteLength}Value. r=#spidermonkey-reviewers! → Bug 1842773 - Part 13: Remove TypedArrayObject::{length,byteLength}Value. r=#spidermonkey-reviewers!
Attachment #9343406 - Attachment description: WIP: Bug 1842773 - Part 15: Support resizable TypedArrays in MacroAssembler. r=#spidermonkey-reviewers! → Bug 1842773 - Part 15: Support resizable TypedArrays in MacroAssembler. r=#spidermonkey-reviewers!
Attachment #9343405 - Attachment description: WIP: Bug 1842773 - Part 14: Add {FixedLength,Resizable}TypedArrayObject classes. r=#spidermonkey-reviewers! → Bug 1842773 - Part 14: Add {FixedLength,Resizable}TypedArrayObject classes. r=#spidermonkey-reviewers!
Attachment #9343407 - Attachment description: WIP: Bug 1842773 - Part 16: Replace TypedArrayObject with FixedLengthTypedArrayObject in the JITs. r=#spidermonkey-reviewers! → Bug 1842773 - Part 16: Replace TypedArrayObject with FixedLengthTypedArrayObject in the JITs. r=#spidermonkey-reviewers!
Attachment #9343408 - Attachment description: WIP: Bug 1842773 - Part 17: Disable Atomics for resizable buffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 17: Disable Atomics for resizable buffers. r=#spidermonkey-reviewers!
Attachment #9343409 - Attachment description: WIP: Bug 1842773 - Part 18: Update TypedArray length, byteLength, and byteOffset accesses. r=#spidermonkey-reviewers! → Bug 1842773 - Part 18: Update TypedArray length, byteLength, and byteOffset accesses. r=#spidermonkey-reviewers!
Attachment #9343410 - Attachment description: WIP: Bug 1842773 - Part 19: Add guard instruction for fixed-length typed arrays. r=#spidermonkey-reviewers! → Bug 1842773 - Part 19: Add guard instruction for fixed-length typed arrays. r=#spidermonkey-reviewers!
Attachment #9343411 - Attachment description: WIP: Bug 1842773 - Part 20: Update TypedArrayFill for resizable buffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 20: Update TypedArrayFill for resizable buffers. r=#spidermonkey-reviewers!
Attachment #9343413 - Attachment description: WIP: Bug 1842773 - Part 21: Throw for out-of-bounds in (PossiblyWrapped)TypedArrayLength intrinsics. r=#spidermonkey-reviewers! → Bug 1842773 - Part 21: Throw for out-of-bounds in (PossiblyWrapped)TypedArrayLength intrinsics. r=#spidermonkey-reviewers!
Attachment #9343414 - Attachment description: WIP: Bug 1842773 - Part 22: Validate length is in-bounds for TypedArray iterator methods. r=#spidermonkey-reviewers! → Bug 1842773 - Part 22: Validate length is in-bounds for TypedArray iterator methods. r=#spidermonkey-reviewers!
Attachment #9343415 - Attachment description: WIP: Bug 1842773 - Part 23: Add TypedArrayLengthZeroOnOutOfBounds. r=#spidermonkey-reviewers! → Bug 1842773 - Part 23: Add TypedArrayLengthZeroOnOutOfBounds. r=#spidermonkey-reviewers!
Attachment #9343416 - Attachment description: WIP: Bug 1842773 - Part 24: Implement TypedArray.prototype.subarray changes. r=#spidermonkey-reviewers! → Bug 1842773 - Part 24: Implement TypedArray.prototype.subarray changes. r=#spidermonkey-reviewers!
Attachment #9343417 - Attachment description: WIP: Bug 1842773 - Part 25: Implement TypedArray.prototype.toLocaleString changes. r=#spidermonkey-reviewers! → Bug 1842773 - Part 25: Implement TypedArray.prototype.toLocaleString changes. r=#spidermonkey-reviewers!
Attachment #9343418 - Attachment description: WIP: Bug 1842773 - Part 26: Update ArrayBuffer.prototype.slice for resizable buffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 26: Update ArrayBuffer.prototype.slice for resizable buffers. r=#spidermonkey-reviewers!
Attachment #9343419 - Attachment description: WIP: Bug 1842773 - Part 27: Allow constructing TypedArrays with resizable ArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 27: Allow constructing TypedArrays with resizable ArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343420 - Attachment description: WIP: Bug 1842773 - Part 28: Enable Atomics with resizable buffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 28: Enable Atomics with resizable buffers. r=#spidermonkey-reviewers!
Attachment #9343421 - Attachment description: WIP: Bug 1842773 - Part 29: Add {FixedLength,Growable}SharedArrayBufferObject classes. r=#spidermonkey-reviewers! → Bug 1842773 - Part 29: Add {FixedLength,Growable}SharedArrayBufferObject classes. r=#spidermonkey-reviewers!
Attachment #9343422 - Attachment description: WIP: Bug 1842773 - Part 30: Add support to create growable ArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 30: Add support to create growable ArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343423 - Attachment description: WIP: Bug 1842773 - Part 31: Implement SharedArrayBuffer.prototype.{grow,growable,maxByteLength}. r=#spidermonkey-reviewers! → Bug 1842773 - Part 31: Implement SharedArrayBuffer.prototype.{grow,growable,maxByteLength}. r=#spidermonkey-reviewers!
Attachment #9343424 - Attachment description: WIP: Bug 1842773 - Part 32: Allow constructing growable SharedArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 32: Allow constructing growable SharedArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343425 - Attachment description: WIP: Bug 1842773 - Part 33: Structured clone support for resizable ArrayBuffers. r=#spidermonkey-reviewers! → Bug 1842773 - Part 33: Structured clone support for resizable ArrayBuffers. r=#spidermonkey-reviewers!
Attachment #9343426 - Attachment description: WIP: Bug 1842773 - Part 34: Enable test262 tests. r=#spidermonkey-reviewers! → Bug 1842773 - Part 34: Enable test262 tests. r=#spidermonkey-reviewers!
Attachment #9343427 - Attachment description: WIP: Bug 1842773 - Part 35: Reimport test262 tests. r=#spidermonkey-reviewers! → Bug 1842773 - Part 35: Reimport test262 tests. r=#spidermonkey-reviewers!

Rename MaxByteLength to avoid confusion with the new maxByteLength slot for
resizable ArrayBuffers.

  • Prefer "Limit" instead of "Max" because the latter could be misinterpreted to
    refer to maxByteLength, because it also includes the substring "max".

Depends on D183352

Pushed by andre.bargull@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/259a53f087b3
Part 1: Add prefs for resizable ArrayBuffers and growable SharedArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/910d057e7894
Part 2: Add "resizable" flag to ArrayBuffer objects. r=sfink
https://hg.mozilla.org/integration/autoland/rev/d1ba02bfff65
Part 3: Add {FixedLength,Resizable}ArrayBufferObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/f53d8aac630b
Part 4: Add ResizableArrayBufferObject::MAX_BYTE_LENGTH_SLOT. r=sfink
https://hg.mozilla.org/integration/autoland/rev/76d3a7b19c69
Part 5: Add ArrayBuffer.prototype.{maxByteLength,resizable} getters. r=sfink
https://hg.mozilla.org/integration/autoland/rev/61bd37ceaeec
Part 6: Add support to create resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/ec1db830ea0e
Part 7: Support constructing resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/10ad70a8eb17
Part 8: Implement ArrayBuffer.prototype.resize method. r=sfink
https://hg.mozilla.org/integration/autoland/rev/e1e40930a9d0
Part 9: Add support to preserve resizability to ArrayBuffer.prototype.transfer. r=sfink
https://hg.mozilla.org/integration/autoland/rev/8eff2fbd1d41
Part 10: Add {FixedLength,Resizable}DataViewObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/2e2b09aab76e
Part 11: Make DataView byteOffset and byteLength accessors aware of resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/597391bdb71e
Part 12: Allow constructing DataViews with resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/01d6506a4b74
Part 13: Remove TypedArrayObject::{length,byteLength}Value. r=sfink
https://hg.mozilla.org/integration/autoland/rev/097a5ac6f7df
Part 14: Add {FixedLength,Resizable}TypedArrayObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/95b779c3dd31
Part 15: Support resizable TypedArrays in MacroAssembler. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/30d994cfcb21
Part 16: Replace TypedArrayObject with FixedLengthTypedArrayObject in the JITs. r=sfink
https://hg.mozilla.org/integration/autoland/rev/83f6b87a1a6e
Part 17: Disable Atomics for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/03ce4a7b78f7
Part 18: Update TypedArray length, byteLength, and byteOffset accesses. r=sfink
https://hg.mozilla.org/integration/autoland/rev/8b781b7f528b
Part 19: Add guard instruction for fixed-length typed arrays. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/84325eb9a12b
Part 20: Update TypedArrayFill for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/60265e4333e9
Part 21: Throw for out-of-bounds in (PossiblyWrapped)TypedArrayLength intrinsics. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/682ea1a58d7c
Part 22: Validate length is in-bounds for TypedArray iterator methods. r=sfink
https://hg.mozilla.org/integration/autoland/rev/4dd54c5f0b0f
Part 23: Add TypedArrayLengthZeroOnOutOfBounds. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/27ba394b4d2d
Part 24: Implement TypedArray.prototype.subarray changes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/41a6cfa90ff9
Part 25: Implement TypedArray.prototype.toLocaleString changes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/dcbf308d25cc
Part 26: Update ArrayBuffer.prototype.slice for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/e21d2dc786e3
Part 27: Allow constructing TypedArrays with resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/925f7343af88
Part 28: Enable Atomics with resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/74c83be90b33
Part 29: Add {FixedLength,Growable}SharedArrayBufferObject classes. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/c96b97a452c7
Part 30: Add support to create growable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/73b58fe927ed
Part 31: Implement SharedArrayBuffer.prototype.{grow,growable,maxByteLength}. r=sfink
https://hg.mozilla.org/integration/autoland/rev/33c4fbb9f307
Part 32: Allow constructing growable SharedArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/9e5fe38814bd
Part 33: Structured clone support for resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/48c52e5dd64a
Part 34: Enable test262 tests. r=sfink
https://hg.mozilla.org/integration/autoland/rev/ab17d9d1afcf
Part 35: Reimport test262 tests. r=sfink
https://hg.mozilla.org/integration/autoland/rev/fdf786dd351e
Part 36: Rename ArrayBufferObject::MaxByteLength to ByteLengthLimit. r=sfink,nbp

Backed out for causing build bustages in SharedArrayObject.cpp

  • Backout link
  • Push with failures
  • Failure Log
  • Failure line: /builds/worker/checkouts/gecko/js/src/vm/SharedArrayObject.cpp(306,13): error: unused function 'IsGrowableSharedArrayBuffer' [-Werror,-Wunused-function]
Flags: needinfo?(andrebargull)
Flags: needinfo?(andrebargull)
Pushed by andre.bargull@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/2ad11ba7c24c
Part 1: Add prefs for resizable ArrayBuffers and growable SharedArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/bd1f53b5c3c5
Part 2: Add "resizable" flag to ArrayBuffer objects. r=sfink
https://hg.mozilla.org/integration/autoland/rev/84a60739eac9
Part 3: Add {FixedLength,Resizable}ArrayBufferObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/42dfeb71cb32
Part 4: Add ResizableArrayBufferObject::MAX_BYTE_LENGTH_SLOT. r=sfink
https://hg.mozilla.org/integration/autoland/rev/0e6538506b65
Part 5: Add ArrayBuffer.prototype.{maxByteLength,resizable} getters. r=sfink
https://hg.mozilla.org/integration/autoland/rev/9bcfe618bc8b
Part 6: Add support to create resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/92b811e12f9c
Part 7: Support constructing resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/0c4601136c2e
Part 8: Implement ArrayBuffer.prototype.resize method. r=sfink
https://hg.mozilla.org/integration/autoland/rev/595d4662855b
Part 9: Add support to preserve resizability to ArrayBuffer.prototype.transfer. r=sfink
https://hg.mozilla.org/integration/autoland/rev/5234962e19cd
Part 10: Add {FixedLength,Resizable}DataViewObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/0d4f958c0e66
Part 11: Make DataView byteOffset and byteLength accessors aware of resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/1a6726cbdb1c
Part 12: Allow constructing DataViews with resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/cb05cbd65dc9
Part 13: Remove TypedArrayObject::{length,byteLength}Value. r=sfink
https://hg.mozilla.org/integration/autoland/rev/6dc6eaaa1078
Part 14: Add {FixedLength,Resizable}TypedArrayObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/77a6a051d189
Part 15: Support resizable TypedArrays in MacroAssembler. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/69852502b958
Part 16: Replace TypedArrayObject with FixedLengthTypedArrayObject in the JITs. r=sfink
https://hg.mozilla.org/integration/autoland/rev/2420ab460c74
Part 17: Disable Atomics for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/dd3cd622dab6
Part 18: Update TypedArray length, byteLength, and byteOffset accesses. r=sfink
https://hg.mozilla.org/integration/autoland/rev/03a8757ebf57
Part 19: Add guard instruction for fixed-length typed arrays. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/2632717efe1f
Part 20: Update TypedArrayFill for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/e54c28ffc14b
Part 21: Throw for out-of-bounds in (PossiblyWrapped)TypedArrayLength intrinsics. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/7e74d5234a82
Part 22: Validate length is in-bounds for TypedArray iterator methods. r=sfink
https://hg.mozilla.org/integration/autoland/rev/624211f977b7
Part 23: Add TypedArrayLengthZeroOnOutOfBounds. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/9c3e501a0bde
Part 24: Implement TypedArray.prototype.subarray changes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/5142ff1ab887
Part 25: Implement TypedArray.prototype.toLocaleString changes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/e298cf8789db
Part 26: Update ArrayBuffer.prototype.slice for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/6577ce666f63
Part 27: Allow constructing TypedArrays with resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/49a441129268
Part 28: Enable Atomics with resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/349001e15a81
Part 29: Add {FixedLength,Growable}SharedArrayBufferObject classes. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/ae6bb114049f
Part 30: Add support to create growable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/332a7d803b17
Part 31: Implement SharedArrayBuffer.prototype.{grow,growable,maxByteLength}. r=sfink
https://hg.mozilla.org/integration/autoland/rev/a8e653e1449b
Part 32: Allow constructing growable SharedArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/ddc756e472fa
Part 33: Structured clone support for resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/a1223a2e4104
Part 34: Enable test262 tests. r=sfink
https://hg.mozilla.org/integration/autoland/rev/9ee0820fd10c
Part 35: Reimport test262 tests. r=sfink
https://hg.mozilla.org/integration/autoland/rev/1c6b89720947
Part 36: Rename ArrayBufferObject::MaxByteLength to ByteLengthLimit. r=sfink,nbp

Backed out for causing mochitest-plain failures on test_bug238987.html.
So far, this only affected Android 7.0.


[task 2024-01-26T09:02:48.489Z] 09:02:48     INFO -  TEST-PASS | dom/events/test/test_bug238987.html | |window| should not have got a blur event, target [object HTMLDocument]
[task 2024-01-26T09:02:48.489Z] 09:02:48     INFO -  Buffered messages finished
[task 2024-01-26T09:02:48.489Z] 09:02:48  WARNING -  TEST-UNEXPECTED-FAIL | dom/events/test/test_bug238987.html | |window| should not have got a blur event, target [object Window]
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      SimpleTest.ok@SimpleTest/SimpleTest.js:426:16
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      handleWindowBlur@dom/events/test/test_bug238987.html:90:7
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      EventListener.handleEvent*start@dom/events/test/test_bug238987.html:141:12
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      Async*doTest@dom/events/test/test_bug238987.html:159:19
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      callStackHandler@SimpleTest/SimpleTest.js:285:24
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      EventHandlerNonNull*this.addLoadEvent@SimpleTest/SimpleTest.js:314:7
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      @SimpleTest/SimpleTest.js:1809:15
[task 2024-01-26T09:02:48.490Z] 09:02:48  WARNING -  TEST-UNEXPECTED-FAIL | dom/events/test/test_bug238987.html | |window| should not have got a blur event, target [object Window]
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      SimpleTest.ok@SimpleTest/SimpleTest.js:426:16
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      handleWindowBlur@dom/events/test/test_bug238987.html:90:7
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      EventListener.handleEvent*start@dom/events/test/test_bug238987.html:142:12
[task 2024-01-26T09:02:48.490Z] 09:02:48     INFO -      Async*doTest@dom/events/test/test_bug238987.html:159:19
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      callStackHandler@SimpleTest/SimpleTest.js:285:24
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      EventHandlerNonNull*this.addLoadEvent@SimpleTest/SimpleTest.js:314:7
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      @SimpleTest/SimpleTest.js:1809:15
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -  TEST-PASS | dom/events/test/test_bug238987.html | |window| should not have got a focus event, target [object HTMLDocument]
[task 2024-01-26T09:02:48.491Z] 09:02:48  WARNING -  TEST-UNEXPECTED-FAIL | dom/events/test/test_bug238987.html | |window| should not have got a focus event, target [object Window]
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      SimpleTest.ok@SimpleTest/SimpleTest.js:426:16
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      handleWindowFocus@dom/events/test/test_bug238987.html:63:7
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      EventListener.handleEvent*start@dom/events/test/test_bug238987.html:139:12
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      Async*doTest@dom/events/test/test_bug238987.html:159:19
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      callStackHandler@SimpleTest/SimpleTest.js:285:24
[task 2024-01-26T09:02:48.491Z] 09:02:48     INFO -      EventHandlerNonNull*this.addLoadEvent@SimpleTest/SimpleTest.js:314:7
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      @SimpleTest/SimpleTest.js:1809:15
[task 2024-01-26T09:02:48.492Z] 09:02:48  WARNING -  TEST-UNEXPECTED-FAIL | dom/events/test/test_bug238987.html | |window| should not have got a focus event, target [object Window]
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      SimpleTest.ok@SimpleTest/SimpleTest.js:426:16
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      handleWindowFocus@dom/events/test/test_bug238987.html:63:7
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      EventListener.handleEvent*start@dom/events/test/test_bug238987.html:140:12
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      Async*doTest@dom/events/test/test_bug238987.html:159:19
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      callStackHandler@SimpleTest/SimpleTest.js:285:24
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      EventHandlerNonNull*this.addLoadEvent@SimpleTest/SimpleTest.js:314:7
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -      @SimpleTest/SimpleTest.js:1809:15
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -  TEST-PASS | dom/events/test/test_bug238987.html | |window| should not have got a focus event, target [object HTMLInputElement], id="i2"
[task 2024-01-26T09:02:48.492Z] 09:02:48     INFO -  TEST-PASS | dom/events/test/test_bug238987.html | Wrong activeElement!
[task 2024-01-26T09:02:48.493Z] 09:02:48  WARNING -  TEST-UNEXPECTED-FAIL | dom/events/test/test_bug238987.html | (focus) Forward tabbing, expected [i3], got [i2]
[task 2024-01-26T09:02:48.493Z] 09:02:48     INFO -      SimpleTest.ok@SimpleTest/SimpleTest.js:426:16
<...>
Flags: needinfo?(andrebargull)

(In reply to Iulian Moraru from comment #46)

Backed out for causing mochitest-plain failures on test_bug238987.html.
So far, this only affected Android 7.0.

These failures seem unrelated to this bug. Intermittent failures for "test_bug238987.html" were previously tracked in bug 1776983, so maybe there's a pre-existing issue with that test.

Thanks, this is indeed an issue with a test added in part 2. The test must only be run in debug-mode, because it uses debug-only features.

Flags: needinfo?(andrebargull)
Pushed by andre.bargull@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/53fad2b43a0b
Part 1: Add prefs for resizable ArrayBuffers and growable SharedArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/49226ab4093e
Part 2: Add "resizable" flag to ArrayBuffer objects. r=sfink
https://hg.mozilla.org/integration/autoland/rev/fe2a4caa1dd7
Part 3: Add {FixedLength,Resizable}ArrayBufferObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/567f67b8e187
Part 4: Add ResizableArrayBufferObject::MAX_BYTE_LENGTH_SLOT. r=sfink
https://hg.mozilla.org/integration/autoland/rev/2b7cc2586ca5
Part 5: Add ArrayBuffer.prototype.{maxByteLength,resizable} getters. r=sfink
https://hg.mozilla.org/integration/autoland/rev/cf831e50329b
Part 6: Add support to create resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/a4808ad0653d
Part 7: Support constructing resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/72fe72f79def
Part 8: Implement ArrayBuffer.prototype.resize method. r=sfink
https://hg.mozilla.org/integration/autoland/rev/f4d118cc11eb
Part 9: Add support to preserve resizability to ArrayBuffer.prototype.transfer. r=sfink
https://hg.mozilla.org/integration/autoland/rev/7fd46f4f4dc4
Part 10: Add {FixedLength,Resizable}DataViewObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/5568c4f7e127
Part 11: Make DataView byteOffset and byteLength accessors aware of resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/2835f49b2bdc
Part 12: Allow constructing DataViews with resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/c04808acc476
Part 13: Remove TypedArrayObject::{length,byteLength}Value. r=sfink
https://hg.mozilla.org/integration/autoland/rev/b82a9a84917f
Part 14: Add {FixedLength,Resizable}TypedArrayObject classes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/f8f412e48ae6
Part 15: Support resizable TypedArrays in MacroAssembler. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/40667536f69f
Part 16: Replace TypedArrayObject with FixedLengthTypedArrayObject in the JITs. r=sfink
https://hg.mozilla.org/integration/autoland/rev/9978604b6be7
Part 17: Disable Atomics for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/4118e5895c1c
Part 18: Update TypedArray length, byteLength, and byteOffset accesses. r=sfink
https://hg.mozilla.org/integration/autoland/rev/457e09f19fcf
Part 19: Add guard instruction for fixed-length typed arrays. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/6ab8d493bddf
Part 20: Update TypedArrayFill for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/b2f91ee492ee
Part 21: Throw for out-of-bounds in (PossiblyWrapped)TypedArrayLength intrinsics. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/a3895c4f05b8
Part 22: Validate length is in-bounds for TypedArray iterator methods. r=sfink
https://hg.mozilla.org/integration/autoland/rev/70abde51cfc3
Part 23: Add TypedArrayLengthZeroOnOutOfBounds. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/6406d024f7e9
Part 24: Implement TypedArray.prototype.subarray changes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/6df23bd678c0
Part 25: Implement TypedArray.prototype.toLocaleString changes. r=sfink
https://hg.mozilla.org/integration/autoland/rev/ef37056db3f7
Part 26: Update ArrayBuffer.prototype.slice for resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/ac69b72d508b
Part 27: Allow constructing TypedArrays with resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/616fce8c2915
Part 28: Enable Atomics with resizable buffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/ec958e11736a
Part 29: Add {FixedLength,Growable}SharedArrayBufferObject classes. r=sfink,jandem
https://hg.mozilla.org/integration/autoland/rev/bf7c93fe5eb7
Part 30: Add support to create growable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/28f978fb00cb
Part 31: Implement SharedArrayBuffer.prototype.{grow,growable,maxByteLength}. r=sfink
https://hg.mozilla.org/integration/autoland/rev/bcb108625dff
Part 32: Allow constructing growable SharedArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/d01cb7f0d759
Part 33: Structured clone support for resizable ArrayBuffers. r=sfink
https://hg.mozilla.org/integration/autoland/rev/2bf38170c0e6
Part 34: Enable test262 tests. r=sfink
https://hg.mozilla.org/integration/autoland/rev/9049b720c9f9
Part 35: Reimport test262 tests. r=sfink
https://hg.mozilla.org/integration/autoland/rev/fce9e7386189
Part 36: Rename ArrayBufferObject::MaxByteLength to ByteLengthLimit. r=sfink,nbp

https://hg.mozilla.org/mozilla-central/rev/53fad2b43a0b
https://hg.mozilla.org/mozilla-central/rev/49226ab4093e
https://hg.mozilla.org/mozilla-central/rev/fe2a4caa1dd7
https://hg.mozilla.org/mozilla-central/rev/567f67b8e187
https://hg.mozilla.org/mozilla-central/rev/2b7cc2586ca5
https://hg.mozilla.org/mozilla-central/rev/cf831e50329b
https://hg.mozilla.org/mozilla-central/rev/a4808ad0653d
https://hg.mozilla.org/mozilla-central/rev/72fe72f79def
https://hg.mozilla.org/mozilla-central/rev/f4d118cc11eb
https://hg.mozilla.org/mozilla-central/rev/7fd46f4f4dc4
https://hg.mozilla.org/mozilla-central/rev/5568c4f7e127
https://hg.mozilla.org/mozilla-central/rev/2835f49b2bdc
https://hg.mozilla.org/mozilla-central/rev/c04808acc476
https://hg.mozilla.org/mozilla-central/rev/b82a9a84917f
https://hg.mozilla.org/mozilla-central/rev/f8f412e48ae6
https://hg.mozilla.org/mozilla-central/rev/40667536f69f
https://hg.mozilla.org/mozilla-central/rev/9978604b6be7
https://hg.mozilla.org/mozilla-central/rev/4118e5895c1c
https://hg.mozilla.org/mozilla-central/rev/457e09f19fcf
https://hg.mozilla.org/mozilla-central/rev/6ab8d493bddf
https://hg.mozilla.org/mozilla-central/rev/b2f91ee492ee
https://hg.mozilla.org/mozilla-central/rev/a3895c4f05b8
https://hg.mozilla.org/mozilla-central/rev/70abde51cfc3
https://hg.mozilla.org/mozilla-central/rev/6406d024f7e9
https://hg.mozilla.org/mozilla-central/rev/6df23bd678c0
https://hg.mozilla.org/mozilla-central/rev/ef37056db3f7
https://hg.mozilla.org/mozilla-central/rev/ac69b72d508b
https://hg.mozilla.org/mozilla-central/rev/616fce8c2915
https://hg.mozilla.org/mozilla-central/rev/ec958e11736a
https://hg.mozilla.org/mozilla-central/rev/bf7c93fe5eb7
https://hg.mozilla.org/mozilla-central/rev/28f978fb00cb
https://hg.mozilla.org/mozilla-central/rev/bcb108625dff
https://hg.mozilla.org/mozilla-central/rev/d01cb7f0d759
https://hg.mozilla.org/mozilla-central/rev/2bf38170c0e6
https://hg.mozilla.org/mozilla-central/rev/9049b720c9f9
https://hg.mozilla.org/mozilla-central/rev/fce9e7386189

Status: ASSIGNED → RESOLVED
Closed: 3 months ago
Resolution: --- → FIXED
Target Milestone: --- → 124 Branch
Regressions: 1878384
Flags: in-testsuite+

FF124 MDN docs work for this can be tracked in https://github.com/mdn/content/issues/32337

This is mostly just a compatibility data and MDN release note update.

You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: