Commit Graph

21 Commits

Author SHA1 Message Date
Nicholas Nethercote
fc3fcb008e Bug 1449414 - Remove nsCSSAnonBoxes::GetNonInheritingPseudoAtom. r=xidorn
It's unused.

MozReview-Commit-ID: 2GymDMCE92a
2018-03-28 16:51:31 +11:00
Nicholas Nethercote
b020982e17 Bug 1411469 - Statically allocate static atoms. r=froydnj
Currently static atoms are stored on the heap, but their char buffers are
stored in read-only static memory.

This patch changes the representation of nsStaticAtom (thus making it a
non-trivial subclass of nsAtom). Instead of a pointer to the string, it now has
an mStringOffset field which is a 32-bit offset to the string. (This requires
placement of the string and the atom within the same object so that the offset
is known to be small. The docs and macros in nsStaticAtom.h handle that.)

Static and dynamic atoms now store their chars in different ways: nsStaticAtom
stores them inline, nsDynamicAtom has a pointer to separate storage. So
`mString` and GetStringBuffer() move from nsAtom to nsDynamicAtom.

The change to static atoms means they can be made constexpr and stored in
read-only memory instead of on the heap. On 64-bit this reduces the per-process
overhead by 16 bytes; on 32-bit the saving is 12 bytes. (Further reductions
will be possible in follow-up patches.)

The increased use of constexpr required multiple workarounds for MSVC.
- Multiple uses of MOZ_{PUSH,POP}_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING to
  disable warnings about (well-defined!) overflow of unsigned integer
  arithmetic.
- The use of -Zc:externConstexpr on all files defining static atoms, to make
  MSVC follow the C++ standard(!) and let constexpr variables have external
  linkage.
- The use of -constexpr:steps300000 to increase the number of operations
  allowed in a constexpr value, in order to handle gGkAtoms, which requires
  hashing ~2,500 atom strings.

The patch also changes how HTML5 atoms are handled. They are now treated as
dynamic atoms, i.e. we have "dynamic normal" atoms and "dynamic HTML5 atoms",
and "dynamic atoms" covers both cases, and both are represented via
nsDynamicAtom. The main difference between the two kinds is that dynamic HTML5
atoms still aren't allowed to be used in various operations, most notably
AddRef()/Release(). All this also required moving nsDynamicAtom into the header
file.

There is a slight performance cost to all these changes: now that nsStaticAtom
and nsDynamicAtom store their chars in different ways, a conditional branch is
required in the following functions: Equals(), GetUTF16String(),
WeakAtom::as_slice().

Finally, in about:memory the "explicit/atoms/static/atom-objects" value is no
longer needed, because that memory is static instead of heap-allocated.

MozReview-Commit-ID: 4AxPv05ngZy
2018-03-26 11:18:31 +02:00
Nicholas Nethercote
c6dd7216ef Bug 1446865 - Rename various AddRefTable() functions as RegisterStaticAtoms. r=froydnj
These functions no longer perform any refcounting, so the existing names are
misleading.

MozReview-Commit-ID: LX55e0bUP8N
2018-03-20 13:01:30 +11:00
Daniel Holbert
8fea3c215f Bug 1412346 part 5: (automated patch) Switch a bunch of C++ files in layout to use our standard mode lines. r=jfkthame
This patch was generated automatically by the "modeline.py" script, available
here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py

For every file that is modified in this patch, the changes are as follows:
 (1) The patch changes the file to use the exact C++ mode lines from the
     Mozilla coding style guide, available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line

 (2) The patch deletes any blank lines between the mode line & the MPL
     boilerplate comment.

 (3) If the file previously had the mode lines and MPL boilerplate in a
     single contiguous C++ comment, then the patch splits them into
     separate C++ comments, to match the boilerplate in the coding style.

MozReview-Commit-ID: EuRsDue63tK
2017-10-27 10:33:53 -07:00
Nicholas Nethercote
60f7cb29e3 Bug 1410294 (part 3) - Overhaul static atom macros. r=froydnj.
There are four things that must be provided for every static atom, two of which
have a macro:
- the atom pointer declaration (no macro);
- the atom pointer definition (no macro);
- the atom char buffer (NS_STATIC_ATOM_BUFFER);
- the StaticAtomSetup struct (NS_STATIC_ATOM_SETUP).

This patch introduces new macros for the first two things: NS_STATIC_ATOM_DECL
and NS_STATIC_ATOM_DEFN, and changes the arguments of the existing two macros
to make them easier to use (e.g. all the '##' concatenation now happens within
the macros).

One consequence of the change is that all static atoms must be within a class,
so the patch adds a couple of classes where necessary (DefaultAtoms, TSAtoms).

The patch also adds a big comment explaining how the macros are used, and what
their expansion looks like. This makes it a lot easier to understand how static
atoms work. Correspondingly, the patch removes some small comments scattered
around the macro use points.

MozReview-Commit-ID: wpRyrEOTHE
2017-10-22 08:50:25 +11:00
Nicholas Nethercote
7dbfdaf890 Bug 1400460 - Rename nsIAtom as nsAtom. r=hiro.
(Path is actually r=froydnj.)

Bug 1400459 devirtualized nsIAtom so that it is no longer a subclass of
nsISupports. This means that nsAtom is now a better name for it than nsIAtom.

MozReview-Commit-ID: 91U22X2NydP
2017-10-03 09:05:19 +11:00
Boris Zbarsky
9ff1ee9b18 Bug 1388625 part 4. Add a concept of wrapper anon boxes to nsCSSAnonBoxes. r=heycam
MozReview-Commit-ID: 39i5eHlrrON
2017-08-11 00:07:12 -04:00
Emilio Cobos Álvarez
78a9114477 Bug 1368290: Cache anon box styles in ServoStyleContext. r=bholley
MozReview-Commit-ID: CaaL9hB3G7p
2017-08-04 23:37:17 +02:00
Xidorn Quan
50f4fc557b Bug 1378287 - Skip parent-display-based display type fixup for all anonymous boxes. r=bz
MozReview-Commit-ID: C4R3sVl83jJ
2017-07-05 16:21:10 +10:00
Cameron McCormack
e029d1d3bc Bug 1358968 - Part 1: Store in nsCSSAnonBoxList.h whether an anon box skips parent display-based style fixups. r=bz
MozReview-Commit-ID: 3DlGa5sH4eX
2017-04-24 16:17:28 +08:00
Boris Zbarsky
95185908d0 Bug 1345362 part 2. Introduce nsCSSAnonBoxes::NonInheritingTypeForPseudoTag for looking up the type of non-inheriting anonymous box for a given pseudo tag. r=heycam
MozReview-Commit-ID: 4quZagNd5yo
2017-03-08 23:39:47 -05:00
Boris Zbarsky
ad60a3e77d Bug 1343078 part 3. Introduce the concept of non-inheriting anon boxes without adding any yet. r=dbaron
MozReview-Commit-ID: 1NZ2xI4XCWH
2017-03-08 00:18:39 -05:00
Boris Zbarsky
fda169de6c Bug 1343078 part 1. Give placeholders and first-letter continuations different kinds of anonymous boxes. r=dbaron
MozReview-Commit-ID: B5IHgVUo1Rp
2017-03-08 00:18:32 -05:00
Xidorn Quan
15df861e15 Bug 1097499 part 3 - Add a separate anonbox for text nodes. r=heycam
MozReview-Commit-ID: 1GfoFEGhyka
2016-04-22 09:18:41 +10:00
Gervase Markham
cb6a072c2a Bug 716478 - update licence to MPL 2. 2012-05-21 12:12:37 +01:00
Michael Wu
0fe7772ece Bug 675553 - Switch from PRBool to bool on a CLOSED TREE , r=bsmedberg,khuey,bz,cjones 2011-09-28 23:19:26 -07:00
L. David Baron
5d05ebd9ee Fix serialization of tree pseudo-elements with arguments. (Bug 521044) r=bzbarsky 2009-10-07 20:22:42 -07:00
dbaron@dbaron.org
bdeea6cda8 File comments that show up in LXR and provide a quick summary of what's in each file. 2006-03-25 05:47:31 +00:00
alecf@netscape.com
dbe199d936 fix for bug 199170, convert layout to use nsStaticAtom. sr=dbaron 2003-04-02 04:51:07 +00:00
dbaron@fas.harvard.edu
8a88f30fc6 Change my email address from dbaron@fas.harvard.edu to dbaron@dbaron.org. Comment changes only. 2003-01-01 23:53:20 +00:00
dbaron@fas.harvard.edu
72f2298b73 Consolidate all CSS pseudos and split them into three atom lists to distinguish between pseudo-classes, pseudo-elements, and fake-pseudo-elements used for anonymous boxes. b=147887 r,sr=roc,bz 2002-11-17 15:37:56 +00:00