author | Hannes Verschore <hv1989@gmail.com> |
Thu, 17 Apr 2014 12:26:16 +0200 | |
changeset 179111 | e7f563c9c7b8d4d0713e97daeda7fe0d77962864 |
parent 179110 | 4ac1f53ee2249cf823a7a0d9682f6ccbce0ecc13 |
child 179112 | 9238eede008048d3393afd9e92916125a48e1fd2 |
push id | 26607 |
push user | ryanvm@gmail.com |
push date | Fri, 18 Apr 2014 02:31:26 +0000 |
treeherder | mozilla-central@7fe3ee0cf8be [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | luke |
bugs | 995570 |
milestone | 31.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/jit/shared/CodeGenerator-shared.cpp +++ b/js/src/jit/shared/CodeGenerator-shared.cpp @@ -9,16 +9,17 @@ #include "mozilla/DebugOnly.h" #include "jit/IonCaches.h" #include "jit/IonMacroAssembler.h" #include "jit/IonSpewer.h" #include "jit/MIR.h" #include "jit/MIRGenerator.h" #include "jit/ParallelFunctions.h" +#include "vm/TraceLogging.h" #include "jit/IonFrames-inl.h" using namespace js; using namespace js::jit; using mozilla::DebugOnly; @@ -623,16 +624,21 @@ CodeGeneratorShared::callVM(const VMFunc #ifdef DEBUG if (ins->mirRaw()) { JS_ASSERT(ins->mirRaw()->isInstruction()); MInstruction *mir = ins->mirRaw()->toInstruction(); JS_ASSERT_IF(mir->isEffectful(), mir->resumePoint()); } #endif +#ifdef JS_TRACE_LOGGING + if (!emitTracelogStartEvent(TraceLogger::VM)) + return false; +#endif + // Stack is: // ... frame ... // [args] #ifdef DEBUG JS_ASSERT(pushedArgs_ == fun.explicitArgs); pushedArgs_ = 0; #endif @@ -662,16 +668,22 @@ CodeGeneratorShared::callVM(const VMFunc // Remove rest of the frame left on the stack. We remove the return address // which is implicitly poped when returning. int framePop = sizeof(IonExitFrameLayout) - sizeof(void*); // Pop arguments from framePushed. masm.implicitPop(fun.explicitStackSlots() * sizeof(void *) + framePop); // Stack is: // ... frame ... + +#ifdef JS_TRACE_LOGGING + if (!emitTracelogStopEvent(TraceLogger::VM)) + return false; +#endif + return true; } class OutOfLineTruncateSlow : public OutOfLineCodeBase<CodeGeneratorShared> { FloatRegister src_; Register dest_; bool needFloat32Conversion_; @@ -1023,47 +1035,37 @@ CodeGeneratorShared::emitTracelogScript( masm.Pop(script); masm.Pop(logger); return true; } bool CodeGeneratorShared::emitTracelogTree(bool isStart, uint32_t textId) { + if (!TraceLogTextIdEnabled(textId)) + return true; + RegisterSet regs = RegisterSet::Volatile(); Register logger = regs.takeGeneral(); masm.Push(logger); CodeOffsetLabel patchLocation = masm.movWithPatch(ImmPtr(nullptr), logger); if (!patchableTraceLoggers_.append(patchLocation)) return false; - if (isStart) + if (isStart) { masm.tracelogStart(logger, textId); - else + } else { +#ifdef DEBUG masm.tracelogStop(logger, textId); - - masm.Pop(logger); - return true; -} - -bool -CodeGeneratorShared::emitTracelogStopEvent() -{ - RegisterSet regs = RegisterSet::Volatile(); - Register logger = regs.takeGeneral(); - - masm.Push(logger); - - CodeOffsetLabel patchLocation = masm.movWithPatch(ImmPtr(nullptr), logger); - if (!patchableTraceLoggers_.append(patchLocation)) - return false; - - masm.tracelogStop(logger); +#else + masm.tracelogStop(logger); +#endif + } masm.Pop(logger); return true; } #endif } // namespace jit } // namespace js
--- a/js/src/jit/shared/CodeGenerator-shared.h +++ b/js/src/jit/shared/CodeGenerator-shared.h @@ -462,23 +462,18 @@ class CodeGeneratorShared : public LInst } bool emitTracelogScriptStop() { return emitTracelogScript(/* isStart =*/ false); } bool emitTracelogStartEvent(uint32_t textId) { return emitTracelogTree(/* isStart =*/ true, textId); } bool emitTracelogStopEvent(uint32_t textId) { -#ifdef DEBUG return emitTracelogTree(/* isStart =*/ false, textId); -#else - return emitTracelogScript(/* isStart =*/ false); -#endif } - bool emitTracelogStopEvent(); #endif }; // An out-of-line path is generated at the end of the function. class OutOfLineCode : public TempObject { Label entry_; Label rejoin_;
--- a/js/src/vm/TraceLogging.cpp +++ b/js/src/vm/TraceLogging.cpp @@ -85,16 +85,17 @@ const char* const text[] = { "MinorGC", "ParserCompileFunction", "ParserCompileLazy", "ParserCompileScript", "TraceLogger", "YarrCompile", "YarrInterpret", "YarrJIT", + "VM", "SplitCriticalEdges", "RenumberBlocks", "DominatorTree", "PhiAnalysis", "ApplyTypes", "ParallelSafetyAnalysis", "AliasAnalysis", "GVN", @@ -862,8 +863,14 @@ TraceLogging::create() if (!logger->init(loggerId)) { delete logger; return nullptr; } return logger; } + +bool +js::TraceLogTextIdEnabled(uint32_t textId) +{ + return traceLoggers.isTextIdEnabled(textId); +}
--- a/js/src/vm/TraceLogging.h +++ b/js/src/vm/TraceLogging.h @@ -222,16 +222,17 @@ class TraceLogger MinorGC, ParserCompileFunction, ParserCompileLazy, ParserCompileScript, TL, YarrCompile, YarrInterpret, YarrJIT, + VM, // Specific passes during ion compilation: SplitCriticalEdges, RenumberBlocks, DominatorTree, PhiAnalysis, ApplyTypes, ParallelSafetyAnalysis, @@ -465,16 +466,23 @@ inline uint32_t TraceLogCreateTextId(Tra } inline uint32_t TraceLogCreateTextId(TraceLogger *logger, const char *text) { #ifdef JS_TRACE_LOGGING if (logger) return logger->createTextId(text); #endif return TraceLogger::TL_Error; } +#ifdef JS_TRACE_LOGGING +bool TraceLogTextIdEnabled(uint32_t textId); +#else +inline bool TraceLogTextIdEnabled(uint32_t textId) { + return false; +} +#endif inline void TraceLogTimestamp(TraceLogger *logger, uint32_t textId) { #ifdef JS_TRACE_LOGGING if (logger) logger->logTimestamp(textId); #endif } inline void TraceLogStartEvent(TraceLogger *logger, uint32_t textId) { #ifdef JS_TRACE_LOGGING