Commit Graph

1132 Commits

Author SHA1 Message Date
Nicholas Nethercote
6e2f13d8c2 Bug 1351946 (part 2) - Inline and remove GetEntries() and GetInterval(). r=mstange.
--HG--
extra : rebase_source : 127ff560940a93bf9bd5298ac6ab92812bdd94c7
2017-03-30 17:49:27 +11:00
Nicholas Nethercote
35bc116a65 Bug 1351946 (part 1) - Remove SigstartHandler from the profiler. r=mstange.
It was only needed for B2G.

--HG--
extra : rebase_source : 2063f1560503989d0ae0d3f2609e031bd06851a9
2017-03-30 16:27:20 +11:00
Nicholas Nethercote
ecaa485dee Bug 1348024 - Make the env vars MOZ_PROFILER_{ENTRIES,INTERVAL} specific to startup. r=mstange.
The patch also renames profiler_usage() as PrintUsageThenExit().

--HG--
extra : rebase_source : 28b49f9f99d760ef1fcd1d56f8035caa0c5f2192
2017-03-23 13:44:15 +11:00
Nicholas Nethercote
2a3ba6e9fa Bug 1351528 (part 2) - Rename TracingMetadata as TracingKind. r=mstange.
"Metadata" regularly confuses me, because it suggests something complicated
rather than a simple enum.

This change also has the benefit of removing inconsistent capitalization
("Metadata" vs. "MetaData").

--HG--
extra : rebase_source : b651e124142c8d93139d22dae1c993c899be4d7a
2017-03-29 13:56:14 +11:00
Nicholas Nethercote
4285c8907d Bug 1351528 (part 1) - Streamline TracingMetadata. r=mstange.
This patch:

- Removes TRACING_EVENT_BACKTRACE, which is unused.

- Removes TRACING_DEFAULT and replaces all its uses with TRACING_EVENT, because
  there is no difference in how those two are used.

- Removes TRACING_TIMESTAMP, which is unused and also doesn't do anything
  different to TRACING_EVENT.

--HG--
extra : rebase_source : 69af1c53aa918798d8050e6b9d1a2658a0902af5
2017-03-29 13:52:47 +11:00
Nicholas Nethercote
37a83290da Bug 1351523 - Reorder profiler_get_start_params() arguments. r=mstange.
profiler_start() and nsProfilerStartParams() both have features before filters.
This patch makes profiler_get_start_params() follow suit.
2017-03-29 13:22:29 +11:00
Nicholas Nethercote
a8a6c5c4ba Bug 1348776 (part 2) - Fix up HAVE_NATIVE_UNWIND. r=mstange.
This patch simplifies and increases the consistency of how HAVE_NATIVE_UNWIND
is used.

- Its definition is moved from platform.h to platform.cpp, because the latter
  is the only file that uses it.

- It's now defined in the same place as USE_{NS,EHABI,LUL}_STACKWALK, and used
  in preference to those, where possible. Also, it's now defined on Linux and
  Android even if MOZ_PROFILING is not.

- HAVE_NATIVE_UNWIND is now used consistently and by itself for all relevant
  conditions, including when defining the presence and use of the "stackwalk"
  feature.

- The patch inlines and removes is_native_unwinding_avail().

Note that MOZ_PROFILING must be defined for HAVE_NATIVE_UNWIND to be true on
Windows and Mac, but not on Linux and Android.

--HG--
extra : rebase_source : 5be3e5fe65706a15179a2cf46ba9451f68fff815
2017-03-27 17:04:56 +11:00
Nicholas Nethercote
399c98ac3c Bug 1348776 (part 1) - Fix a crash in the profiler when MOZ_PROFILING is undefined. r=mstange.
Bug 1339695 part 8 unintentionally changed behaviour in profiler_init() when
MOZ_PROFILING is undefined. This patch undoes that change.

--HG--
extra : rebase_source : 16e992382e06fbc673555c87499c236e2b39bc7f
2017-03-27 16:49:41 +11:00
Nicholas Nethercote
32c944de0f Bug 1350212 - Improve TickSample. r=jseward.
This patch does the following.

- Renames TickSample's members to mFoo style.

- Changes TickSample's constructor to set mTimeStamp.

- Moves TickSample creation from
  SamplerThread::SuspendAndSampleAndResumeThread() to SamplerThread::Run(), so
  it's not repeated for each platform.

- Changes TickSample::PopulateContext() so it takes a |tick_context_t*|
  parameter, which avoids having to cast from |void*|.
2017-03-24 15:09:05 +11:00
Nicholas Nethercote
56501f9f6f Bug 1350211 - Re-enable native stack walking on Android. r=mstange.
Bug 1339695 part 8 accidentally disabled native stack walking on Android by
using GP_arm_android instead of GP_PLAT_arm_android in a #if. This patch fixes
that. It also fixes a couple of compile errors that crept into the relevant
code while it was disabled.

--HG--
extra : rebase_source : a7a94b018b8de7a7ca3c621a2b662859a65e69c1
2017-03-24 17:02:54 +11:00
Thinker K.F. Li
885084ba60 Bug 1323076 - Part 1: TaskTracer with only flag checking overhead. r=cervantes 2017-03-22 21:43:00 +01:00
Nicholas Nethercote
e0caeb137c Bug 1346132 (part 5) - Remove ThreadInfo::CanInvokeJS. r=jseward.
It's unused.

--HG--
extra : rebase_source : 37483099d82004ba1d66cf7a3bb60d5cefd3f03d
2017-03-23 12:42:55 +11:00
Nicholas Nethercote
be676c67d2 Bug 1346132 (part 4) - Improve the profiler's logging output. r=jseward.
This patch adds logging to some important functions that currently lack it.
Thread registration/unregistration is done with DEBUG_LOG because it's
more verbose than the other profiler logging, but less verbose than LUL's
logging.

The patch also scraps the BEGIN/END logging pairs because they bloat the output
for little gain. Now it just logs on function entry.

--HG--
extra : rebase_source : 3ef3d263c19cda03198e8b3a9ab89866f74ed1cd
2017-03-15 10:56:50 +11:00
Nicholas Nethercote
f1d3df720c Bug 1346132 (part 3) - Remove the profiler's bespoke logging system in favour of MOZ_LOG. r=erahm,jseward.
The profiler will use level 3 (Info) and 4 (Debug) logging, though this patch
only uses level 3. LUL will use level 5 (Verbose) debugging.

The patch also tweaks parts of the the usage message, including adding
MOZ_PROFILER_{STARTUP,SHUTDOWN} to it.

--HG--
extra : rebase_source : f43a023912fbce993ed367cdd26b8f25f25381de
2017-03-14 16:49:12 +11:00
Nicholas Nethercote
e105cad299 Bug 1346132 (part 2) - Remove set_stderr_callback(). r=mstange.
It's a very general mechanism for replacing the implementation of
printf_stderr().

It's primarily used by the profiler, sparingly, and not in an important way.
Worse, it prevents us from using MOZ_LOG in the profiler, which is something I
want. Because if any code that locks gPSMutex also calls MOZ_LOG, that then
calls printf_stderr(), which calls profiler_log(), which locks gPSMutex, which
deadlocks.

The only other use of set_stderr_callback() is for the ultra-hacky,
for-local-use-only copy_stderr_to_file() function, which was added for B2G
debugging and is no longer necessary.

This patch removes set_stderr_callback() altogether.

--HG--
extra : rebase_source : d31ecb482fe5899f62dc56a38e87d91f9271bab0
2017-03-16 08:17:56 +11:00
Julian Seward
31acb1259a Bug 1344169 - Factor out the common parts of SamplerThread::Run(). r=n.nethercote.
All three platform-*.cpp files have similar structure, most especially for
SamplerThread::Run(), with considerable duplication.  This patch factors out
the common parts into a single implementation in platform.cpp.

* The top level structure of class SamplerThread has been moved to
  platform.cpp.

* The class has some target-dependent fields, relating to signal handling and
  thread identity.

* There's a single implementation of Run() in platform.cpp.

* AllocPlatformData() and PlatformDataDestructor::operator() have also been
  commoned up and moved into platform.cpp.

* Time units in SamplerThread have been tidied up.  We now use microseconds
  throughout, except in the constructor.  All time interval field and variable
  names incorporate the unit (microseconds/milliseconds) for clarity.  The
  Windows uses of such values are scaled up/down by 1000 accordingly.

* The pre-existing MacOS Run() implementation contained logic that attempted
  to keep "to schedule" in the presence of inaccuracy in the actual sleep
  intervals.  This now applies to all targets.  A couple of comments on this
  code have been added.

* platform-{win32,macos,linux-android}.cpp have had their Run() methods
  removed, and all other methods placed in the same sequences, to the extent
  that is possible.

* In the Win32 and MacOS implementations, Thread::SampleContext has been
  renamed to Thread::SuspendSampleAndResumeThread as that better describes
  what it does.  In the Linux/Android implementation there was no such
  separate method, so one has been created.

* The three Thread::SuspendSampleAndResumeThread methods have been commented
  in such a way as to emphasise their identical top level structure.

* The point in platform.cpp where platform-{win32,macos,linux-android}.cpp are
  #included has been moved slightly earlier in the file, into the
  SamplerThread encampment, as that seems like a better place for it.

--HG--
extra : rebase_source : 0f93e15967b810c09e645fa593dbf85f94b53a9b
2017-03-10 16:10:14 +01:00
Carsten "Tomcat" Book
492970c342 merge mozilla-inbound to mozilla-central a=merge 2017-03-23 13:44:09 +01:00
Julian Seward
660aaef3f5 Bug 1345032 - Further cost reductions for ProfileBuffer::FindLastSampleOfThread. r=n.nethercote.
ProfileBuffer::FindLastSampleOfThread currently involves a linear search
backwards through the sample buffer.  Profiling showed that to be the largest
profiler cost by far, at least on Linux.  Bugs 1344118 and 1344258
significantly improve the situation, collectively reducing the cost by a
factor of at least 5 and often much more.  But the linear search is still
present and still dominant.  The worst of it is that it's unnecessary: we
could achieve the same by recording the start point of the most recent sample
for each thread in that thread's ThreadInfo record.

This patch does exactly that, adding the type ProfileBuffer::LastSample to
store the start points.  LastSample also includes the ID of the thread it
pertains to as a read-only field, as that is needed in various places.

addTag doesn't check whether we're overwriting buffer entries containing start
points.  Instead, FindLastSample checks whether the entry pointed to the
LastSample it is given still contains a marker.

--HG--
extra : rebase_source : 2987ec744a5c16e8b6814abe7efb507fc7280605
2017-03-22 11:18:31 +01:00
Luke Wagner
2164377bd8 Bug 1334504 - Baldr: maintain fp register instead a virtual fp (r=bbouvier)
MozReview-Commit-ID: 2Mi60u3DyJg

--HG--
extra : rebase_source : 155ce830bcd55e7f9fdf890d4da4b1c12377f12b
2017-03-22 17:26:05 -05:00
Markus Stange
c1e6abcc0a Bug 1321907 - Remove mIsProfilerActive. r=njn
Replace it with profiler_is_active() in one place, and simply remove it in the
other places. These other places are:
 - Around the call to profiler_OOP_exit_profile: profiler_OOP_exit_profile
   itself already checks whether the profiler is running and does nothing if
   it's not.
 - When handling the 'profiler-subprocess-gather' notification. This
   notification is sent by the profiler because it's interested in the
   profile, so there's little reason to reject it.
 - In RecvProfile: If the child process sent us a profile, it did so in
   response to a GatherProfile request, so chances are that we're still
   interested in that response.

These changes may get us a little closer to a state where you can call
getProfileDataAsync, stop the profiler before the content process profiles
have all come in, and then still receive a response with all the profiles.
At the moment, stopping the profiler will abort the profile gathering process,
but that seems more like an accident and less like the behavior you'd want.

MozReview-Commit-ID: 2tRXC70BztJ

--HG--
extra : rebase_source : 3b2f6f51d75d5f0d439e1a815d84164a5a763603
2017-03-22 21:45:10 -04:00
Markus Stange
2a4fe61200 Bug 1321907 - Move cross process profiler controlling code from ContentParent and PluginModuleParent into a new class called CrossProcessProfilerController. r=mconley,njn
MozReview-Commit-ID: HY2iWHlDaEy

--HG--
extra : rebase_source : a91e7b40ea2dbd6d75c2d1a62c359d7ea983fe3c
2017-03-22 21:44:59 -04:00
Markus Stange
730b4fc829 Bug 1339897 - Rename PROFILER_LABEL_PRINTF to PROFILER_LABEL_DYNAMIC and make it really cheap. r=Ehsan,njn
Instead of copying and concatenating strings into an mDest buffer in
SamplerStackFramePrintfRAII, require callers to keep the string buffer alive
for the duration of the current scope, and store the pointer to the annotation
string in the ProfileEntry. During stackwalking, concatenate the label and the
annotation (separated by a space) and store the resulting string in the
profile buffer.

MozReview-Commit-ID: GEjcLrhhdvb

--HG--
extra : rebase_source : 683749421ee2122805a249cf413e882ee5f33331
2017-03-22 19:37:33 -04:00
Wes Kocher
5d7c0bee97 Merge m-c to inbound a=merge
MozReview-Commit-ID: 860fBgcgHiy
2017-03-20 18:28:24 -07:00
Nicholas Nethercote
fa5cfb7c00 Bug 1348374 - Remove paf_child(). r=jseward.
It's not necessary and causes hangs.

The patch also inlines setup_atfork() and moves the Linux-only code closer to
the Linux-only PlatformInit(), and tweaks the comments a bit.

--HG--
extra : rebase_source : 0db23d649d9468b9308b881c0bbf5ea25a95ea13
2017-03-21 09:52:15 +11:00
Gabriele Svelto
7b64f6d545 Bug 1319071 - Make crash minidumps use the same format for filenames on Linux as on other platforms; r=ted
This patch forks the breakpad files used for GUID generation and replaces them
with copies living together with the rest of the forked sources. Since other
files in the breakpad sources rely on the original files being present they
haven't been removed but we deliberately define their inclusion definitions in
the build system to prevent them from contributing to the build. This ensures
that we always use our own version of the GUID generator while not touching
the non-forked sources.

MozReview-Commit-ID: 5kW74yAPUDW

--HG--
rename : toolkit/crashreporter/google-breakpad/src/common/linux/guid_creator.cc => toolkit/crashreporter/breakpad-client/linux/handler/guid_generator.cc
rename : toolkit/crashreporter/google-breakpad/src/common/linux/guid_creator.h => toolkit/crashreporter/breakpad-client/linux/handler/guid_generator.h
extra : rebase_source : 60eb027258833996777469d2a13142077486bee9
2017-03-14 14:37:26 +01:00
Markus Stange
5c5945bfa0 Bug 1329111 - Change the nsIProfiler shared library information API. r=njn
API before this change:
 - nsIProfiler::getSharedLibraryInformation() returns a string containing a
   JSON array of libraries.
 - The profile format is at version 3.
 - Every profile has a "libs" field that contains the same JSON string as the
   return value of nsIProfiler::getSharedLibraryInformation.
 - The array of libraries is not sorted.
 - Each library has a "name" field that contains:
    - The module's debug name on Windows
    - The full path to the binary on Mac + Linux

API after this change:
 - nsIProfiler::getSharedLibraryInformation() is removed.
 - nsIProfiler has a readonly property called sharedLibraries.
 - The profile format is at version 4.
 - Every profile has a "libs" field that contains the same array as
   nsIProfiler.sharedLibraries, no longer as a JSON string but as a regular
   array.
 - The array of libraries is sorted by start address.
 - Each library has a "name" field that contains the binary file's basename,
   on all platforms.
 - Each library has a "path" field that contains the full path to the binary,
   on all platforms.
 - Each library has a "debugName" field that contains the library's debug
   name, on all platforms. On Windows, the debug name is the filename
   (basename) of the pdb file for that binary. On other platforms, debugName
   is the same as |name|.
 - Each library has a "debugPath" field that contains the absolute path
   library's pdb file on Windows; on non-Windows, debugPath and path are the
   same.
 - Each library has an "arch" field that is either an empty string (Linux +
   Windows) or the library's architecture; it'll differentiate between the
   architectures "x86_64" and "x86_64h". (x86_64h is used for binaries that
   contain instructions that are specific to the Intel Haswell
   microarchitecture.)

MozReview-Commit-ID: 8Nrs4dyHhDS

--HG--
extra : rebase_source : 4039926ae4d776bf53ea71df5fe3f8200d3e2784
extra : source : 4e282aa03422de5b8d51e1aaeb3e53ee547293dd
2017-03-14 18:59:20 -04:00
Markus Stange
e552737d0a Bug 1329111 - Use JSONWriter when generating the GetSharedLibraryInfo() JSON. r=njn
MozReview-Commit-ID: LZalkkFreym

--HG--
extra : rebase_source : 71d95c3ff6454d72515c33ea7df742d95e94872b
2017-03-13 17:08:38 -04:00
Markus Stange
5d618f99af Bug 1329111 - Record shared library architecture on Mac. r=glandium,njn
This is interesting information on Mac because some system libraries come in
two 64 bit versions: a regular one, and one that contains Haswell-specific
instructions. The former 'architecture' is called x86_64 and the latter is
called x86_64h (h for Haswell).

We set arch to the empty string on non-Mac platforms. It's not all that
interesting on those platforms because there will be only one architecture
in the binary at the given path, unlike on Mac where you can have fat
binaries with multiple architectures.

MozReview-Commit-ID: Dgnslv0D3Ug

--HG--
extra : rebase_source : cf1fcfc1635d373eaeea35aad2f73b235097c748
2017-03-13 17:51:41 -04:00
Markus Stange
4be87b17a8 Bug 1329111 - Supply SharedLibraryInfo with the absolute module path and debug path on all platforms. r=marco
MozReview-Commit-ID: 9R3ecPxGoMr

--HG--
extra : rebase_source : 3cc2af0e5c2b40f349f9e77e06731188d9af07ea
2017-03-14 18:26:50 -04:00
Markus Stange
0048861a6b Bug 1329111 - Rename SharedLibraryInfo::mName to mModuleName, and consistently cut off the path on all platforms. r=marco
MozReview-Commit-ID: 8gqqVjTjy1Z

--HG--
extra : rebase_source : 646340086cd46fe023495bfca140e859c98a5205
2017-03-14 17:07:43 -04:00
Sebastian Hengst
8b715d46ad Backed out changeset ff2306d8e07f (bug 1329111) for lacking a semicolon in devtools/server/performance/profiler.js. r=backout 2017-03-16 20:00:34 +01:00
Sebastian Hengst
224e25992e Backed out changeset 2656a5fa88a2 (bug 1329111) 2017-03-16 19:59:53 +01:00
Sebastian Hengst
01760e033d Backed out changeset 54d438799138 (bug 1329111) 2017-03-16 19:59:48 +01:00
Sebastian Hengst
43b6b924d6 Backed out changeset 2f4e6242c90c (bug 1329111) 2017-03-16 19:59:43 +01:00
Sebastian Hengst
80e2e16b3e Backed out changeset eaac943ff2f6 (bug 1329111) 2017-03-16 19:59:39 +01:00
Markus Stange
32230f6988 Bug 1329111 - Change the nsIProfiler shared library information API. r=njn
API before this change:
 - nsIProfiler::getSharedLibraryInformation() returns a string containing a
   JSON array of libraries.
 - The profile format is at version 3.
 - Every profile has a "libs" field that contains the same JSON string as the
   return value of nsIProfiler::getSharedLibraryInformation.
 - The array of libraries is not sorted.
 - Each library has a "name" field that contains:
    - The module's debug name on Windows
    - The full path to the binary on Mac + Linux

API after this change:
 - nsIProfiler::getSharedLibraryInformation() is removed.
 - nsIProfiler has a readonly property called sharedLibraries.
 - The profile format is at version 4.
 - Every profile has a "libs" field that contains the same array as
   nsIProfiler.sharedLibraries, no longer as a JSON string but as a regular
   array.
 - The array of libraries is sorted by start address.
 - Each library has a "name" field that contains the binary file's basename,
   on all platforms.
 - Each library has a "path" field that contains the full path to the binary,
   on all platforms.
 - Each library has a "debugName" field that contains the library's debug
   name, on all platforms. On Windows, the debug name is the filename
   (basename) of the pdb file for that binary. On other platforms, debugName
   is the same as |name|.
 - Each library has a "debugPath" field that contains the absolute path
   library's pdb file on Windows; on non-Windows, debugPath and path are the
   same.
 - Each library has an "arch" field that is either an empty string (Linux +
   Windows) or the library's architecture; it'll differentiate between the
   architectures "x86_64" and "x86_64h". (x86_64h is used for binaries that
   contain instructions that are specific to the Intel Haswell
   microarchitecture.)

MozReview-Commit-ID: 8Nrs4dyHhDS

--HG--
extra : rebase_source : 4039926ae4d776bf53ea71df5fe3f8200d3e2784
extra : source : 4e282aa03422de5b8d51e1aaeb3e53ee547293dd
2017-03-14 18:59:20 -04:00
Markus Stange
05996c7dbf Bug 1329111 - Use JSONWriter when generating the GetSharedLibraryInfo() JSON. r=njn
MozReview-Commit-ID: LZalkkFreym

--HG--
extra : rebase_source : 71d95c3ff6454d72515c33ea7df742d95e94872b
2017-03-13 17:08:38 -04:00
Markus Stange
5fdbdd6b74 Bug 1329111 - Record shared library architecture on Mac. r=glandium,njn
This is interesting information on Mac because some system libraries come in
two 64 bit versions: a regular one, and one that contains Haswell-specific
instructions. The former 'architecture' is called x86_64 and the latter is
called x86_64h (h for Haswell).

We set arch to the empty string on non-Mac platforms. It's not all that
interesting on those platforms because there will be only one architecture
in the binary at the given path, unlike on Mac where you can have fat
binaries with multiple architectures.

MozReview-Commit-ID: Dgnslv0D3Ug

--HG--
extra : rebase_source : cf1fcfc1635d373eaeea35aad2f73b235097c748
2017-03-13 17:51:41 -04:00
Markus Stange
13cdaa1908 Bug 1329111 - Supply SharedLibraryInfo with the absolute module path and debug path on all platforms. r=marco
MozReview-Commit-ID: 9R3ecPxGoMr

--HG--
extra : rebase_source : 3cc2af0e5c2b40f349f9e77e06731188d9af07ea
2017-03-14 18:26:50 -04:00
Markus Stange
c76fa9b925 Bug 1329111 - Rename SharedLibraryInfo::mName to mModuleName, and consistently cut off the path on all platforms. r=marco
MozReview-Commit-ID: 8gqqVjTjy1Z

--HG--
extra : rebase_source : 646340086cd46fe023495bfca140e859c98a5205
2017-03-14 17:07:43 -04:00
Nicholas Nethercote
1b01d89d14 Bug 1347348 (part 4) - Fix comments in GeckoProfiler.h. r=mstange.
Specifically:

- Improve the documentation on all the profiler_*() functions, esp. about what
  they do when the profiler is inactive.

- Fix numerous spelling mistakes.

- Wrap all comment lines at 80 chars.

- Change /**/ comments to // comments throughout.

--HG--
extra : rebase_source : 17f766301416806764413cea7f949c42e7721ab9
2017-03-07 16:54:58 +11:00
Nicholas Nethercote
d982dc67b5 Bug 1347348 (part 3) - Rejig thread registration in the profiler. r=mstange.
Specifically:

- Renames kGeckoThreadName as kMainThreadName, and RegisterCurrentThread() as
  locked_register_thread().

- Removes the aIsMainThread parameter from locked_register_thread(). It can be
  computed via NS_IsMainThread().

- Moves the PseudoStack initialization within locked_register_thread(), so it's
  done in a single place. Also calls init() at that place; previously the
  non-main threads didn't have init() called on their tlsPseudoStack! According
  to ThreadLocal.h this shouldn't have worked...

- Adds some !NS_IsMainThread() assertions to
  profiler_{register,unregister}_thread().

--HG--
extra : rebase_source : c44836dddc988c1f49ec91eccd35f088e0d30ed1
2017-03-07 16:54:56 +11:00
Nicholas Nethercote
af3c0f7fd5 Bug 1347348 (part 2) - Add a comment about the profiler's "startTime" field. r=mstange.
It took me some time to understand this snippet of code, so I wrote a comment
about it.

--HG--
extra : rebase_source : b25fc8384a4fe00df7d8a0585e7a1944226fa212
2017-03-14 16:47:18 +11:00
Nicholas Nethercote
0414a346c4 Bug 1347348 (part 1) - Don't export ProfilerBacktrace.h. r=mstange.
ProfilerBacktrace.h doesn't need to be visible outside the profiler because
the ProfilerBacktrace type is only used in pointers outside the profiler and
the existing forward declaration in GeckoProfiler.h suffices for that.

--HG--
rename : tools/profiler/public/ProfilerBacktrace.h => tools/profiler/core/ProfilerBacktrace.h
extra : rebase_source : 50752626fbd6948de26e193956ed7b82b41b1830
2017-03-07 16:54:50 +11:00
Greg Tatum
23488bd6ef Bug 1346776 - Add the process id in the Gecko Profiler; r=mstange
I also tweaked the int type of the JSON writer to match the IntProperty
method.

MozReview-Commit-ID: rtxLDKtJQZ

--HG--
extra : rebase_source : fa924479926cad6e07755d10c049a40ad896c3cd
2017-03-13 14:47:15 +01:00
Andi-Bogdan Postelnicu
0b7f0cc371 Bug 1346725 - removed useless null check in DoSampleStackTrace. r=mstange
MozReview-Commit-ID: 374xPqkTMxJ

--HG--
extra : rebase_source : f465278b0211f7a5ec47a1302a6d0a08cf35e804
2017-03-13 12:50:22 +02:00
Carsten "Tomcat" Book
f807b332df merge mozilla-inbound to mozilla-central a=merge 2017-03-15 13:12:42 +01:00
Nicholas Nethercote
8876b32323 Bug 1345262 (part 5) - Fix how JS sampling is started/stopped by the profiler. r=mstange,djvj.
Currently, JS sampling has major problems.

- JS sampling is enabled for all JS threads from the thread that runs
  locked_profiler_start() -- currently only the main thread -- but the JS
  engine can't handle enabling from off-thread, and asserts. This makes
  profiling workers impossible in a debug build.

- No JS thread will be JS sampled unless enableJSSampling() is called, but that
  only happens in locked_profiler_start(). That means any worker threads
  created while the profiler is active won't be JS sampled.

- Only the thread that runs locked_profiler_stop() -- currently only the main
  thread -- ever calls disableJSSampling(). This means that worker threads that
  start being JS sampled never stop being JS sampled.

This patch fixes these three problems in the following ways.

- locked_profiler_start() now sets a flag in PseudoStack that indicates
  JS sampling is desired, but doesn't directly enable it. Instead, the JS
  thread polls that flag and enables JS sampling itself when it sees the flag
  is set. The polling is done by the interrupt callback. There was already a
  flag of this sort (mJSSampling) but the new one is better.

  This required adding a call to profiler_js_operation_callback() to the
  InterruptCallback() in XPCJSContext.cpp. (In comparison, the
  InterruptCallback() in dom/workers/RuntimeService.cpp already had such a
  call.)

- RegisterCurrentThread() now requests JS sampling of a JS thread when the
  profiler is active, the thread is being profiled, and JS sampling is enabled.

- locked_profiler_stop() now calls stopJSSampling() on all live threads.

The patch makes the following smaller changes as well.

- Renames profiler_js_operation_callback() as profiler_js_interrupt_callback(),
  because "interrupt callback" is the standard name (viz.
  JS_AddInterruptCallback()).

- Calls js::RegisterContextProfilingEventMarker() with nullptr when stopping
  JS sampling, so that ProfilerJSEventMarker won't fire unnecessarily.

- Some minor formatting changes.

--HG--
extra : rebase_source : 372f94c963a9e5b2493389892499b1ca205ebc2f
2017-03-10 09:04:23 +11:00
Nicholas Nethercote
ce17b32bef Bug 1345262 (part 4) - Remove and inline PseudoStack::{clearContext,flushSamplerOnJSShutdown}(). r=mstange.
They each have a single call site, and this code makes makes more sense in
platform.cpp than as PseudoStack methods because it's mostly dealing with gPS.

--HG--
extra : rebase_source : 84d8c7d8989f0e02b238d591ece2be110cbbcb1a
2017-03-10 08:33:33 +11:00
Nicholas Nethercote
5703ff4afb Bug 1345262 (part 3) - Split PseudoStack::sampleContext() in two. r=mstange.
It does almost entirely different things depending on whether we are setting or
clearing the context.

--HG--
extra : rebase_source : 356445957968e1d055f4b717c65476fa765d8bd5
2017-03-09 17:06:39 +11:00