Граф коммитов

2327 Коммитов

Автор SHA1 Сообщение Дата
Sylvestre Ledru 843f943758 Bug 1519636 - Reformat recent changes to the Google coding style r=andi
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D85678
2020-08-02 15:29:15 +00:00
Gerald Squelart a496811364 Bug 1640969 - Fix gtests for tracing markers, and add PHASE tests; r=canaltinova
Depends on D85376

Differential Revision: https://phabricator.services.mozilla.com/D85377
2020-07-30 22:21:40 +00:00
Gerald Squelart 5afacba934 Bug 1640969 - Ensure Tracing markers always have correct times and kind; r=canaltinova
Depends on D85375

Differential Revision: https://phabricator.services.mozilla.com/D85376
2020-07-30 22:21:04 +00:00
Gerald Squelart ba51dfc24c Bug 1640969 - Fix StoreMarkers calls from Android code; r=canaltinova
Depends on D85374

Differential Revision: https://phabricator.services.mozilla.com/D85375
2020-07-30 22:19:27 +00:00
Gerald Squelart 3a96e30d41 Bug 1640969 - StoreMarker() doesn't need the TimeStamp argument anymore; r=canaltinova
Depends on D84595

Differential Revision: https://phabricator.services.mozilla.com/D85374
2020-07-30 15:46:53 +00:00
Gerald Squelart 03254edcc1 Bug 1640969 - Update profiler gtests for startTime and endTime in markers; r=gerald
Differential Revision: https://phabricator.services.mozilla.com/D84595
2020-07-30 08:14:29 +00:00
Gerald Squelart eb42fd2957 Bug 1640969 - Remove startTime and endTime from most marker payloads; r=gerald
Differential Revision: https://phabricator.services.mozilla.com/D84346
2020-07-30 08:14:27 +00:00
Gerald Squelart eedf3b3c6b Bug 1640969 - Add Instant, Interval, IntervalStart, IntervalEnd markers to the profiler; r=gerald
This patch is the first step to our so-called "Markers 2.0" work. It's attempting to consolidate
some ad-hoc practices in the profiler into more solid practices. This is the first step to getting
the Gecko profiler to produce a format that has the timing information applied to the serialized
marker tuple, rather than a mix in the tuple and the payload.

Differential Revision: https://phabricator.services.mozilla.com/D78990
2020-07-30 22:21:10 +00:00
Nathan Froyd e3ebda1914 Bug 1223932 - delete guard object uses from the tree; r=jwalden
CLOSED TREE

We don't need these macros anymore, for two reasons:

1. We have static analysis to provide the same sort of checks via `MOZ_RAII`
   and friends.
2. clang now warns for the "temporary that should have been a declaration" case.

The extra requirements on class construction also show up during debug tests
as performance problems.

This change was automated by using the following sed script:

```
# Remove declarations in classes.
/MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER/d
/MOZ_GUARD_OBJECT_NOTIFIER_INIT/d

# Remove individual macros, carefully.
{
  # We don't have to worry about substrings here because the closing
  # parenthesis "anchors" the match.
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_TO_PARENT)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_IN_IMPL)/)/g;

  # Remove the longer identifier first.
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT//g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM//g;
}

# Remove the actual include.
\@# *include "mozilla/GuardObjects.h"@d
```

and running:

```
find . -name \*.cpp -o -name \*.h | grep -v 'GuardObjects.h' |xargs sed -i -f script 2>/dev/null
mach clang-format
```

Differential Revision: https://phabricator.services.mozilla.com/D85168
2020-07-30 14:22:38 +00:00
Mihai Alexandru Michis a911a108d0 Backed out changeset ac9c811bc427 (bug 1223932) for causing spidermonkey rust failures.
CLOSED TREE
2020-07-30 18:23:21 +03:00
Nathan Froyd bec9f9b93a Bug 1223932 - delete guard object uses from the tree; r=jwalden
We don't need these macros anymore, for two reasons:

1. We have static analysis to provide the same sort of checks via `MOZ_RAII`
   and friends.
2. clang now warns for the "temporary that should have been a declaration" case.

The extra requirements on class construction also show up during debug tests
as performance problems.

This change was automated by using the following sed script:

```
# Remove declarations in classes.
/MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER/d
/MOZ_GUARD_OBJECT_NOTIFIER_INIT/d

# Remove individual macros, carefully.
{
  # We don't have to worry about substrings here because the closing
  # parenthesis "anchors" the match.
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_TO_PARENT)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_IN_IMPL)/)/g;

  # Remove the longer identifier first.
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT//g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM//g;
}

# Remove the actual include.
\@# *include "mozilla/GuardObjects.h"@d
```

and running:

```
find . -name \*.cpp -o -name \*.h | grep -v 'GuardObjects.h' |xargs sed -i -f script 2>/dev/null
mach clang-format
```

Differential Revision: https://phabricator.services.mozilla.com/D85168
2020-07-30 14:22:38 +00:00
Gerald Squelart 126afc3ab4 Bug 1653181 - Profiler feature 'audiocallbacktracing' controls Start/StopAudioCallbackTracing(), off by default - r=canaltinova
Differential Revision: https://phabricator.services.mozilla.com/D83749
2020-07-17 11:22:23 +00:00
Gerald Squelart 698881bb66 Bug 1653181 - Refactor Start/StopAudioCallbackTracing calls - r=canaltinova
Start/StopAudioCallbackTracing calls are always around locked_profiler_start/stop, this patch brings these calls inside the locked_ functions.

Differential Revision: https://phabricator.services.mozilla.com/D83748
2020-07-17 11:21:50 +00:00
Gerald Squelart 4c769ee76a Bug 1651102 - Safely delay handling of child profile buffer updates - r=canaltinova
Profile buffer updates could be triggered from a number of locations, including scopes where profiler and/or system locks are held, making deadlocks possible if profiler and/or system function are called.
So instead of dispatching updates to the main thread (which may use OS task queue functions), we fold updates into a static storage. The profiler sampler loop regularly triggers processing of these pending updates.

Differential Revision: https://phabricator.services.mozilla.com/D83747
2020-07-17 11:21:38 +00:00
Gerald Squelart 7ad0136123 Bug 1651102 - Safely delay handling of parent profile buffer updates - r=canaltinova
Profile buffer updates could be triggered from a number of locations, including scopes where profiler and/or system locks are held, making deadlocks possible if profiler and/or system function are called.
So instead of dispatching updates to the main thread (which may use OS task queue functions), we fold updates into a static storage. When child updates arrive, we can safely handle parent updates as well.

Child updates are assumed to arrive regularly enough to properly handle parent updates.
But in the worst case, if no updates came from children, it should mean nothing is happening, and in any case we wouldn't know how the memory is used elsewhere. Note that the chunk manager still enforces local limits automatically, so memory usage would still get limited.

Differential Revision: https://phabricator.services.mozilla.com/D83746
2020-07-17 11:21:15 +00:00
Gerald Squelart 2a75e1761c Bug 1651102 - Remove unused ProfileBufferGlobalController members - r=canaltinova
Differential Revision: https://phabricator.services.mozilla.com/D83745
2020-07-17 11:20:57 +00:00
Gerald Squelart db28bc0ab0 Bug 1648324 - Add timeout when waiting for child profiles - r=canaltinova
Knowing the time it takes for the parent process to gather its profile, we expect sub-processes not to take longer than twice that time (plus a bit more).
Each time we receive a profile, the timer is restarted* to allow more time for pending processes.
If the most current timer fires, we assume that pending processes may be frozen and unable to ever respond, so we use all profiles gathered so far.
(There is currently no indication to the user that processes are missing, this should be added in the future.)

* Tech detail: We just cancel the current timer and forget about it, then start a new one and keep track of it. When a timer fires, we can compare its address to the address of the last (most current) timer, and only that one can force the end of profile-gathering.

Differential Revision: https://phabricator.services.mozilla.com/D83626
2020-07-16 22:56:57 +00:00
Randell Jesup fa153eb95d Bug 1642772: name processes in the profiler with eTLD+1 r=gerald,dveditz
Differential Revision: https://phabricator.services.mozilla.com/D77926
2020-07-15 18:00:54 +00:00
Gerald Squelart 8049dc9c3e Bug 1651086 - Allow profiler_register_thread from thread with already-registered id - r=canaltinova
It is possible that some threads fail/forget to unregister themselves, in which case a registered thread id could get recycled by a later thread, which was not allowed before this patch.

Note: The thread name cannot currently be changed. We record a special marker with the new name, so the frontend could process it to split the thread track at that point.

We also record a marker when profiler_unregister_thread is called from an already-unregistered thread, this could help find reg/unreg mismatches or nesting in Firefox threads.

Differential Revision: https://phabricator.services.mozilla.com/D83293
2020-07-13 13:18:29 +00:00
Gerald Squelart 7610ff4326 Bug 1651086 - Handle tgkill failure - r=canaltinova
On Linux (including Android), it was assumed that a registered thread could always be suspended through `tgkill`.
However in some cases a thread may not be correctly unregistered, in which case this would trigger `MOZ_ASSERT` or wait forever in the following loop.

This will especially be needed when `profiler_{,un}register_thread()` are made less strict in the following patch.

Windows and Mac already handle suspension failures.

Differential Revision: https://phabricator.services.mozilla.com/D83292
2020-07-13 13:14:32 +00:00
Kris Maglione 6a39211860 Bug 1464542: Part 3b - Add existing Services.jsm registrations to the new services cache. r=mccr8,geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D81419
2020-07-09 21:42:25 +00:00
Csoregi Natalia b355fcc4bf Backed out 6 changesets (bug 1464542) for xpcshell failures on test_Services.js. CLOSED TREE
Backed out changeset b50af9005851 (bug 1464542)
Backed out changeset 9d3a0ea2cf65 (bug 1464542)
Backed out changeset 71c3475fcbc2 (bug 1464542)
Backed out changeset 51ff93220a95 (bug 1464542)
Backed out changeset e84de1547c09 (bug 1464542)
Backed out changeset bbecc16d08eb (bug 1464542)
2020-07-09 23:19:26 +03:00
Kris Maglione d09458dc51 Bug 1464542: Part 3b - Add existing Services.jsm registrations to the new services cache. r=mccr8,geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D81419
2020-07-09 17:59:16 +00:00
Nika Layzell a3579f6f46 Bug 1458043 - Stop converting promises to nsISupports in xpconnect, r=kmag
Differential Revision: https://phabricator.services.mozilla.com/D82616
2020-07-07 22:20:01 +00:00
Gerald Squelart 6447251c76 Bug 1640325 - FileIO markers show the type of file if known - r=canaltinova
Platform-specific observations will be able to specify a file type.
They will appear in distinct rows in the profiler.firefox.com Marker Chart.
The default type is "File", which is shown in markers as "FileIO" like before.

Differential Revision: https://phabricator.services.mozilla.com/D80399
2020-07-06 23:42:55 +00:00
Kershaw Chang e467f29f69 Bug 1650068 - Enable profiler tests r=JuniorHsu
Differential Revision: https://phabricator.services.mozilla.com/D82019
2020-07-02 15:25:44 +00:00
Jim Porter cdcaab85f1 Bug 1649670 - Fix "control reaches end of non-void function" in ProfilerMarkerPayload.cpp; r=gerald
Differential Revision: https://phabricator.services.mozilla.com/D81884
2020-07-02 00:08:56 +00:00
Gerald Squelart 56736f31c3 Bug 1648507 - Distinguish pausing sampling only from pausing the whole profiler - r=canaltinova,perftest-reviewers,geckoview-reviewers,agi
The profiler can be "paused", which stops sampling, and since bug 1578329 stops markers as well.

Some test suites use pausing between tests (to better differentiate the tests, to keep the profiler ready to run, and to lower the amount of recorded data). But this causes problems with some tracing markers, as their matching ends have not been recorded (e.g., an end marker is missing), which show up as very loooong markers.
To solve this, we need to be able to pause sampling only, but keep recording markers.
But we still need to be able to pause the whole profiler, in particular before capturing, to avoid recording anything around that time.

This big patch is mostly mechanical changes: Wherever there are "Pause" and "Unpause/Resume" profiler functions, we add matching "PauseSampling" and "UnpauseSampling/ResumeSampling" functions that only impact the periodic sampling loop; And existing "Pause/Unpause/Resume" imply pausing sampling as well.
Exceptions and extra work:
- nsIProfiler (the JS API) already had `Pause/ResumeSampling()`, which misleadingly paused everything! Now they do the right thing, and we have `Pause/Resume()` as well.
- All tests using `Pause/ResumeSampling()` now use `Pause/Resume()`, except for Talos tests that only pause sampling between tests; Added some extra `Pause()` calls to pause everything before capturing profiles.
- GeckoJavaSampler doesn't handle pausing/resuming everything, this should be done in a follow-up bug.
- Sampling-only pauses are not streamed into JSON. If needed, we should follow-up, with potential work on the front-end to deal with these.

Differential Revision: https://phabricator.services.mozilla.com/D81492
2020-07-02 01:36:27 +00:00
Simon Giesecke 9364b353d4 Bug 1648010 - Remove NS_NAMED_LITERAL_CSTRING and NS_NAMED_LITERAL_STRING macros. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D80631
2020-07-01 08:42:31 +00:00
Simon Giesecke cd8b8939b9 Bug 1648010 - Replace uses of NS_LITERAL_STRING/NS_LITERAL_CSTRING macros by _ns literals. r=geckoview-reviewers,jgilbert,agi,hsivonen,froydnj
Differential Revision: https://phabricator.services.mozilla.com/D80860
2020-07-01 08:29:29 +00:00
Jim Porter 632c7aa9aa Bug 1613496 - Add IPC profiler markers to track when messages are processed by the IO thread queues r=gerald,froydnj
This adds 3 new profiler markers for each IPC message:

 * One just before the first byte is sent over the IPC channel
 * One just after the last byte is sent over the IPC channel
 * One just after the last byte is received from the IPC channel

With the already-existing IPC markers (for when SendXXX and RecvXXX are
called), this allows us to calculate the following statistics:

 * Send thread latency
 * IPC send duration
 * IPC recv latency
 * Recv thread latency

For more information on how this is presented in the UI, see:
<https://github.com/firefox-devtools/profiler/pull/2535>.

Differential Revision: https://phabricator.services.mozilla.com/D70790
2020-06-30 18:39:42 +00:00
Paul Adenot ee148dcec6 Bug 1649233 - Add a new ProfilerMarkerPayload that is just a time duration. r=gerald,canaltinova
Differential Revision: https://phabricator.services.mozilla.com/D81592
2020-06-30 14:25:09 +00:00
Gerald Squelart c1fe2ae51c Bug 1649056 - Pre-record some meta information before locking the profiler mutex - r=canaltinova
Some profile meta information can be gathered before the profiler mutex must be locked.
This reduces the main-thread locking when capturing.
Most importantly, it prevents deadlocking in case any of the data-gathering operation would itself rely on profiler-locking functions (e.g., starting a thread, which requires the lock to register the new thread with the profiler).

Differential Revision: https://phabricator.services.mozilla.com/D81491
2020-06-30 13:40:13 +00:00
Narcis Beleuzu 3de598d4a7 Backed out 2 changesets (bug 1649233) for bustages on ProfilerMarkerPayload.h . CLOSED TREE
Backed out changeset 399e54895a75 (bug 1649233)
Backed out changeset 3955edb371cf (bug 1649233)
2020-06-30 16:36:06 +03:00
Paul Adenot d9cb2a1db6 Bug 1649233 - Add a new ProfilerMarkerPayload that is just a time duration. r=gerald,canaltinova
Differential Revision: https://phabricator.services.mozilla.com/D81592
2020-06-30 12:10:00 +00:00
Gerald Squelart 3fbe4a7b38 Bug 1648972 - Fix profiler non-unified build - r=canaltinova
Mostly missing includes, and missing namespace qualifiers.

Differential Revision: https://phabricator.services.mozilla.com/D81451
2020-06-30 05:07:21 +00:00
Narcis Beleuzu 51f0465656 Backed out 2 changesets (bug 1648972, bug 1649056) for assertion failure on ExtensionPolicyService.cpp . CLOSED TREE
Backed out changeset 6a8b446a95a0 (bug 1649056)
Backed out changeset 56b166e41900 (bug 1648972)
2020-06-30 08:00:31 +03:00
Gerald Squelart 4962aa68cc Bug 1649056 - Pre-record some meta information before locking the profiler mutex - r=canaltinova
Some profile meta information can be gathered before the profiler mutex must be locked.
This reduces the main-thread locking when capturing.
Most importantly, it prevents deadlocking in case any of the data-gathering operation would itself rely on profiler-locking functions (e.g., starting a thread, which requires the lock to register the new thread with the profiler).

Differential Revision: https://phabricator.services.mozilla.com/D81491
2020-06-30 01:43:36 +00:00
Gerald Squelart b7307aabfe Bug 1648972 - Fix profiler non-unified build - r=canaltinova
Mostly missing includes, and missing namespace qualifiers.

Differential Revision: https://phabricator.services.mozilla.com/D81451
2020-06-30 01:43:24 +00:00
Mike Hommey 77976c2cc1 Bug 1463035 - Remove MOZ_SIGNAL_TRAMPOLINE. r=gerald
This was previously r=jchen and landed, but was backed out because some
Android tests were running on an unrealistically old Linux kernel. These
tests have been retired, so this can reland.

Differential Revision: https://phabricator.services.mozilla.com/D81278
2020-06-26 03:48:49 +00:00
Mike Hommey 219d10e7ce Bug 1648654 - Remove AutoObjectMapperFaultyLib. r=gerald
Bug 1486524 disabled the features from the custom linker that required
AutoObjectMapperFaultyLib. We can now rely on AutoObjectMapperPOSIX
instead.

Differential Revision: https://phabricator.services.mozilla.com/D81264
2020-06-26 01:26:56 +00:00
Mike Hommey a1386ca439 Bug 1648340 - Set LOCAL_INCLUDES properly for AutoObjectMapper.h. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D81023
2020-06-25 10:59:32 +00:00
Nazım Can Altınova 8e7aefa97e Bug 1624993 - Transfer all the Android markers to platform side while capturing the profile r=gerald
Differential Revision: https://phabricator.services.mozilla.com/D79124
2020-06-25 14:29:29 +00:00
Nazım Can Altınova 738659e709 Bug 1624993 - Add StoreMarker function to unify the marker insertion points. r=gerald
Differential Revision: https://phabricator.services.mozilla.com/D79423
2020-06-25 14:28:54 +00:00
Nazım Can Altınova a74d238798 Bug 1624993 - Add PutObjects method inside the ProfilerBuffer class as well. r=gerald
Differential Revision: https://phabricator.services.mozilla.com/D79122
2020-06-25 14:28:41 +00:00
Gerald Squelart 665b0d71d2 Bug 1630448 - MOZ_PROFILER_STARTUP_NO_BASE=1 prevents Base Profiler from running when MOZ_PROFILER_STARTUP is set - r=canaltinova
The Base Profiler is still recent and barely used, so it may contain some bugs.
With bug 1586939, the Base Profiler is now used more often because it is controlled the same way as the Gecko Profiler.
This has surfaced some intermittent issues, which pollute existing tests.

Until the root cause is found (see bug 1648325), setting `MOZ_PROFILER_STARTUP_NO_BASE=1` prevents the Base Profiler from running. This may be used where problems are visible, to diagnostic them and/or reduce them where needed.

Differential Revision: https://phabricator.services.mozilla.com/D81018
2020-06-25 07:13:43 +00:00
Gerald Squelart 8b62df9f8d Bug 1642726 - Abort profiler_add_native_allocation_marker if profiler mutex is already locked - r=gregtatum
To avoid deadlocks between the profiler mutex and another mutex that may be locked when an allocation is intercepted, we now abort this interception if the profiler mutex is already locked.

Differential Revision: https://phabricator.services.mozilla.com/D79413
2020-06-22 21:30:10 +00:00
Gerald Squelart 8c64fc6990 Bug 1642726 - maybelocked_profiler_add_marker_for_thread - r=gregtatum
This function can be called whether the profiler mutex is locked or not. If locked, the provided pointer to the profiler mutex is used internally, otherwise the mutex will be locked as needed.

Differential Revision: https://phabricator.services.mozilla.com/D79412
2020-06-22 14:36:18 +00:00
Gerald Squelart b834db3337 Bug 1642726 - locked_profiler_get_backtrace - r=gregtatum
`locked_profiler_get_backtrace` can be used internally from places that already hold the profiler lock.

Differential Revision: https://phabricator.services.mozilla.com/D79411
2020-06-22 14:36:16 +00:00
Gerald Squelart ddbeeb188c Bug 1642726 - PSAutoTryLock - r=gregtatum
PSAutoTryLock attempts to lock the mutex, but gives up immediately if it's already locked.
This can be used in profiler functions that may be called from unknown code, to avoid deadlocks involving the profiler mutex and another mutex that could be indirectly used by the profiler itself.

Differential Revision: https://phabricator.services.mozilla.com/D79410
2020-06-22 21:30:06 +00:00