mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Bug 994163 - TraceLoggeing: Fix --disable-threadsafe builds, r=bbouvier
This commit is contained in:
parent
6d68487619
commit
b69446b27b
@ -194,7 +194,7 @@ frontend::CompileScript(ExclusiveContext *cx, LifoAlloc *alloc, HandleObject sco
|
|||||||
if (cx->isJSContext())
|
if (cx->isJSContext())
|
||||||
logger = TraceLoggerForMainThread(cx->asJSContext()->runtime());
|
logger = TraceLoggerForMainThread(cx->asJSContext()->runtime());
|
||||||
else
|
else
|
||||||
logger = TraceLoggerForThread(PR_GetCurrentThread());
|
logger = TraceLoggerForCurrentThread();
|
||||||
uint32_t logId = js::TraceLogCreateTextId(logger, options);
|
uint32_t logId = js::TraceLogCreateTextId(logger, options);
|
||||||
js::AutoTraceLog scriptLogger(logger, logId);
|
js::AutoTraceLog scriptLogger(logger, logId);
|
||||||
js::AutoTraceLog typeLogger(logger, TraceLogger::ParserCompileScript);
|
js::AutoTraceLog typeLogger(logger, TraceLogger::ParserCompileScript);
|
||||||
|
@ -1257,7 +1257,7 @@ OptimizeMIR(MIRGenerator *mir)
|
|||||||
if (GetIonContext()->runtime->onMainThread())
|
if (GetIonContext()->runtime->onMainThread())
|
||||||
logger = TraceLoggerForMainThread(GetIonContext()->runtime);
|
logger = TraceLoggerForMainThread(GetIonContext()->runtime);
|
||||||
else
|
else
|
||||||
logger = TraceLoggerForThread(PR_GetCurrentThread());
|
logger = TraceLoggerForCurrentThread();
|
||||||
|
|
||||||
if (!mir->compilingAsmJS()) {
|
if (!mir->compilingAsmJS()) {
|
||||||
if (!MakeMRegExpHoistable(graph))
|
if (!MakeMRegExpHoistable(graph))
|
||||||
|
@ -2556,7 +2556,7 @@ GCHelperThread::threadLoop()
|
|||||||
{
|
{
|
||||||
AutoLockGC lock(rt);
|
AutoLockGC lock(rt);
|
||||||
|
|
||||||
TraceLogger *logger = TraceLoggerForThread(PR_GetCurrentThread());
|
TraceLogger *logger = TraceLoggerForCurrentThread();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Even on the first iteration the state can be SHUTDOWN or SWEEPING if
|
* Even on the first iteration the state can be SHUTDOWN or SWEEPING if
|
||||||
|
@ -797,7 +797,7 @@ WorkerThread::handleIonWorkload()
|
|||||||
|
|
||||||
ionBuilder = WorkerThreadState().ionWorklist().popCopy();
|
ionBuilder = WorkerThreadState().ionWorklist().popCopy();
|
||||||
|
|
||||||
TraceLogger *logger = TraceLoggerForThread(thread);
|
TraceLogger *logger = TraceLoggerForCurrentThread();
|
||||||
AutoTraceLog logScript(logger, TraceLogCreateTextId(logger, ionBuilder->script()));
|
AutoTraceLog logScript(logger, TraceLogCreateTextId(logger, ionBuilder->script()));
|
||||||
AutoTraceLog logCompile(logger, TraceLogger::IonCompilation);
|
AutoTraceLog logCompile(logger, TraceLogger::IonCompilation);
|
||||||
|
|
||||||
|
@ -616,7 +616,7 @@ TraceLogging::TraceLogging()
|
|||||||
lock = PR_NewLock();
|
lock = PR_NewLock();
|
||||||
if (!lock)
|
if (!lock)
|
||||||
MOZ_CRASH();
|
MOZ_CRASH();
|
||||||
#endif
|
#endif // JS_THREADSAFE
|
||||||
}
|
}
|
||||||
|
|
||||||
TraceLogging::~TraceLogging()
|
TraceLogging::~TraceLogging()
|
||||||
@ -627,6 +627,12 @@ TraceLogging::~TraceLogging()
|
|||||||
out = nullptr;
|
out = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < mainThreadLoggers.length(); i++)
|
||||||
|
delete mainThreadLoggers[i];
|
||||||
|
|
||||||
|
mainThreadLoggers.clear();
|
||||||
|
|
||||||
|
#ifdef JS_THREADSAFE
|
||||||
if (threadLoggers.initialized()) {
|
if (threadLoggers.initialized()) {
|
||||||
for (ThreadLoggerHashMap::Range r = threadLoggers.all(); !r.empty(); r.popFront())
|
for (ThreadLoggerHashMap::Range r = threadLoggers.all(); !r.empty(); r.popFront())
|
||||||
delete r.front().value();
|
delete r.front().value();
|
||||||
@ -634,15 +640,11 @@ TraceLogging::~TraceLogging()
|
|||||||
threadLoggers.finish();
|
threadLoggers.finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < mainThreadLoggers.length(); i++)
|
|
||||||
delete mainThreadLoggers[i];
|
|
||||||
|
|
||||||
mainThreadLoggers.clear();
|
|
||||||
|
|
||||||
if (lock) {
|
if (lock) {
|
||||||
PR_DestroyLock(lock);
|
PR_DestroyLock(lock);
|
||||||
lock = nullptr;
|
lock = nullptr;
|
||||||
}
|
}
|
||||||
|
#endif // JS_THREADSAFE
|
||||||
|
|
||||||
enabled = false;
|
enabled = false;
|
||||||
}
|
}
|
||||||
@ -673,8 +675,10 @@ TraceLogging::lazyInit()
|
|||||||
return false;
|
return false;
|
||||||
fprintf(out, "[");
|
fprintf(out, "[");
|
||||||
|
|
||||||
|
#ifdef JS_THREADSAFE
|
||||||
if (!threadLoggers.init())
|
if (!threadLoggers.init())
|
||||||
return false;
|
return false;
|
||||||
|
#endif // JS_THREADSAFE
|
||||||
|
|
||||||
const char *env = getenv("TLLOG");
|
const char *env = getenv("TLLOG");
|
||||||
if (!env)
|
if (!env)
|
||||||
@ -794,11 +798,17 @@ TraceLogging::forMainThread(PerThreadData *mainThread)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TraceLogger *
|
TraceLogger *
|
||||||
js::TraceLoggerForThread(PRThread *thread)
|
js::TraceLoggerForCurrentThread()
|
||||||
{
|
{
|
||||||
|
#ifdef JS_THREADSAFE
|
||||||
|
PRThread *thread = PR_GetCurrentThread();
|
||||||
return traceLoggers.forThread(thread);
|
return traceLoggers.forThread(thread);
|
||||||
|
#else
|
||||||
|
MOZ_ASSUME_UNREACHABLE("No threads supported. Use TraceLoggerForMainThread for the main thread.");
|
||||||
|
#endif // JS_THREADSAFE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef JS_THREADSAFE
|
||||||
TraceLogger *
|
TraceLogger *
|
||||||
TraceLogging::forThread(PRThread *thread)
|
TraceLogging::forThread(PRThread *thread)
|
||||||
{
|
{
|
||||||
@ -822,6 +832,7 @@ TraceLogging::forThread(PRThread *thread)
|
|||||||
|
|
||||||
return logger;
|
return logger;
|
||||||
}
|
}
|
||||||
|
#endif // JS_THREADSAFE
|
||||||
|
|
||||||
TraceLogger *
|
TraceLogger *
|
||||||
TraceLogging::create()
|
TraceLogging::create()
|
||||||
|
@ -88,7 +88,7 @@ namespace jit {
|
|||||||
* Logging something is done in 3 stages.
|
* Logging something is done in 3 stages.
|
||||||
* 1) Get the tracelogger of the current thread.
|
* 1) Get the tracelogger of the current thread.
|
||||||
* - TraceLoggerForMainThread(JSRuntime *)
|
* - TraceLoggerForMainThread(JSRuntime *)
|
||||||
* - TraceLoggerForThread(PR_GetCurrentThread());
|
* - TraceLoggerForCurrentThread(); // Should NOT be used for the mainthread.
|
||||||
* 2) Optionally create a textId for the text that needs to get logged. This
|
* 2) Optionally create a textId for the text that needs to get logged. This
|
||||||
* step takes some time, so try to do this beforehand, outside the hot
|
* step takes some time, so try to do this beforehand, outside the hot
|
||||||
* path and don't do unnecessary repetitions, since it will criple
|
* path and don't do unnecessary repetitions, since it will criple
|
||||||
@ -385,16 +385,20 @@ class TraceLogger
|
|||||||
class TraceLogging
|
class TraceLogging
|
||||||
{
|
{
|
||||||
#ifdef JS_TRACE_LOGGING
|
#ifdef JS_TRACE_LOGGING
|
||||||
|
#ifdef JS_THREADSAFE
|
||||||
typedef HashMap<PRThread *,
|
typedef HashMap<PRThread *,
|
||||||
TraceLogger *,
|
TraceLogger *,
|
||||||
PointerHasher<PRThread *, 3>,
|
PointerHasher<PRThread *, 3>,
|
||||||
SystemAllocPolicy> ThreadLoggerHashMap;
|
SystemAllocPolicy> ThreadLoggerHashMap;
|
||||||
|
#endif // JS_THREADSAFE
|
||||||
typedef Vector<TraceLogger *, 1, js::SystemAllocPolicy > MainThreadLoggers;
|
typedef Vector<TraceLogger *, 1, js::SystemAllocPolicy > MainThreadLoggers;
|
||||||
|
|
||||||
bool initialized;
|
bool initialized;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool enabledTextIds[TraceLogger::LAST];
|
bool enabledTextIds[TraceLogger::LAST];
|
||||||
|
#ifdef JS_THREADSAFE
|
||||||
ThreadLoggerHashMap threadLoggers;
|
ThreadLoggerHashMap threadLoggers;
|
||||||
|
#endif // JS_THREADSAFE
|
||||||
MainThreadLoggers mainThreadLoggers;
|
MainThreadLoggers mainThreadLoggers;
|
||||||
uint32_t loggerId;
|
uint32_t loggerId;
|
||||||
FILE *out;
|
FILE *out;
|
||||||
@ -403,14 +407,16 @@ class TraceLogging
|
|||||||
uint64_t startupTime;
|
uint64_t startupTime;
|
||||||
#ifdef JS_THREADSAFE
|
#ifdef JS_THREADSAFE
|
||||||
PRLock *lock;
|
PRLock *lock;
|
||||||
#endif
|
#endif // JS_THREADSAFE
|
||||||
|
|
||||||
TraceLogging();
|
TraceLogging();
|
||||||
~TraceLogging();
|
~TraceLogging();
|
||||||
|
|
||||||
TraceLogger *forMainThread(JSRuntime *runtime);
|
TraceLogger *forMainThread(JSRuntime *runtime);
|
||||||
TraceLogger *forMainThread(jit::CompileRuntime *runtime);
|
TraceLogger *forMainThread(jit::CompileRuntime *runtime);
|
||||||
|
#ifdef JS_THREADSAFE
|
||||||
TraceLogger *forThread(PRThread *thread);
|
TraceLogger *forThread(PRThread *thread);
|
||||||
|
#endif // JS_THREADSAFE
|
||||||
|
|
||||||
bool isTextIdEnabled(uint32_t textId) {
|
bool isTextIdEnabled(uint32_t textId) {
|
||||||
if (textId < TraceLogger::LAST)
|
if (textId < TraceLogger::LAST)
|
||||||
@ -428,7 +434,7 @@ class TraceLogging
|
|||||||
#ifdef JS_TRACE_LOGGING
|
#ifdef JS_TRACE_LOGGING
|
||||||
TraceLogger *TraceLoggerForMainThread(JSRuntime *runtime);
|
TraceLogger *TraceLoggerForMainThread(JSRuntime *runtime);
|
||||||
TraceLogger *TraceLoggerForMainThread(jit::CompileRuntime *runtime);
|
TraceLogger *TraceLoggerForMainThread(jit::CompileRuntime *runtime);
|
||||||
TraceLogger *TraceLoggerForThread(PRThread *thread);
|
TraceLogger *TraceLoggerForCurrentThread();
|
||||||
#else
|
#else
|
||||||
inline TraceLogger *TraceLoggerForMainThread(JSRuntime *runtime) {
|
inline TraceLogger *TraceLoggerForMainThread(JSRuntime *runtime) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -436,7 +442,7 @@ inline TraceLogger *TraceLoggerForMainThread(JSRuntime *runtime) {
|
|||||||
inline TraceLogger *TraceLoggerForMainThread(jit::CompileRuntime *runtime) {
|
inline TraceLogger *TraceLoggerForMainThread(jit::CompileRuntime *runtime) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
};
|
};
|
||||||
inline TraceLogger *TraceLoggerForThread(PRThread *thread) {
|
inline TraceLogger *TraceLoggerForCurrentThread() {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@ -554,12 +560,12 @@ class AutoTraceLoggingLock
|
|||||||
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
|
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
|
||||||
#ifdef JS_THREADSAFE
|
#ifdef JS_THREADSAFE
|
||||||
PR_Lock(logging->lock);
|
PR_Lock(logging->lock);
|
||||||
#endif
|
#endif // JS_THREADSAFE
|
||||||
}
|
}
|
||||||
~AutoTraceLoggingLock() {
|
~AutoTraceLoggingLock() {
|
||||||
#ifdef JS_THREADSAFE
|
#ifdef JS_THREADSAFE
|
||||||
PR_Unlock(logging->lock);
|
PR_Unlock(logging->lock);
|
||||||
#endif
|
#endif // JS_THREADSAFE
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
|
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
|
||||||
|
Loading…
Reference in New Issue
Block a user