In child processes, Gecko Profiler's profiler_start/stop are running OFF the main thread, so the calls to Ensure/ReleaseBufferForMainThreadAddMarker should be dispatched to the main thread for them to actually create/destroy the main-thread buffer.
Note that this is not done in the Base Profiler, because it should always run on the main thread, and if it wasn't there would be no way to dispatch a task to the main thread -- and it wouldn't be too much of an issue anyway, there are few markers running outside of Gecko Profiler sessions.
Differential Revision: https://phabricator.services.mozilla.com/D144387
I added this in bug 1676990, I'm not sure why I ignored the rect return value, probably should have either asserted it was empty if I thought that or dealt with the return value.
Depends on D143894
Differential Revision: https://phabricator.services.mozilla.com/D143895
It is the right place to do it, otherwise we don't have the guarantee of
it invalidating ancestor sizes or anything.
It's also what we invalidate in WaylandPopupPropagateChangesToLayout().
We otherwise do not have the guarantee of SetPopupPosition running
before or after layout, if sizes do not change. That caused the popup
size to remain big, which caused a resize loop.
Differential Revision: https://phabricator.services.mozilla.com/D144314
We usually need three mutations to reach the final state of addProperty and usually the 2nd and 3rd come in the same batch.
Meaning that simply waiting for receivedMutations >= 2 works in most cases.
But the intermittent screenshots show that the markup view was not updated yet with the correct content meaning it either didn't receive or processed the last
mutation.
Let's try to wait for the proper mutation instead of using an arbitrary number. Hopefully this fixes it.
Differential Revision: https://phabricator.services.mozilla.com/D144181
InternalCall has two callers and only one of them needs this extra step.
CallFromStack is used for calls from JS and Window is never exposed to script.
Depends on D144288
Differential Revision: https://phabricator.services.mozilla.com/D144289
Background: When 32-bit types are passed in registers on x86-64 (and
probably other platforms?), the function call ABI does not specify the
contents of the upper half, and the Linux kernel syscall ABI appears to
have the same behavior.
In practice, the upper half is usually zero (or maybe sign-extended from
the lower half), because 64-bit operations aren't cheaper than 32-bit,
and 32-bit operations zero-extend their outputs; therefore, this case
usually doesn't happen in the first place, and any kind of spill or
register move will zero the upper half. However, arbitrary values are
possible, and a case like this has occurred with the Firefox profiler
using `clock_gettime`. (This paragraph is applicable to x86-64 and
ARM64; other 64-bit architecutures may behave differently.)
But the Chromium seccomp-bpf compiler, when testing the value of a 32-bit
argument on a 64-bit platform, requires that the value be zero-extended
or sign-extended, and (incorrectly, as far as I can tell) considers
anything else an ABI violation.
With this patch, when that case is detected, we use the `SIGSYS` handler
to zero-extend the problematic argument and re-issue the syscall.
(It would also be possible to just ignore the upper half, and that would
be faster, but that could lead to subtle security holes if the type
used in `bpf_dsl` is incorrect and the kernel really does treat it as
64-bit.)
Differential Revision: https://phabricator.services.mozilla.com/D143964
dom/media/ogg/OggDemuxer.cpp:1905:7: error: variable 'hops' set but not used [-Werror,-Wunused-but-set-variable]
int hops = 0;
^
Differential Revision: https://phabricator.services.mozilla.com/D144147
mozglue/tests/TestBaseProfiler.cpp:2188:12: error: variable 'chunk1ReuseCount' set but not used [-Werror,-Wunused-but-set-variable]
unsigned chunk1ReuseCount = 0;
^
Differential Revision: https://phabricator.services.mozilla.com/D144146
js/src/editline/editline.c:147:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
TTYput(c)
^
js/src/editline/editline.c:158:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
TTYputs(p)
^
js/src/editline/editline.c:166:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
TTYshow(c)
^
js/src/editline/editline.c:187:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
TTYstring(p)
^
js/src/editline/editline.c:212:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
TTYbackn(n)
^
js/src/editline/editline.c:288:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
left(Change)
^
js/src/editline/editline.c:305:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
right(Change)
^
js/src/editline/editline.c:322:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
do_macro(c)
^
js/src/editline/editline.c:340:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
do_forward(move)
^
js/src/editline/editline.c:365:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
do_case(type)
^
js/src/editline/editline.c:441:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
insert_string(p)
^
js/src/editline/editline.c:502:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
do_insert_hist(p)
^
js/src/editline/editline.c:515:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
do_hist(move)
^
js/src/editline/editline.c:557:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
substrcmp(text, pat, len)
^
js/src/editline/editline.c:607:14: error: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
if ((*match)((char *)H.Lines[H.Pos], pat, len) == 0)
^
js/src/editline/editline.c:573:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
search_hist(search, move)
^
js/src/editline/editline.c:663:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
save_yank(begin, i)
^
js/src/editline/editline.c:682:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
delete_string(count)
^
js/src/editline/editline.c:781:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
insert_char(c)
^
js/src/editline/editline.h:81:13: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
extern void rl_add_slash();
^
js/src/editline/sysunix.c:36:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
rl_ttyset(Reset)
^
js/src/editline/sysunix.c:139:1: error: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
rl_add_slash(path, p)
^
Differential Revision: https://phabricator.services.mozilla.com/D144145
netwerk/protocol/http/Http2Compression.cpp:326:12: error: variable 'removedCount' set but not used [-Werror,-Wunused-but-set-variable]
uint32_t removedCount = 0;
^
netwerk/streamconv/converters/nsDirIndexParser.cpp:376:11: error: variable 'numItems' set but not used [-Werror,-Wunused-but-set-variable]
int32_t numItems = 0;
^
Differential Revision: https://phabricator.services.mozilla.com/D144144
layout/xul/nsSprocketLayout.cpp:1116:14: error: variable 'pass' set but not used [-Werror,-Wunused-but-set-variable]
for (int pass = 1; true == limit; pass++) {
^
Differential Revision: https://phabricator.services.mozilla.com/D144143
js/src/frontend/BytecodeEmitter.cpp:4893:12: error: variable 'count' set but not used [-Werror,-Wunused-but-set-variable]
uint32_t count = cookedOrRaw->count();
^
js/src/frontend/BytecodeEmitter.cpp:4910:10: error: variable 'idx' set but not used [-Werror,-Wunused-but-set-variable]
size_t idx;
^
js/src/irregexp/RegExpNativeMacroAssembler.cpp:899:10: error: variable 'pushedNonVolatileRegisters' set but not used [-Werror,-Wunused-but-set-variable]
size_t pushedNonVolatileRegisters = 0;
^
Differential Revision: https://phabricator.services.mozilla.com/D144141
dom/midi/MIDIUtils.cpp:110:12: error: variable 'bytesRead' set but not used [-Werror,-Wunused-but-set-variable]
uint32_t bytesRead = 0;
^
Differential Revision: https://phabricator.services.mozilla.com/D144140
Previously, we used the obs_documentCreated observer message fired by editor.
However, this is fired when an editor is created anywhere in the document, even if it's for a descendant.
This meant that we were firing an editable state change on the document when a descendant became contentEditable.
In turn, this resulted in the document always having the editable state in the cache if there was a contentEditable descendant.
This message also isn't fired if an editor already exists (e.g. for a contentEditable descendant) and designMode is turned on for the document.
This meant that we wouldn't fire an event in that case, resulting in an incorrect cache.
There is no usable equivalent to detect when designMode is turned off.
While there is obs_documentWillBeDestroyed, that doesn't ever seem to get fired.
This meant that we didn't fire a state change when designMode was turned off, also resulting in an incorrect cache.
To fix all of these issues, we now watch for NS_EVENT_STATE_READWRITE changes on the root element of the document.
Because we use the root element (not the body), this should avoid duplicate state changes for contentEditable changes on the body, which get handled by LocalAccessible::DOMAttributeChanged.
Finally, we previously fired only an editable state change, but changing the editable state of a document also impacts the read-only state.
This too resulted in an incorrect cache.
We now fire a read-only state change as well.
Differential Revision: https://phabricator.services.mozilla.com/D143969
This should still serve as a good reference case for select-3.html, since it's
still simpler-in-structure than that testcase.
To the extent that the testcase really does want to test positioning of select
elements with position:absolute vs. position:fixed (I'm not sure if it does,
but just in case it does): we still have coverage for that, via the new copy of
this reftest called "select-4.html" added in the previous patch in this series.
Differential Revision: https://phabricator.services.mozilla.com/D144226
Background: When 32-bit types are passed in registers on x86-64 (and
probably other platforms?), the function call ABI does not specify the
contents of the upper half, and the Linux kernel syscall ABI appears to
have the same behavior.
In practice, the upper half is usually zero (or maybe sign-extended from
the lower half), because 64-bit operations aren't cheaper than 32-bit,
and 32-bit operations zero-extend their outputs; therefore, this case
usually doesn't happen in the first place, and any kind of spill or
register move will zero the upper half. However, arbitrary values are
possible, and a case like this has occurred with the Firefox profiler
using `clock_gettime`. (This paragraph is applicable to x86-64 and
ARM64; other 64-bit architecutures may behave differently.)
But the Chromium seccomp-bpf compiler, when testing the value of a 32-bit
argument on a 64-bit platform, requires that the value be zero-extended
or sign-extended, and (incorrectly, as far as I can tell) considers
anything else an ABI violation.
With this patch, when that case is detected, we use the `SIGSYS` handler
to zero-extend the problematic argument and re-issue the syscall.
(It would also be possible to just ignore the upper half, and that would
be faster, but that could lead to subtle security holes if the type
used in `bpf_dsl` is incorrect and the kernel really does treat it as
64-bit.)
Differential Revision: https://phabricator.services.mozilla.com/D143964