Bug 1299841: TraceLogger - Fail gracefully on OOM, r=bbouvier

This commit is contained in:
Hannes Verschore 2016-09-02 18:19:28 +02:00
parent 67f478581c
commit 901986bdee
2 changed files with 9 additions and 4 deletions

View File

@ -978,13 +978,13 @@ BaselineScript::initTraceLogger(JSRuntime* runtime, JSScript* script,
#endif
TraceLoggerThread* logger = TraceLoggerForMainThread(runtime);
traceLoggerScriptEvent_ = TraceLoggerEvent(logger, TraceLogger_Scripts, script);
MOZ_ASSERT(offsets.length() == numTraceLoggerToggleOffsets_);
for (size_t i = 0; i < offsets.length(); i++)
traceLoggerToggleOffsets()[i] = offsets[i].offset();
if (TraceLogTextIdEnabled(TraceLogger_Engine) || TraceLogTextIdEnabled(TraceLogger_Scripts)) {
traceLoggerScriptEvent_ = TraceLoggerEvent(logger, TraceLogger_Scripts, script);
for (size_t i = 0; i < numTraceLoggerToggleOffsets_; i++) {
CodeLocationLabel label(method_, CodeOffset(traceLoggerToggleOffsets()[i]));
Assembler::ToggleToCmp(label);
@ -1003,10 +1003,8 @@ BaselineScript::toggleTraceLoggerScripts(JSRuntime* runtime, JSScript* script, b
// Patch the logging script textId to be correct.
// When logging log the specific textId else the global Scripts textId.
TraceLoggerThread* logger = TraceLoggerForMainThread(runtime);
if (enable)
if (enable && !traceLoggerScriptEvent_.hasPayload())
traceLoggerScriptEvent_ = TraceLoggerEvent(logger, TraceLogger_Scripts, script);
else
traceLoggerScriptEvent_ = TraceLoggerEvent(logger, TraceLogger_Scripts);
AutoWritableJitCode awjc(method());

View File

@ -480,7 +480,12 @@ TraceLoggerThread::startEvent(TraceLoggerTextId id) {
void
TraceLoggerThread::startEvent(const TraceLoggerEvent& event) {
if (!event.hasPayload()) {
if (!enabled())
return;
startEvent(TraceLogger_Error);
disable(/* force = */ true, "TraceLogger encountered an empty event. "
"Potentially due to OOM during creation of "
"this event. Disabling TraceLogger.");
return;
}
startEvent(event.payload()->textId());
@ -776,6 +781,8 @@ TraceLoggerThreadState::init()
enabledTextIds[TraceLogger_Baseline] = enabledTextIds[TraceLogger_Engine];
enabledTextIds[TraceLogger_IonMonkey] = enabledTextIds[TraceLogger_Engine];
enabledTextIds[TraceLogger_Error] = true;
const char* options = getenv("TLOPTIONS");
if (options) {
if (strstr(options, "help")) {