Closed Bug 1842773 Opened 2 years ago Closed 1 year 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: 1 year ago
Resolution: --- → FIXED
Target Milestone: --- → 124 Branch
Regressions: 1878384

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.

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

Attachment

General

Created:
Updated:
Size: