Bug 716619 - Simplify GC probes (r=sfink)

This commit is contained in:
Bill McCloskey 2012-01-27 17:01:04 -08:00
parent 913d59cbcb
commit 7839608d94
3 changed files with 46 additions and 59 deletions

View File

@ -79,29 +79,29 @@
<!-- GC -->
<event symbol="EvtGCStart" value="1012" version="1"
channel="MozillaChannel" level="win:Informational"
template="CompartmentTemplate" task="Allocation" opcode="GCStart"
template="VoidTemplate" task="Allocation" opcode="GCStart"
keywords="SampleKeyword" message="$(string.SampleProvider.SampleEvent.message)"/>
<event symbol="EvtGCEnd" value="1013" version="1"
channel="MozillaChannel" level="win:Informational"
template="CompartmentTemplate" task="Allocation" opcode="GCEnd"
template="VoidTemplate" task="Allocation" opcode="GCEnd"
keywords="SampleKeyword" message="$(string.SampleProvider.SampleEvent.message)"/>
<event symbol="EvtGCStartMarkPhase" value="1014" version="1"
channel="MozillaChannel" level="win:Informational"
template="CompartmentTemplate" task="Allocation" opcode="GCMarkStart"
template="VoidTemplate" task="Allocation" opcode="GCMarkStart"
keywords="SampleKeyword" message="$(string.SampleProvider.SampleEvent.message)"/>
<event symbol="EvtGCEndMarkPhase" value="1015" version="1"
channel="MozillaChannel" level="win:Informational"
template="CompartmentTemplate" task="Allocation" opcode="GCMarkEnd"
template="VoidTemplate" task="Allocation" opcode="GCMarkEnd"
keywords="SampleKeyword" message="$(string.SampleProvider.SampleEvent.message)"/>
<event symbol="EvtGCStartSweepPhase" value="1016" version="1"
channel="MozillaChannel" level="win:Informational"
template="CompartmentTemplate" task="Allocation" opcode="GCSweepStart"
template="VoidTemplate" task="Allocation" opcode="GCSweepStart"
keywords="SampleKeyword" message="$(string.SampleProvider.SampleEvent.message)"/>
<event symbol="EvtGCEndSweepPhase" value="1017" version="1"
channel="MozillaChannel" level="win:Informational"
template="CompartmentTemplate" task="Allocation" opcode="GCSweepEnd"
template="VoidTemplate" task="Allocation" opcode="GCSweepEnd"
keywords="SampleKeyword" message="$(string.SampleProvider.SampleEvent.message)"/>
<event symbol="EvtMemoryAcquire" value="1018" version="1"
@ -231,10 +231,6 @@
<data name="Size" inType="win:Int64" outType="xs:long"/>
</template>
<template tid="CompartmentTemplate">
<data name="Compartment" inType="win:Int64" outType="xs:long"/>
</template>
<template tid="MemoryLocationTemplate">
<data name="Compartment" inType="win:Int64" outType="xs:long"/>
<data name="Address" inType="win:Int64" outType="xs:long"/>
@ -259,6 +255,9 @@
<data name="Int" inType="win:Int32" outType="xs:int"/>
</template>
<template tid="VoidTemplate">
</template>
</templates>
</provider>
</events>

View File

@ -206,7 +206,7 @@ Statistics::beginGC(JSCompartment *comp, gcreason::Reason reason)
triggerReason = reason;
beginPhase(PHASE_GC);
Probes::GCStart(compartment);
Probes::GCStart();
GCCrashData crashData;
crashData.isCompartment = !!compartment;
@ -283,7 +283,7 @@ Statistics::printStats()
void
Statistics::endGC()
{
Probes::GCEnd(compartment);
Probes::GCEnd();
endPhase(PHASE_GC);
crash::SnapshotGCStack();
@ -315,16 +315,10 @@ Statistics::beginPhase(Phase phase)
{
phaseStarts[phase] = PRMJ_Now();
if (phase == gcstats::PHASE_SWEEP) {
Probes::GCStartSweepPhase(NULL);
if (!compartment) {
for (JSCompartment **c = runtime->compartments.begin();
c != runtime->compartments.end(); ++c)
{
Probes::GCStartSweepPhase(*c);
}
}
}
if (phase == gcstats::PHASE_MARK)
Probes::GCStartMarkPhase();
else if (phase == gcstats::PHASE_SWEEP)
Probes::GCStartSweepPhase();
}
void
@ -333,16 +327,10 @@ Statistics::endPhase(Phase phase)
phaseEnds[phase] = PRMJ_Now();
phaseTimes[phase] += phaseEnds[phase] - phaseStarts[phase];
if (phase == gcstats::PHASE_SWEEP) {
if (!compartment) {
for (JSCompartment **c = runtime->compartments.begin();
c != runtime->compartments.end(); ++c)
{
Probes::GCEndSweepPhase(*c);
}
}
Probes::GCEndSweepPhase(NULL);
}
if (phase == gcstats::PHASE_MARK)
Probes::GCEndMarkPhase();
else if (phase == gcstats::PHASE_SWEEP)
Probes::GCEndSweepPhase();
}
} /* namespace gcstats */

View File

@ -190,21 +190,21 @@ bool releaseMemory(JSContext *cx, void *address, size_t nbytes);
* Garbage collection probes
*
* GC timing is tricky and at the time of this writing is changing frequently.
* GCStart(NULL)/GCEnd(NULL) are intended to bracket the entire garbage
* collection (either global or single-compartment), but a separate thread may
* continue doing work after GCEnd.
* GCStart/GCEnd are intended to bracket the entire garbage collection (either
* global or single-compartment), but a separate thread may continue doing work
* after GCEnd.
*
* Multiple compartments' GC will be interleaved during a global collection
* (eg, compartment 1 starts, compartment 2 starts, compartment 1 ends, ...)
*/
bool GCStart(JSCompartment *compartment);
bool GCEnd(JSCompartment *compartment);
bool GCStart();
bool GCEnd();
bool GCStartMarkPhase(JSCompartment *compartment);
bool GCEndMarkPhase(JSCompartment *compartment);
bool GCStartMarkPhase();
bool GCEndMarkPhase();
bool GCStartSweepPhase(JSCompartment *compartment);
bool GCEndSweepPhase(JSCompartment *compartment);
bool GCStartSweepPhase();
bool GCEndSweepPhase();
/*
* Various APIs for inserting custom probe points. These might be used to mark
@ -363,12 +363,12 @@ bool ETWCalloutBegin(JSContext *cx, JSFunction *fun);
bool ETWCalloutEnd(JSContext *cx, JSFunction *fun);
bool ETWAcquireMemory(JSContext *cx, void *address, size_t nbytes);
bool ETWReleaseMemory(JSContext *cx, void *address, size_t nbytes);
bool ETWGCStart(JSCompartment *compartment);
bool ETWGCEnd(JSCompartment *compartment);
bool ETWGCStartMarkPhase(JSCompartment *compartment);
bool ETWGCEndMarkPhase(JSCompartment *compartment);
bool ETWGCStartSweepPhase(JSCompartment *compartment);
bool ETWGCEndSweepPhase(JSCompartment *compartment);
bool ETWGCStart();
bool ETWGCEnd();
bool ETWGCStartMarkPhase();
bool ETWGCEndMarkPhase();
bool ETWGCStartSweepPhase();
bool ETWGCEndSweepPhase();
bool ETWCustomMark(JSString *string);
bool ETWCustomMark(const char *string);
bool ETWCustomMark(int marker);
@ -644,12 +644,12 @@ Probes::releaseMemory(JSContext *cx, void *address, size_t nbytes)
}
inline bool
Probes::GCStart(JSCompartment *compartment)
Probes::GCStart()
{
bool ok = true;
#ifdef MOZ_ETW
if (ProfilingActive && !ETWGCStart(compartment))
if (ProfilingActive && !ETWGCStart())
ok = false;
#endif
@ -657,12 +657,12 @@ Probes::GCStart(JSCompartment *compartment)
}
inline bool
Probes::GCEnd(JSCompartment *compartment)
Probes::GCEnd()
{
bool ok = true;
#ifdef MOZ_ETW
if (ProfilingActive && !ETWGCEnd(compartment))
if (ProfilingActive && !ETWGCEnd())
ok = false;
#endif
@ -670,12 +670,12 @@ Probes::GCEnd(JSCompartment *compartment)
}
inline bool
Probes::GCStartMarkPhase(JSCompartment *compartment)
Probes::GCStartMarkPhase()
{
bool ok = true;
#ifdef MOZ_ETW
if (ProfilingActive && !ETWGCStartMarkPhase(compartment))
if (ProfilingActive && !ETWGCStartMarkPhase())
ok = false;
#endif
@ -683,12 +683,12 @@ Probes::GCStartMarkPhase(JSCompartment *compartment)
}
inline bool
Probes::GCEndMarkPhase(JSCompartment *compartment)
Probes::GCEndMarkPhase()
{
bool ok = true;
#ifdef MOZ_ETW
if (ProfilingActive && !ETWGCEndMarkPhase(compartment))
if (ProfilingActive && !ETWGCEndMarkPhase())
ok = false;
#endif
@ -696,12 +696,12 @@ Probes::GCEndMarkPhase(JSCompartment *compartment)
}
inline bool
Probes::GCStartSweepPhase(JSCompartment *compartment)
Probes::GCStartSweepPhase()
{
bool ok = true;
#ifdef MOZ_ETW
if (ProfilingActive && !ETWGCStartSweepPhase(compartment))
if (ProfilingActive && !ETWGCStartSweepPhase())
ok = false;
#endif
@ -709,12 +709,12 @@ Probes::GCStartSweepPhase(JSCompartment *compartment)
}
inline bool
Probes::GCEndSweepPhase(JSCompartment *compartment)
Probes::GCEndSweepPhase()
{
bool ok = true;
#ifdef MOZ_ETW
if (ProfilingActive && !ETWGCEndSweepPhase(compartment))
if (ProfilingActive && !ETWGCEndSweepPhase())
ok = false;
#endif