Bug 1240160: Add the TimeStamp based values to crash reports. r=ted
--- a/toolkit/crashreporter/nsExceptionHandler.cpp
+++ b/toolkit/crashreporter/nsExceptionHandler.cpp
@@ -8,16 +8,17 @@
#include "nsDataHashtable.h"
#include "mozilla/ArrayUtils.h"
#include "mozilla/dom/CrashReporterChild.h"
#include "mozilla/Services.h"
#include "nsIObserverService.h"
#include "mozilla/unused.h"
#include "mozilla/Snprintf.h"
#include "mozilla/SyncRunnable.h"
+#include "mozilla/TimeStamp.h"
#include "nsThreadUtils.h"
#include "nsXULAppAPI.h"
#include "jsfriendapi.h"
#if defined(XP_WIN32)
#ifdef WIN32_LEAN_AND_MEAN
#undef WIN32_LEAN_AND_MEAN
@@ -737,16 +738,22 @@ bool MinidumpCallback(
XP_TTOA(timeSinceLastCrash, timeSinceLastCrashString, 10);
}
// write crash time to file
if (lastCrashTimeFilename[0] != 0) {
PlatformWriter lastCrashFile(lastCrashTimeFilename);
WriteString(lastCrashFile, crashTimeString);
}
+ bool ignored = false;
+ double crashTimeStamp = (TimeStamp::NowLoRes()-
+ TimeStamp::ProcessCreation(ignored)).ToSecondsSigDigits();
+ char crashTimeStampString[32];
+ snprintf(crashTimeStampString, sizeof(crashTimeStampString)-1, "%f", crashTimeStamp);
+
// Write crash event file.
// Minidump IDs are UUIDs (36) + NULL.
static char id_ascii[37];
#ifdef XP_LINUX
const char * index = strrchr(descriptor.path(), '/');
MOZ_ASSERT(index);
MOZ_ASSERT(strlen(index) == 1 + 36 + 4); // "/" + UUID + ".dmp"
@@ -788,16 +795,18 @@ bool MinidumpCallback(
}
if (!crashReporterAPIData->IsEmpty()) {
// write out API data
apiData.Open(extraDataPath);
apiData.WriteBuffer(crashReporterAPIData->get(), crashReporterAPIData->Length());
}
WriteAnnotation(apiData, "CrashTime", crashTimeString);
+ WriteAnnotation(apiData, "CrashTimeStamp", crashTimeStampString);
+
if (timeSinceLastCrash != 0) {
WriteAnnotation(apiData, "SecondsSinceLastCrash",
timeSinceLastCrashString);
WriteAnnotation(eventFile, "SecondsSinceLastCrash",
timeSinceLastCrashString);
}
if (isGarbageCollecting) {
WriteAnnotation(apiData, "IsGarbageCollecting",
@@ -2572,16 +2581,26 @@ WriteExtraData(nsIFile* extraFile,
if (writeCrashTime) {
time_t crashTime = time(nullptr);
char crashTimeString[32];
XP_TTOA(crashTime, crashTimeString, 10);
WriteAnnotation(fd,
nsDependentCString("CrashTime"),
nsDependentCString(crashTimeString));
+
+ bool ignored = false;
+ double crashTimeStamp = (TimeStamp::NowLoRes()-
+ TimeStamp::ProcessCreation(ignored)).ToSecondsSigDigits();
+ char crashTimeStampString[32];
+ snprintf(crashTimeStampString, sizeof(crashTimeStampString)-1, "%f", crashTimeStamp);
+
+ WriteAnnotation(fd,
+ nsDependentCString("CrashTimeStamp"),
+ nsDependentCString(crashTimeStampString));
}
PR_Close(fd);
return true;
}
bool
AppendExtraData(nsIFile* extraFile, const AnnotationTable& data)