b0be4f8ddb
Currently the shared value barrier manually fast paths instance types for objects that are always in the shared heap. This CL makes a common superclass, AlwaysSharedSpaceJSObject, and uses that for the fast path. Bug: chromium:1402920, v8:12547 Fixed: chromium:1402920 Change-Id: I84421802791a4dc72925341eeb0cfc5949b8938a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4134475 Reviewed-by: Leszek Swirski <leszeks@chromium.org> Commit-Queue: Shu-yu Guo <syg@chromium.org> Cr-Commit-Position: refs/heads/main@{#85192}
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
// Copyright 2022 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// Flags: --harmony-struct --allow-natives-syntax
|
|
|
|
let mutex = new Atomics.Mutex;
|
|
let cv = new Atomics.Condition;
|
|
|
|
(function TestConditionWaitNotAllowed() {
|
|
assertThrows(() => {
|
|
Atomics.Mutex.lock(mutex, () => {
|
|
%SetAllowAtomicsWait(false);
|
|
Atomics.Condition.wait(cv, mutex);
|
|
});
|
|
});
|
|
%SetAllowAtomicsWait(true);
|
|
})();
|
|
|
|
(function TestConditionMutexNotHeld() {
|
|
// Cannot wait on a mutex not owned by the current thread.
|
|
assertThrows(() => {
|
|
Atomics.Condition.wait(cv, mutex);
|
|
});
|
|
})();
|
|
|
|
(function TestConditionNoWaiters() {
|
|
// Notify returns number of threads woken up.
|
|
assertEquals(0, Atomics.Condition.notify(cv));
|
|
})();
|
|
|
|
(function TestConditionWaitTimeout() {
|
|
Atomics.Mutex.lock(mutex, () => {
|
|
assertEquals(false, Atomics.Condition.wait(cv, mutex, 100));
|
|
});
|
|
})();
|
|
|
|
// Mutexes can be assigned to shared objects.
|
|
(function TestConditionCanBeAssignedToSharedObjects() {
|
|
const Box = new SharedStructType(["payload"]);
|
|
const box = new Box;
|
|
box.payload = cv;
|
|
})();
|