Bug 1673756 - Add GCCC subcategories for several phases of CC r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D99737
This commit is contained in:
Steve Fink 2020-12-15 16:48:23 +00:00
parent 1257e9d853
commit a1215827bb
4 changed files with 23 additions and 7 deletions

View File

@ -146,7 +146,7 @@ const char* const XPCJSRuntime::mStrings[] = {
class AsyncFreeSnowWhite : public Runnable {
public:
NS_IMETHOD Run() override {
AUTO_PROFILER_LABEL("AsyncFreeSnowWhite::Run", GCCC);
AUTO_PROFILER_LABEL("AsyncFreeSnowWhite::Run", GCCC_FreeSnowWhite);
TimeStamp start = TimeStamp::Now();
// 2 ms budget, given that kICCSliceBudget is only 3 ms

View File

@ -66,6 +66,11 @@
SUBCATEGORY(GCCC, GCCC_MajorGC_Compact, "Major GC (Compact)") \
SUBCATEGORY(GCCC, GCCC_UnmarkGray, "Unmark Gray") \
SUBCATEGORY(GCCC, GCCC_Barrier, "Barrier") \
SUBCATEGORY(GCCC, GCCC_FreeSnowWhite, "CC (Free Snow White)") \
SUBCATEGORY(GCCC, GCCC_BuildGraph, "CC (Build Graph)") \
SUBCATEGORY(GCCC, GCCC_ScanRoots, "CC (Scan Roots)") \
SUBCATEGORY(GCCC, GCCC_CollectWhite, "CC (Collect White)") \
SUBCATEGORY(GCCC, GCCC_Finalize, "CC (Finalize)") \
END_CATEGORY \
BEGIN_CATEGORY(NETWORK, "Network", "lightblue") \
SUBCATEGORY(NETWORK, NETWORK, "Other") \

View File

@ -1594,6 +1594,9 @@ void IncrementalFinalizeRunnable::ReleaseNow(bool aLimited) {
return;
}
{
AUTO_PROFILER_LABEL("IncrementalFinalizeRunnable::ReleaseNow",
GCCC_Finalize);
mozilla::AutoRestore<bool> ar(mReleasing);
mReleasing = true;
MOZ_ASSERT(mDeferredFinalizeFunctions.Length() != 0,
@ -1643,8 +1646,6 @@ void IncrementalFinalizeRunnable::ReleaseNow(bool aLimited) {
NS_IMETHODIMP
IncrementalFinalizeRunnable::Run() {
AUTO_PROFILER_LABEL("IncrementalFinalizeRunnable::Run", GCCC);
if (!mDeferredFinalizeFunctions.Length()) {
/* These items were already processed synchronously in JSGC_END. */
MOZ_ASSERT(!mRuntime);

View File

@ -2594,6 +2594,8 @@ bool nsCycleCollector::FreeSnowWhite(bool aUntilNoSWInPurpleBuffer) {
return false;
}
AUTO_PROFILER_LABEL_CATEGORY_PAIR(GCCC_FreeSnowWhite);
AutoRestore<bool> ar(mFreeingSnowWhite);
mFreeingSnowWhite = true;
@ -2616,6 +2618,7 @@ bool nsCycleCollector::FreeSnowWhiteWithBudget(js::SliceBudget& aBudget) {
return false;
}
AUTO_PROFILER_LABEL_CATEGORY_PAIR(GCCC_FreeSnowWhite);
AutoRestore<bool> ar(mFreeingSnowWhite);
mFreeingSnowWhite = true;
@ -2662,6 +2665,7 @@ MOZ_NEVER_INLINE void nsCycleCollector::MarkRoots(SliceBudget& aBudget) {
mScanInProgress = true;
MOZ_ASSERT(mIncrementalPhase == GraphBuildingPhase);
AUTO_PROFILER_LABEL_CATEGORY_PAIR(GCCC_BuildGraph);
JS::AutoEnterCycleCollection autocc(Runtime()->Runtime());
bool doneBuilding = mBuilder->BuildGraph(aBudget);
@ -3427,10 +3431,16 @@ bool nsCycleCollector::Collect(ccType aCCType, SliceBudget& aBudget,
// that we won't unlink a live object if a weak reference is
// promoted to a strong reference after ScanRoots has finished.
// See bug 926533.
PrintPhase("ScanRoots");
ScanRoots(startedIdle);
PrintPhase("CollectWhite");
collectedAny = CollectWhite();
{
AUTO_PROFILER_LABEL_CATEGORY_PAIR(GCCC_ScanRoots);
PrintPhase("ScanRoots");
ScanRoots(startedIdle);
}
{
AUTO_PROFILER_LABEL_CATEGORY_PAIR(GCCC_CollectWhite);
PrintPhase("CollectWhite");
collectedAny = CollectWhite();
}
break;
case CleanupPhase:
PrintPhase("CleanupAfterCollection");