The IPC::Message header is surrounded by:
#pragma pack(push,2)
...
#pragma pack(pop)
which (at least on GCC) specifies that structure members defined lexically
within the pragma should be two-byte aligned, rather than the ABI's declared
alignment.
But for IPC::Message::Header, this is a silly requirement, as everything there
is four bytes; there's no reason to pack the members any tighter. And packing
tighter means that strict alignment platforms (like ARM) need to use more
complex code for something as simple as storing to one of the members--like
when we set a message's request ID, over and over and over. The current code
for setting a message's request ID on ARM looks like:
264: 6863 ldr r3, [r4, #4]
266: 696a ldr r2, [r5, #20]
268: 809a strh r2, [r3, #4]
26a: 0c12 lsrs r2, r2, #16
26c: 80da strh r2, [r3, #6]
With the patch, it looks like:
264: 6863 ldr r3, [r4, #4]
266: 696a ldr r2, [r5, #20]
268: 605a str r2, [r3, #4]
Only four bytes, but multiplied over several hundred set_routing_id calls, it
saves some code size and runtime. I verified that the header's length doesn't
change by looking at debug information.
There's a few things mashed together in this patch:
-- Enable animations in glyph documents
-- Make gfxSVGGlyphsDocument monitor the document's refresh driver to detect
updates
-- Forward updates to the gfxFontEntry
* * *
bug 798843 - recompile svg.woff font to pick up the updated glyph definitions
* * *
bug 798843 - update property_database.js to match the new property names
The fundamental change of approach in this patch is that now the temporary
texture is per-compositable.
Originally, the temporary texture was per-TextureHost. That was too many
temporary textures. With Nical's work in bug 875211, that switched to having a
temporary texture per compositor only. That's what turned out to be too few.
Now we have one per compositable which is fewer than one per TextureHost,
because e.g. a ContentHost, which is a single Compositable, may have 2
TextureHosts to implement double-buffering.
Adds RootedUnion and NullableRootedUnion structs that are used on the
stack for union return values when the union needs rooting. It also
adds a TraceUnion method on union return values, which is called by
(Nullable)RootedUnion or by dictionary tracing. TraceUnion traces
typed array and object members of unions (the only things unions can
contain so far that might need tracing). Union return values are
changed to store raw JSObject* or typed array structs instead of
Rooted versions of both; the tracing is now handled via TraceUnion.
The wrapping code for dictionary arguments to constructors is fixed to
actually work. This required adding GetAs* methods to union return
values that return references to the internal data.
The SetToObject method is adjusted to actually work for union return
value structs and not assume it's being generated for a
union-conversion struct, and we now generate SetToObject methods as
needed for union return values.
========
https://hg.mozilla.org/integration/gaia-central/rev/4ef712b02d79
Author: Anthony Ricaud <anthony@ricaud.me>
Desc: Revert "Bug 914886 - [Settings] Use aria-disabled instead of disabled class"
This reverts commit ab7d53c48864e04332df1b1d396457d1d57397dd because it breaks the linter