v8/test/unittests
Leszek Swirski 1546be9cf8 [runtime] Move string table off-heap
Changes the isolate's string table into an off-heap structure. This
allows the string table to be resized without allocating on the V8 heap,
and potentially triggering a GC. This allows existing strings to be
inserted into the string table without requiring allocation.

This has two important benefits:

  1) It allows the deserializer to insert strings directly into the
     string table, rather than having to defer string insertion until
     deserialization completes.

  2) It simplifies the concurrent string table lookup to allow resizing
     the table inside the write lock, therefore eliminating the race
     where two concurrent lookups could both resize the table.

The off-heap string table has the following properties:

  1) The general hashmap behaviour matches the HashTable, i.e. open
     addressing, power-of-two sized, quadratic probing. This could, of
     course, now be changed.

  2) The empty and deleted sentinels are changed to Smi 0 and 1,
     respectively, to make those comparisons a bit cheaper and not
     require roots access.

  3) When the HashTable is resized, the old elements array is kept
     alive in a linked list of previous arrays, so that concurrent
     lookups don't lose the data they're accessing. This linked list
     is cleared by the GC, as then we know that all threads are in
     a safepoint.

  4) The GC treats the hash table entries as weak roots, and only walks
     them for non-live reference clearing and for evacuation.

  5) Since there is no longer a FixedArray to serialize for the startup
     snapshot, there is now a custom serialization of the string table,
     and the string table root is considered unserializable during weak
     root iteration. As a bonus, the custom serialization is more
     efficient, as it skips non-string entries.

As a drive-by, rename LookupStringExists_NoAllocate to
TryStringToIndexOrLookupExisting, to make it clearer that it returns
a non-string for the case when the string is an array index. As another
drive-by, extract StringSet into a separate header.

Bug: v8:10729
Change-Id: I9c990fb2d74d1fe222920408670974a70e969bca
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2339104
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69270}
2020-08-06 12:27:18 +00:00
..
api Reland "[builtins] Clean up the use of class_name / ES5 [[Class]]" 2020-04-24 11:46:43 +00:00
asmjs [Respect] Prefer inclusive terms 2020-06-22 18:11:23 +00:00
assembler [nci] Replace CompilationTarget with a new Code::Kind value 2020-08-05 12:27:22 +00:00
base [base] Don't allow excluded regions to be freed 2020-07-31 11:22:38 +00:00
codegen [nci] Replace CompilationTarget with a new Code::Kind value 2020-08-05 12:27:22 +00:00
compiler Reland "[zone-compr] Introduce ZoneTypeTraits and ZoneCompression" 2020-07-31 11:43:08 +00:00
compiler-dispatcher [nci] Replace CompilationTarget with a new Code::Kind value 2020-08-05 12:27:22 +00:00
date Reland "[d8] Remove maximum workers limitation" 2019-07-30 07:56:17 +00:00
diagnostics Move unittest files 2019-05-27 08:52:23 +00:00
execution [sandbox] Access microtask queue in NativeContext via bottlenecks 2020-05-05 09:11:14 +00:00
heap cppgc: Establish marking invariants 2020-08-06 11:51:48 +00:00
interpreter [nci] Replace CompilationTarget with a new Code::Kind value 2020-08-05 12:27:22 +00:00
libplatform [unittests] Convert to the new MOCK_METHOD macro. 2020-06-10 15:50:38 +00:00
logging Reland^2 "[heap] Move start of incremental marking in allocation" 2020-07-14 12:07:34 +00:00
numbers [cleanup] Replace simple typedefs by using 2019-05-27 12:39:49 +00:00
objects [runtime] Move string table off-heap 2020-08-06 12:27:18 +00:00
parser Move remaining files in src/ 2019-05-24 18:24:36 +00:00
profiler [cpu-profiler] Add support for refcounting to StringsStorage 2020-03-30 19:08:06 +00:00
regress Reland "[runtime] Improve handling of enumeration index on global dictionary" 2020-03-02 15:41:15 +00:00
strings Fix some issues caught by _LIBCPP_DEBUG=0 2019-11-21 12:17:03 +00:00
tasks [zone] Cleanup zone allocations in src/compiler and tests, pt.1 2020-07-10 12:09:05 +00:00
torque [torque] use implicit parameters for template parameter inference 2020-07-31 15:11:09 +00:00
utils [wasm] Add templatized methods for static bounds checks 2020-06-24 03:41:28 +00:00
wasm [wasm-gc] Allow reference types to function signatures 2020-08-05 14:38:56 +00:00
zone [zone] Final cleanup of zone allocations 2020-07-16 17:47:46 +00:00
BUILD.gn Reland "[heap] Refactor allocation observer in AllocationCounter" 2020-08-04 09:20:02 +00:00
DEPS
run-all-unittests.cc [test] Configure GTest for thread-safe death tests. 2020-01-20 20:03:54 +00:00
test-helpers.cc [compile] Add an UnoptimizedCompileState class 2020-04-23 07:08:28 +00:00
test-helpers.h [compile] Add an UnoptimizedCompileState class 2020-04-23 07:08:28 +00:00
test-utils.cc [test] Create one Isolate per unit test (not test suite) 2020-04-14 11:36:25 +00:00
test-utils.h [zone-compr] Add kCompressGraphZone constant 2020-07-24 08:50:11 +00:00
testcfg.py [unittests] initialize the loop variable 2020-06-05 12:24:10 +00:00
unittests.status [unittest] Skip GCStackTest on win64 release builds 2020-06-30 12:28:15 +00:00