Commit Graph
64 Commits
Author SHA1 Message Date
Sylvestre Ledru b0fe72dee5 Bug 1856795 - Remove redundant member init r=emilio
Done with:
./mach static-analysis check --checks="-*, readability-redundant-member-init" --fix .

https://clang.llvm.org/extra/clang-tidy/checks/readability/redundant-member-init.html

Differential Revision: https://phabricator.services.mozilla.com/D190002
2023-10-15 15:29:02 +00:00
Cristina Horotan 7388749830 Backed out 2 changesets (bug 1856795) for causing build bustage at BasicEvents.h CLOSED TREE
Backed out changeset 1d98b028923a (bug 1856795)
Backed out changeset eae2ac93e17c (bug 1856795)
2023-10-14 21:42:14 +03:00
Sylvestre Ledru 4a97019e39 Bug 1856795 - Remove redundant member init r=emilio
Done with:
./mach static-analysis check --checks="-*, readability-redundant-member-init" --fix .

https://clang.llvm.org/extra/clang-tidy/checks/readability/redundant-member-init.html

Differential Revision: https://phabricator.services.mozilla.com/D190002
2023-10-14 17:34:26 +00:00
Daniel Holbert 8715febbdf Bug 1733729: Fix non-unified build bustage in xpcom directory. r=mccr8
These changes were necessary for me to build successfully with this in my
mozconfig:
 ac_add_options --enable-debug
 ac_add_options --disable-unified-build
 ac_add_options --enable-profiling

While I'm here, I removed a duplicate include in InputTaskManager.h, and made
nsThreadPool.cpp include its own header first, to match Gecko common practice.

Differential Revision: https://phabricator.services.mozilla.com/D127503
2021-10-05 00:29:56 +00:00
Mike Hommey d43514a029 Bug 1733308 - Fix non-unified builds errors in xpcom/ds. r=xpcom-reviewers,mccr8
xpcom/ds/nsProperties.cpp:56:3: error: use of undeclared identifier 'AppendToArray'; did you mean 'mozilla::AppendToArray'?
xpcom/ds/PLDHashTable.cpp:324:3: error: use of undeclared identifier 'NS_ASSERTION'
xpcom/ds/PLDHashTable.cpp:395:3: error: use of undeclared identifier 'NS_ASSERTION'
xpcom/ds/PLDHashTable.cpp:679:7: error: use of undeclared identifier 'NS_ABORT_OOM'
xpcom/ds/PLDHashTable.cpp:685:7: error: use of undeclared identifier 'NS_ABORT_OOM'

Differential Revision: https://phabricator.services.mozilla.com/D127039
2021-10-01 01:49:17 +00:00
Simon Giesecke 4b2a2c7c93 Bug 1692403 - Don't shrink hashtable in EntryHandle destructor. r=xpcom-reviewers,nika
Differential Revision: https://phabricator.services.mozilla.com/D108171
2021-03-25 08:34:32 +00:00
Simon Giesecke 3b17e0ced0 Bug 1695275 - Simplify hashtable clearing when there is no Clear operation. r=xpcom-reviewers,nika
Differential Revision: https://phabricator.services.mozilla.com/D106644
2021-03-01 08:17:47 +00:00
Jan Varga 200f3c5016 Bug 1681469 - Allow nsBaseHashtable to work with a non-default-constructible/non-movable DataType; r=nika
nsBaseHashtable now supports non-default-constructible DataType and
UserDataType, however not all methods can be instantiated.  All methods which
can't be instantiated with non-default-constructible DataType or UserDataType
are now described as such in method definitions.

The public API of PLDHashTable and nsBaseHashtable/nsDataHashtable was changed:
- A new method PLDHashTable::WithEntryHandle has been added. It allows to use a
  custom function for entry initialization (instead of the global hook).
- A new method nsBaseHashtable::MaybeGet has been added.
- A new overload nsBaseHashtable::Remove has been added.
- The nsDataHashtable::GetAndRemove method has been pulled up to
  nsBaseHashtable.

In addition, the following implementation details have changed:

PLDHashTable:
- The code from the Add method has been split into MakeEntryHandle and a helper
  object called EntryHandle. The Add method is now implemented on top of that.

nsTHashtable:
- A new (non-public) API for WithEntryHandle has been added.
- The InitEntry hook is no longer used. Instead of using the hook, PutEntry
  methods now use nsTHashtable::WithEntryHandle instead of PLDHashTable::Add.
  This change allows to do custom initialization in derived classes.

nsBaseHashtable:
- A new (non-public) API for WithEntryHandle has been added.
- Put methods no longer use nsTHashtable::PutEntry, they now use the new method
  nsBaseHashtable::WithEntryHandle.

Differential Revision: https://phabricator.services.mozilla.com/D99428
2021-01-29 08:39:40 +00:00
Brindusan Cristian e4761754a5 Backed out changeset 6ecaa139c502 (bug 1681469) for gtest AddressSanitizer failures. CLOSED TREE 2021-01-29 06:53:39 +02:00
Jan Varga 4f9feb2946 Bug 1681469 - Allow nsBaseHashtable to work with a non-default-constructible/non-movable DataType; r=nika
nsBaseHashtable now supports non-default-constructible DataType and
UserDataType, however not all methods can be instantiated.  All methods which
can't be instantiated with non-default-constructible DataType or UserDataType
are now described as such in method definitions.

The public API of PLDHashTable and nsBaseHashtable/nsDataHashtable was changed:
- A new method PLDHashTable::WithEntryHandle has been added. It allows to use a
  custom function for entry initialization (instead of the global hook).
- A new method nsBaseHashtable::MaybeGet has been added.
- A new overload nsBaseHashtable::Remove has been added.
- The nsDataHashtable::GetAndRemove method has been pulled up to
  nsBaseHashtable.

In addition, the following implementation details have changed:

PLDHashTable:
- The code from the Add method has been split into MakeEntryHandle and a helper
  object called EntryHandle. The Add method is now implemented on top of that.

nsTHashtable:
- A new (non-public) API for WithEntryHandle has been added.
- The InitEntry hook is no longer used. Instead of using the hook, PutEntry
  methods now use nsTHashtable::WithEntryHandle instead of PLDHashTable::Add.
  This change allows to do custom initialization in derived classes.

nsBaseHashtable:
- A new (non-public) API for WithEntryHandle has been added.
- Put methods no longer use nsTHashtable::PutEntry, they now use the new method
  nsBaseHashtable::WithEntryHandle.

Differential Revision: https://phabricator.services.mozilla.com/D99428
2021-01-28 20:58:58 +00:00
Paul Bone 1395ba45ad Bug 1666746 - pt 2. Reuse SlotForIndex to avoid duplicate code r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D89566
2020-09-25 00:10:18 +00:00
Paul Bone 2acac90d45 Bug 1666746 - pt 1. Add an IsAllocated method r=froydnj
Adding this method makes it clearer what code is doing when it checks that
the storage has been allocated.

Differential Revision: https://phabricator.services.mozilla.com/D89564
2020-09-25 00:09:35 +00:00
Andrew McCreight 611f5029e6 Bug 1609815 - Remove Web Replay C++ implementation. r=jgilbert,jandem,gbrown
Patch by bhackett and jlaster. Also reviewed by mccr8.

Differential Revision: https://phabricator.services.mozilla.com/D60197
2020-02-27 17:39:15 +00:00
Ciure Andrei c06273c350 Backed out changeset d407a28318e6 (bug 1609815) for causing windows ming bustages CLOSED TREE 2020-02-27 07:05:19 +02:00
Andrew McCreight 179c12c3e5 Bug 1609815 - Remove Web Replay C++ implementation. r=jgilbert,jandem,gbrown
Patch by bhackett and jlaster. Also reviewed by mccr8.

Differential Revision: https://phabricator.services.mozilla.com/D60197
2020-02-27 04:43:48 +00:00
Sylvestre Ledru 0f8c6db00f Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D54686
2019-11-26 14:35:02 +00:00
Emilio Cobos Álvarez 8f3b60288d Bug 1591132 - Make it easy to switch on and off these assertions in different build configurations. r=froydnj
Put them behind a MOZ_HASH_TABLE_CHECKS_ENABLED define, which right now is only
defined in DEBUG builds, preserving behavior.

MakeImmutable becomes an empty inline function when disabled, which should be
zero-cost.

Differential Revision: https://phabricator.services.mozilla.com/D50493
2019-10-28 23:27:30 +00:00
Emilio Cobos Álvarez 33fd51f999 Bug 1591132 - Remove some useless ifdefs. r=froydnj
Default constructors of members run if not specified there, and these ifdefs
are ugly.

Differential Revision: https://phabricator.services.mozilla.com/D50492
2019-10-28 23:27:28 +00:00
Simon Giesecke a6c5ea11de Bug 1575479 - Add support for STL iterators and range-based for to nsBaseHashtable. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D44982
2019-09-10 12:08:02 +00:00
Coroiu Cristina c47fef6f0d Backed out 2 changesets (bug 1575479) for build bustage at build/src/gfx/thebes/gfxFT2Fonts.h on a CLOSED TREE
Backed out changeset dcbc7c69fb64 (bug 1575479)
Backed out changeset 6d54a8115393 (bug 1575479)
2019-09-10 15:01:10 +03:00
Simon Giesecke 75a1d797dd Bug 1575479 - Add support for STL iterators and range-based for to nsBaseHashtable. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D44982
2019-09-09 14:27:24 +00:00
Sylvestre Ledru 1ad0cac654 Bug 1519636 - clang-format-8: Reformat recent changes to the Google coding style r=Ehsan
clang-format-8 upstream had some improvements wrt macros
See: https://reviews.llvm.org/D33440
This is why the diff is bigger than usual

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D26098
2019-04-05 21:41:42 +00:00
Csoregi Natalia 2ded4ab36d Backed out changeset 4ad80127f89f (bug 1519636) for bustage on MarkupMap.h and nsAccessibilityService.cpp. CLOSED TREE 2019-04-05 09:48:19 +03:00
Sylvestre Ledru ebe9c62d30 Bug 1519636 - clang-format-8: Reformat recent changes to the Google coding style r=Ehsan
clang-format-8 upstream had some improvements wrt macros
See: https://reviews.llvm.org/D33440
This is why the diff is bigger than usual

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D26098
2019-04-04 21:36:16 +00:00
Narcis Beleuzu 6b9ce2a82b Backed out changeset 389b6bbd76db (bug 1519636) for bustages on MarkupMap.h . CLOSED TREE 2019-04-05 00:27:56 +03:00
Sylvestre Ledru 194039a8d9 Bug 1519636 - clang-format-8: Reformat recent changes to the Google coding style r=Ehsan
clang-format-8 upstream had some improvements wrt macros
See: https://reviews.llvm.org/D33440
This is why the diff is bigger than usual

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D26098
2019-04-04 20:12:23 +00:00
Ryan Hunt e1344a48bb Bug 1523969 part 27 - Move method definition inline comments to new line in 'xpcom/'. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D21131
2019-02-25 16:14:01 -06:00
Nicholas Nethercote 322ee62f9a Bug 1530311 - Add a length check to HashTable::reserve(). r=luke
Also add an assertion to a similar function in PLDHashTable.cpp.

Differential Revision: https://phabricator.services.mozilla.com/D21167
2019-02-27 00:08:13 +00:00
Sylvestre Ledru e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Nathan Froyd 1aac5e93b2 Bug 1460674 - part 3 - make PLDHashTable iteration faster; r=njn
The core loop of Iterator::Next() requires multiple branches, one to
check for entry liveness and one to check for wraparound.  We can
rewrite this to use masking instead, as well as iterating only over the
hashes, and reconstructing the entry pointer when we know we've reached
a live entry.  This change cuts the time taken on the collections
benchmark by the iteration portion in half.
2018-11-26 16:24:50 -05:00
Nathan Froyd 7603c161b4 Bug 1460674 - part 2 - reorganize PLDHashTable's internal storage; r=njn
As discussed in the previous commit message, PLDHashTable's storage
wastes space for common entry types.  This commit reorganizes the
storage to store all the hashes packed together, followed by all the
entries, which eliminates said waste.
2018-11-26 16:24:50 -05:00
Nathan Froyd 7576d447f9 Bug 1460674 - part 1 - change PLDHashTable internals to work on slots; r=njn
PLDHashTable requires that all items stored therein inherit from
PLDHashEntryHdr:

struct PLDHashEntryHdr {
  // PLDHashNumber is a uint32_t.
  PLDHashNumber mKeyHash; // Cached hash key for object.
};

class MyType : public PLDHashEntryHdr {
  // Data members, etc.
};

PLDHashEntryHdr::mKeyHash is used to cache the computed hash value of
the entry, so we aren't rehashing entries on every lookup/add/etc.

Because of structure layout requirements on 64-bit platforms, the data
members of MyType will typically start at offset 8:

MyType, offset 0: mKeyHash
MyType, offset 4: padding required by alignment
MyType, offset 8: first data member of MyType
MyType, offset N: ...

The padding at offset 4 is dead, unused space.

We'd like to change this state of affairs by having PLDHashTable manage
the cached hash key itself, which would eliminate the dead space in the
object and would enable packing the table storage more tightly.  But
PLDHashTable pervasively assumes that its internal storage is an array
of PLDHashEntryHdrs (with an associated object size to account for
subclassing).

As a first step to laying out the hash table storage differently, we
have to make the internals of PLDHashTable not access PLDHashEntryHdr
items directly, but layer an abstraction on top.  We call this
abstraction "slots": a slot represents storage for the cached hash key
and the associated entry, and can produce a PLDHashEntryHdr* on demand.
2018-11-26 16:24:50 -05:00
Nathan Froyd a4b4e3eacb Bug 1460674 - part 0b - stop trying to be const-correct in Get(); r=njn
The only place where this is used where the const-ness matters is in
AddressEntry, and that use const_cast's away the const-ness.  So let's
just ditch the method that attempts to return const pointers.
2018-11-26 16:24:50 -05:00
Nathan Froyd ce0a956cb5 Bug 1460674 - part 0a - store the hash table entry size in iterators; r=njn
This change is satisfying insofar as it removes a load from every
iteration step over the hashtable, but it doesn't seem to affect
our collection benchmarks in any way.  The change does not make
iterators any larger, as there is padding at the end of the iterator
structure on both 32- and 64-bit platforms.
2018-11-26 16:24:50 -05:00
Nathan Froyd e668d5669a Bug 1506730 - remove PLDHashTable::Iterator::mStart; r=njn
We only use its value in one place, and said value is easily computable
from readily available information.  This change makes iterators
slightly smaller.
2018-11-19 09:54:04 -05:00
Nicholas Nethercote fc339a2661 Bug 1477626 - Move ScrambleHashCode() from js/src/Utility.h to mfbt/HashFunctions.h. r=Waldo
And use it in PLDHashTable.cpp.

MozReview-Commit-ID: BqwEkE0p5AG
2018-07-26 18:52:47 +10:00
Nicholas Nethercote e020a452ff Bug 1477626 - Introduce mozilla::HashNumber and use it in various places. r=Waldo
Currently we have three ways of representing hash values.

- uint32_t: used in HashFunctions.h.

- PLDHashNumber: defined in PLDHashTable.{h,cpp}.

- js::HashNumber: defined in js/public/Utility.h.

Functions that create hash values with functions from HashFunctions.h use a mix
of these three types. It's a bit of a mess.

This patch introduces mozilla::HashNumber, and redefines PLDHashNumber and
js::HashNumber as synonyms. It also changes HashFunctions.h to use
mozilla::HashNumber throughout instead of uint32_t.

This leaves plenty of places that still use uint32_t that should use
mozilla::HashNumber or one of its synonyms, but I didn't want to tackle that
now.

The patch also:

- Does similar things for the constants defining the number of bits in each
  hash number type.

- Moves js::HashNumber from Utility.h to HashTable.h, which is a better spot
  for it. (This required changing the signature of ScrambleHashCode(); that's
  ok, it'll get moved by the next patch anyway.)

MozReview-Commit-ID: EdoWlCm7OUC
2018-07-26 18:52:46 +10:00
Nicholas Nethercote 749d9ae5cc Bug 1477632 - Always inline PLDHashTable::SearchTable(). r=froydnj
This speeds up BenchCollections.PLDHash as follows:

>     succ_lookups      fail_lookups     insert_remove           iterate
>          42.8 ms           51.6 ms           21.0 ms           34.9 ms
>          41.8 ms           51.9 ms           20.0 ms           34.6 ms
>          41.6 ms           51.3 ms           19.3 ms           34.5 ms
>          41.6 ms           51.3 ms           19.8 ms           35.0 ms
>          41.7 ms           50.8 ms           20.5 ms           35.2 ms

After:

>     succ_lookups      fail_lookups     insert_remove           iterate
>          37.7 ms           33.1 ms           19.7 ms           35.0 ms
>          37.0 ms           32.5 ms           19.1 ms           35.4 ms
>          37.6 ms           33.6 ms           19.2 ms           36.2 ms
>          36.7 ms           33.3 ms           19.1 ms           35.3 ms
>          37.1 ms           33.1 ms           19.1 ms           35.0 ms

Successful lookups are about 1.13x faster, failing lookups are about 1.54x
faster, and insertions/removals are about 1.05x faster.

On Linux64, this increases the size of libxul (as measured by `size`) by a mere
16 bytes.
2018-07-24 11:09:35 +10:00
Brian Hackett 66b5f61ad2 Bug 1207696 Part 8f - Ensure that PL and PLD hashtables have consistent iteration order when recording/replaying, r=froydnj. 2018-07-23 14:47:55 +00:00
Nathan Froyd 798f5ee345 Bug 1468514 - make resizing PLDHashTable smarter; r=erahm
The current code for resizing PLDHashTable modifies the cached hash for
all entries in the old hash table.  This is unnecessary, because we're
going to throw away the old hash table shortly, and inefficient, because
writing to memory we're never going to use again just wastes time and
memory bandwidth.  Instead, let's avoid the write by pulling out the
cached key and doing the necessary manipulation on local variables,
which is probably slightly faster.
2018-07-23 10:30:57 -05:00
Emilio Cobos Álvarez c176c41660 Bug 1475980: A moved table should be empty. r=froydnj
MozReview-Commit-ID: 7K9wNGhIhaD
2018-07-16 18:06:37 +02:00
Masayuki Nakano 1055a51590 Bug 1475461 - part 1: Mark PLDHashTable::Search() and called by it as const r=Ehsan
PLDHashTable::Search() does not modify any members.  So, this method and
methods called by it should be marked as const.

MozReview-Commit-ID: 6g4jrYK1j9E
2018-07-13 16:56:29 +09:00
Emilio Cobos Álvarez 4b8b5e1717 Bug 1465585: Switch from mozilla::Move to std::move. r=froydnj
This was done automatically replacing:

  s/mozilla::Move/std::move/
  s/ Move(/ std::move(/
  s/(Move(/(std::move(/

Removing the 'using mozilla::Move;' lines.

And then with a few manual fixups, see the bug for the split series..

MozReview-Commit-ID: Jxze3adipUh
2018-06-01 10:45:27 +02:00
Eric Rahm 1bbbc6508d Bug 1452202 - Clean up PLDHashTable move operator. r=froydnj 2018-04-09 11:01:59 -07:00
Eric Rahm d0b5d0fb66 Bug 1452288 - Use calloc for allocating PLDHashTable entries. r=froydnj 2018-04-06 16:51:58 -07:00
Nicholas Nethercote 01e442a7dd Bug 1400193 (part 2) - Shrink PLDHashTable. r=froydnj.
This patch reduces sizeof(PLDHashTable) as follows.

- 64-bit: from 40 bytes to 32
- 32-bit: from 28 bytes to 20

It does this by doing the following.

- It moves mGeneration from EntryStore to PLDHashTable, to avoid unnecessary
  padding on 64-bit. This requires tweaking EntryStore::Set() as explained in a
  comment.

- It also shrinks mGeneration from uint32_t to uint16_t, saving 2 bytes of
  data.

- It shrinks mEntrySize from uint32_t to uint8_t, to cut 3 bytes of data.

- It shrinks mHashShift from int16_t to uint8_t, trimming another byte of data,
  and moves it, saving another 2 bytes of padding.

And it reorders the fields so the word-sized ones are at the start, which makes
it easier to imagine the memory layout.

The patch also adds a test, and fixes some misordered function arguments in
existing tests.
2017-09-15 20:04:29 +10:00
Nicholas Nethercote f7e0a0f0b9 Bug 1400193 (part 1) - Fix subtle bug in PLDHashTable's move constructor. r=froydnj.
The current code replaces one PLDHashTable's mGeneration with another. If the
two generation values happen to be equal, it will look as though the storage
hasn't changed when really it has.

The fix is to use EntryStore::Set() to update mEntryStore, which increments
mGeneration appropriately.
2017-09-15 20:02:33 +10:00
Ehsan Akhgari 86681523ca Bug 1379282 - Improve XPCOM's pointer hashing functions for pointers to neighboring memory locations; r=erahm
The simplistic shift-based hashing function creates a lot of collisions
for pointers pointing to arrays as it doesn't do a great job at distributing
the data randomly based on the input bytes.
2017-07-19 14:16:35 -04:00
Ehsan Akhgari f323e352b2 Backout changeset 06f92d065a85 (bug 1377333) because we don't need keys that are that big 2017-07-18 23:06:00 -04:00
Ehsan Akhgari 8f7f724a05 Bug 1377333 - Make PLDHashNumber 64-bit on x86-64; r=froydnj 2017-07-04 11:05:21 -04:00