gecko-dev/memory
Nicholas Nethercote b9e071e2e8 Bug 1481998 - Make mozilla::Hash{Map,Set}'s entry storage allocation lazy. r=luke,sfink
Entry storage allocation now occurs on the first lookupForAdd()/put()/putNew().
This removes the need for init() and initialized(), and matches how
PLDHashTable/nsTHashtable work. It also removes the need for init() functions
in a lot of types that are built on top of mozilla::Hash{Map,Set}.

Pros:

- No need for init() calls and subsequent checks.

- No memory allocated for empty tables, which are not that uncommon.

Cons:

- An extra branch in lookup() and lookupForAdd(), but not in put()/putNew(),
  because the existing checkOverloaded() can handle it.

Specifics:

- Construction now can take a length parameter.

- init() is removed. Explicit length-setting, when necessary, now occurs in the
  constructors.

- initialized() is removed.

- capacity() now returns zero when the entry storage is absent.

- lookupForAdd() is no longer `const`, because it can instantiate the storage,
  which requires modifications.

- lookupForAdd() can now return an invalid AddPtr in two cases:

  - old: hashing failure (due to OOM in the hasher)

  - new: OOM while instantiating entry storage

  The existing failure handling paths for the old case work for the new case.

- clear(), finish(), and clearAndShrink() are replaced by clear(), compact(),
  and reserve(). The old compactIfUnderloaded() is also removed.

- Capacity computation code is now in its own functions, bestCapacity() and
  hashShift(). setTableSizeLog2() is removed.

- uint32_t is used throughout for capacities, instead of size_t, for
  consistency with other similar values.

- changeTableSize() now takes a capacity instead of a deltaLog2, and it can now
  handle !mTable.

Measurements:

- Total source code size is reduced by over 900 lines. Also, lots of existing
  lines got shorter (i.e. two checks were reduced to one).

- Executable size barely changed, down by 2 KiB on Linux64. The extra branches
  are compensated for by the lack of init() calls.

- Speed changed negligibly. The instruction count for Bench_Cpp_MozHash
  increased from 2.84 billion to 2.89 billion but any execution time change was
  well below noise.
2018-08-10 18:00:29 +10:00
..
build Bug 1090497 - Re-enable warnings as errors on clang-cl. r=froydnj 2018-07-31 22:10:07 +09:00
fallible Bug 1423802 - Remove the dummy fallible library. r=nalexander 2017-12-07 12:16:50 +09:00
gtest Bug 1474254 -- Disable test Jemalloc.JunkPoison for Windows ccov builds. 2018-07-27 22:48:14 +03:00
mozalloc Bug 1482330 - Upgrade to Android NDK r17b and API level 16 (JB). r=snorp 2018-08-11 09:47:41 +09:00
replace Bug 1481998 - Make mozilla::Hash{Map,Set}'s entry storage allocation lazy. r=luke,sfink 2018-08-10 18:00:29 +10:00
volatile Bug 1423107 - Replace uses of moz_posix_memalign with posix_memalign. r=njn 2017-12-05 16:46:17 +09:00
app.mozbuild Bug 1417309 - Add the necessary bits to support a --enable-project=memory option. r=nalexander 2017-11-16 08:37:36 +09:00
moz.build Bug 1417309 - Add the necessary bits to support a --enable-project=memory option. r=nalexander 2017-11-16 08:37:36 +09:00
moz.configure Bug 1417309 - Add the necessary bits to support a --enable-project=memory option. r=nalexander 2017-11-16 08:37:36 +09:00