Commit Graph

81 Commits

Author SHA1 Message Date
Mike Hommey
f64c5cadc8 Bug 1203840 - Trigger dirty pages purge after CC. r=njn,r=smaug,r=mccr8
Jemalloc 4 purges dirty pages regularly during free() when the ratio of dirty
pages compared to active pages is higher than 1 << lg_dirty_mult.  We set
lg_dirty_mult in jemalloc_config to limit RSS usage, but it also has an impact
on performance.

So instead of enforcing a high ratio to force more pages being purged, we keep
jemalloc's default ratio of 8, and force a regular purge of all dirty pages,
after cycle collection.

Keeping jemalloc's default ratio avoids cycle-collection-triggered purge to
have to go through really all dirty pages when there are a lot, in which case
the normal jemalloc purge during free() will already have kicked in. It also
takes care of everything that doesn't run the cycle collector still having
a level of purge, like plugins in the plugin-container.

At the same time, since jemalloc_purge_freed_pages does nothing with jemalloc 4,
repurpose the MEMORY_FREE_PURGED_PAGES_MS telemetry probe to track the time
spent in this cycle-collector-triggered purge.
2015-09-20 17:43:43 +09:00
Kyle Huey
862b128345 Bug 1179909: Refactor stable state handling. r=smaug
This is motivated by three separate but related problems:

1. Our concept of recursion depth is broken for things that run from AfterProcessNextEvent observers (e.g. Promises). We decrement the recursionDepth counter before firing observers, so a Promise callback running at the lowest event loop depth has a recursion depth of 0 (whereas a regular nsIRunnable would be 1). This is a problem because it's impossible to distinguish a Promise running after a sync XHR's onreadystatechange handler from a top-level event (since the former runs with depth 2 - 1 = 1, and the latter runs with just 1).

2. The nsIThreadObserver mechanism that is used by a lot of code to run "after" the current event is a poor fit for anything that runs script. First, the order the observers fire in is the order they were added, not anything fixed by spec. Additionally, running script can cause the event loop to spin, which is a big source of pain here (bholley has some nasty bug caused by this).

3. We run Promises from different points in the code for workers and main thread. The latter runs from XPConnect's nsIThreadObserver callbacks, while the former runs from a hardcoded call to run Promises in the worker event loop. What workers do is particularly problematic because it means we can't get the right recursion depth no matter what we do to nsThread.

The solve this, this patch does the following:

1. Consolidate some handling of microtasks and all handling of stable state from appshell and WorkerPrivate into CycleCollectedJSRuntime.
2. Make the recursionDepth counter only available to CycleCollectedJSRuntime (and its consumers) and remove it from the nsIThreadInternal and nsIThreadObserver APIs.
3. Adjust the recursionDepth counter so that microtasks run with the recursionDepth of the task they are associated with.
4. Introduce the concept of metastable state to replace appshell's RunBeforeNextEvent. Metastable state is reached after every microtask or task is completed. This provides the semantics that bent and I want for IndexedDB, where transactions autocommit at the end of a microtask and do not "spill" from one microtask into a subsequent microtask. This differs from appshell's RunBeforeNextEvent in two ways:
a) It fires between microtasks, which was the motivation for starting this.
b) It no longer ensures that we're at the same event loop depth in the native event queue. bent decided we don't care about this.
5. Reorder stable state to happen after microtasks such as Promises, per HTML. Right now we call the regular thread observers, including appshell, before the main thread observer (XPConnect), so stable state tasks happen before microtasks.
2015-08-11 06:10:46 -07:00
Birunthan Mohanathas
a29151dc87 Bug 1182996 - Fix and add missing namespace comments. rs=ehsan
The bulk of this commit was generated by running:

  run-clang-tidy.py \
    -checks='-*,llvm-namespace-comment' \
    -header-filter=^/.../mozilla-central/.* \
    -fix
2015-07-13 08:25:42 -07:00
Terrence Cole
71589e5cf0 Bug 1167453 - Rename JSGCTraceKind and make it a C++11 enum class; r=jonco 2015-05-22 10:40:24 -07:00
Andrew McCreight
59cb000960 Bug 866681, part 2 - Make ContentUnbinder use DeferredFinalize. r=smaug 2015-05-13 12:48:52 -07:00
Andrew McCreight
6bff931fce Bug 866681, part 1 - Track if any slice of CC was manually triggered. r=smaug 2015-05-13 12:48:52 -07:00
Boris Zbarsky
a97eec0c4d Bug 1087330. Make the data structure we use for our promise microtask queue have O(1) first element removal, not O(N). r=khuey 2015-05-01 22:33:01 -04:00
Nick Fitzgerald
2fe8def5ff Bug 1150253 - Part 2: Gecko should provide a callback for SpiderMonkey to
enqueue the onGarbageCollection hook runnable; r=mccr8
2015-04-22 09:43:02 -07:00
David Rajchenbach-Teller
b4a506bb8a Bug 1083361 - Exposing a PromiseDebugging API to monitor uncaught DOM Promise. r=bz 2015-04-10 17:27:57 +02:00
Ehsan Akhgari
ea41d8de48 Bug 1145631 - Part 1: Replace MOZ_OVERRIDE and MOZ_FINAL with override and final in the tree; r=froydnj
This patch was automatically generated using the following script:

function convert() {
echo "Converting $1 to $2..."
find . \
       ! -wholename "*/.git*" \
       ! -wholename "obj-ff-dbg*" \
         -type f \
      \( -iname "*.cpp" \
         -o -iname "*.h" \
         -o -iname "*.c" \
         -o -iname "*.cc" \
         -o -iname "*.idl" \
         -o -iname "*.ipdl" \
         -o -iname "*.ipdlh" \
         -o -iname "*.mm" \) | \
    xargs -n 1 sed -i -e "s/\b$1\b/$2/g"
}

convert MOZ_OVERRIDE override
convert MOZ_FINAL final
2015-03-21 12:28:04 -04:00
Andrew McCreight
4946cb492a Bug 1137536, part 3 - Move the top level DeferredFinalize functions into their own file. r=smaug 2015-03-18 11:36:03 -07:00
Daniel Holbert
ddb04a0443 Bug 1142841: Convert all nsRefPtr<nsIRunnable> to nsCOMPtr<nsIRunnable>. r=ehsan
This patch was generated by a script.  Here's the source of the script for
future reference:

find . \( -iname "*.cpp" -o -iname "*.h" \) | \
  xargs -n 1 sed -i "s/nsRefPtr<nsIRunnable>/nsCOMPtr<nsIRunnable>/g"
2015-03-17 09:29:17 -07:00
Andrew McCreight
370383538c Bug 1114804 - Make ISupports use the standard deferred finalizer code. r=peterv 2015-03-10 08:35:47 -07:00
Masatoshi Kimura
91b7bfd47c Bug 1111290 - Part 2: Non-mechanical changes. r=waldo 2015-01-26 07:22:08 +09:00
Trevor Saunders
a0c27273f6 bug 1122100 - more MOZ_OVERRIDE in xpcomish stuff r=froydnj 2015-01-19 17:41:12 -05:00
Andrew McCreight
4791e268dc Bug 1118044, part 1 - Use GCCellPtr in CycleCollectedJSRuntime::TraverseGCThing. r=smaug 2015-01-08 15:30:54 -08:00
Andrew McCreight
755c13f279 Backout bug 1052793 for exposing bad decommitting behavior for compartmental GCs. 2015-01-08 09:54:13 -08:00
Terrence Cole
f9209afd94 Bug 1105069 - Part 14: Convert NoteJSChild to GCCellPtr; r=mccr8, r=jonco 2014-12-05 09:38:34 -08:00
Andrew McCreight
464b3de34d Bug 1052793 - Do per-zone GC for CC_WAITING triggers. r=smaug 2014-12-13 21:17:35 -08:00
Terrence Cole
bd524ef64a Bug 1105069 - Part 12: Convert VisitGrayWrapperTargets to GCCellPtr; r=jonco, r=mccr8 2014-12-05 09:38:33 -08:00
Carsten "Tomcat" Book
f812ad3c69 Backed out changeset 73c4111cab17 (bug 1083361) for bustage 2014-11-20 09:51:03 +01:00
David Rajchenbach-Teller
c74221f2c7 Bug 1083361 - Exposing a PromiseDebugging API to monitor uncaught DOM Promise. r=bz 2014-11-19 14:31:06 +01:00
Paolo Amadini
5ee237abd0 Bug 1013625 - Process Promise resolution runnables outside of main event queue. r=bz,khuey 2014-10-28 12:08:19 +00:00
Andrew McCreight
5801cbcb0f Bug 1087799, part 3 - Do not include any JS things in the list of white nodes. r=smaug
Root() does not actually root JS things, so if some other class's Unlink() method ends
up calling the GC, whiteNodes will end up containing dead pointers. (This is safe right
now because the Unlink and Unroot methods do not do anything to JS things.) It is less
error prone to simply never store those pointers.

Also, add some asserts to enforce that we never call any of the white-object methods
for JS things.
2014-10-24 15:06:56 -07:00
Andrew McCreight
d869fa7eaa Bug 727965 - Trigger CC_WAITING GCs based on number of freed JS objects and zones. r=smaug 2014-10-20 10:07:52 -07:00
Birunthan Mohanathas
da27cbd66f Bug 1046841 - Fix more style violations in previously touched .h files in xpcom/. r=froydnj 2014-08-25 12:17:24 -07:00
Andrew McCreight
bd0781fe91 Bug 1037510, part 1 - Add nursery size as a parameter of CycleCollectedJSRuntime. r=khuey 2014-07-29 15:38:14 -07:00
Birunthan Mohanathas
aa6d74fac6 Bug 1026535 - Fix mismatched class/struct tags. r=ehsan 2014-06-18 17:57:51 -07:00
Olli Pettay
c1a2a3211c Bug 1020622 - Trace black windows' (webidl) event listeners, r=mccr8 2014-06-05 02:48:50 +03:00
Brian Hackett
e728e57b23 Bug 941805 - Use helper thread pool in all runtimes in a process, r=billm. 2014-05-29 13:06:23 -06:00
Jason Orendorff
45ceb9b33f Bug 987995, part 4 - Add new crash reporter annotations for JS out-of-memory conditions. r=mccr8,r=bsmedberg. 2014-05-22 08:18:02 -05:00
Carsten "Tomcat" Book
7e0d2b76ab Backed out changeset 2f6f548cd175 (bug 987995) for bustage on a CLOSED TREE 2014-05-22 15:57:30 +02:00
Jason Orendorff
c428d7cb25 Bug 987995, part 4 - Add new crash reporter annotations. r=mccr8,r=bsmedberg. 2014-05-22 08:18:02 -05:00
Jason Orendorff
6ad8dc1e29 Bug 987995, part 3 - Move memory pressure callbacks from nsJSEnvironment/XPCJSRuntime to CycleCollectedJSRuntime. r=mccr8. 2014-05-22 08:18:02 -05:00
Birunthan Mohanathas
e44da12c54 Bug 995730 - Fix style violations in xpcom/base/. r=froydnj,continuation 2014-05-13 20:41:38 +03:00
Andrew McCreight
a8418734ff Bug 1005232 - Log number of incremental cycle collector slices. r=smaug 2014-05-06 17:25:26 -07:00
Andrew McCreight
aad70b5de8 Bug 1004017 - Rename CycleCollectedJSRuntime::NeedCollect() and Collect(). r=smaug 2014-05-06 17:25:26 -07:00
Birunthan Mohanathas
34a78370e0 Bug 995730 - Change xpcom/base/ to use 2 space indentation
This also removes trailing whitespace in reindented files.
2014-05-05 20:30:39 +03:00
Brian Hackett
4b56bb9faf Bug 964059 - Share atoms compartment/zone between multiple runtimes, r=billm,bent. 2014-02-19 09:02:13 -07:00
Andrew McCreight
a65df7c510 Bug 956080 - Rename BeginCycleCollection to TraverseRoots. r=smaug 2014-01-07 17:33:47 -08:00
Bobby Holley
eb0b713adc Bug 911303 - Remove manual Destroy() routine from CycleCollectedJSRuntime. r=billm 2013-11-27 10:10:25 -08:00
Andrew McCreight
8a976d93c4 Bug 935721, part 5 - Invert the control flow of CycleCollectNow's pre- and post-collection work, add CCResults as a field on the CC. r=smaug
nsJSEnvironment::CycleCollectNow does work before and after a CC runs. With ICC, nsJSEnv won't
know where in the CC when a CC is about to begin or end, so this patch reorganizes that work
into two separate callback hooks.  This requires adding a new struct, CycleCollectorStats, to
hold data nsJSEnv needs between the two calls.

Rather than trying to pass around a pointer to a results structure, this patch just adds
it to the nsCycleCollector struct, and always stores them. The results are passed back
to the end CC callback.
2013-11-20 14:35:16 -08:00
Andrew McCreight
2a8aa49cb4 Bug 928647 - Remove CycleCollectedRuntime::mObjectToUnlink. r=smaug 2013-10-19 08:59:10 -07:00
Andrew McCreight
dfac8e112b Bug 915488 - Make CC participant's Root, Unroot and Unlink methods infallible. r=smaug 2013-09-11 18:57:53 -07:00
Ehsan Akhgari
35f4093831 Bug 917885 - Minimize the #includes in xpcom/base; r=bsmedberg 2013-09-19 14:29:31 -04:00
Ehsan Akhgari
fe85b6b42b Backed out changeset a8d6973e5743 (bug 917885) because I pushed the wrong patch 2013-09-19 14:27:35 -04:00
Ehsan Akhgari
4bbb07e34d Bug 917885 - Minimize the #includes in xpcom/base; r=bsmedberg 2013-09-19 14:12:56 -04:00
Bobby Holley
cf09bebbd3 Bug 905926 - Invoke JS_DestroyRuntime before we totally tear down the XPCJSRuntime. r=billm 2013-09-17 09:46:31 -07:00
Dan Gohman
94cd9b8531 Bug 910823 - Constify static js::Class/JSClass instances. r=waldo 2013-09-11 05:49:05 -07:00
Andrew McCreight
8c7f8fcdf6 Bug 909436 - Inline CycleCollectedJSRuntime::OnContext. r=bholley 2013-09-10 08:29:44 -07:00