Index: third_party/crashpad/crashpad/handler/handler_main.cc |
diff --git a/third_party/crashpad/crashpad/handler/handler_main.cc b/third_party/crashpad/crashpad/handler/handler_main.cc |
index 3240cd38b37d79d6c915560aa41f325702cf00cd..ad6d5accbc1b2d5d2e39372d6c9461d969364fdf 100644 |
--- a/third_party/crashpad/crashpad/handler/handler_main.cc |
+++ b/third_party/crashpad/crashpad/handler/handler_main.cc |
@@ -27,6 +27,7 @@ |
#include "base/files/file_path.h" |
#include "base/files/scoped_file.h" |
#include "base/logging.h" |
+#include "base/metrics/persistent_histogram_allocator.h" |
#include "base/scoped_generic.h" |
#include "base/strings/utf_string_conversions.h" |
#include "build/build_config.h" |
@@ -78,6 +79,7 @@ void Usage(const base::FilePath& me) { |
" --handshake-handle=HANDLE\n" |
" create a new pipe and send its name via HANDLE\n" |
#endif // OS_MACOSX |
+" --metrics-dir=DIR store metrics files in DIR (only in Chromium)\n" |
" --no-rate-limit don't rate limit crash uploads\n" |
#if defined(OS_MACOSX) |
" --reset-own-crash-exception-port-to-system-default\n" |
@@ -136,6 +138,7 @@ int HandlerMain(int argc, char* argv[]) { |
#elif defined(OS_WIN) |
kOptionHandshakeHandle, |
#endif // OS_MACOSX |
+ kOptionMetrics, |
kOptionNoRateLimit, |
#if defined(OS_MACOSX) |
kOptionResetOwnCrashExceptionPortToSystemDefault, |
@@ -153,6 +156,7 @@ int HandlerMain(int argc, char* argv[]) { |
std::map<std::string, std::string> annotations; |
std::string url; |
const char* database; |
+ const char* metrics; |
#if defined(OS_MACOSX) |
int handshake_fd; |
std::string mach_service; |
@@ -179,6 +183,7 @@ int HandlerMain(int argc, char* argv[]) { |
#elif defined(OS_WIN) |
{"handshake-handle", required_argument, nullptr, kOptionHandshakeHandle}, |
#endif // OS_MACOSX |
+ {"metrics-dir", required_argument, nullptr, kOptionMetrics}, |
{"no-rate-limit", no_argument, nullptr, kOptionNoRateLimit}, |
#if defined(OS_MACOSX) |
{"reset-own-crash-exception-port-to-system-default", |
@@ -243,6 +248,10 @@ int HandlerMain(int argc, char* argv[]) { |
break; |
} |
#endif // OS_MACOSX |
+ case kOptionMetrics: { |
+ options.metrics = optarg; |
+ break; |
+ } |
case kOptionNoRateLimit: { |
options.rate_limit = false; |
break; |
@@ -386,6 +395,19 @@ int HandlerMain(int argc, char* argv[]) { |
} |
#endif // OS_MACOSX |
+ base::GlobalHistogramAllocator* histogram_allocator = nullptr; |
+ if (options.metrics) { |
+ const base::FilePath metrics_dir( |
+ ToolSupport::CommandLineArgumentToFilePathStringType(options.metrics)); |
+ static const char kMetricsName[] = "CrashpadMetrics"; |
+ const size_t kMetricsFileSize = 1 << 20; |
+ if (base::GlobalHistogramAllocator::CreateWithActiveFileInDir( |
+ metrics_dir, kMetricsFileSize, 0, kMetricsName)) { |
+ histogram_allocator = base::GlobalHistogramAllocator::Get(); |
+ histogram_allocator->CreateTrackingHistograms(kMetricsName); |
+ } |
+ } |
+ |
std::unique_ptr<CrashReportDatabase> database(CrashReportDatabase::Initialize( |
base::FilePath(ToolSupport::CommandLineArgumentToFilePathStringType( |
options.database)))); |
@@ -412,6 +434,9 @@ int HandlerMain(int argc, char* argv[]) { |
upload_thread.Stop(); |
prune_thread.Stop(); |
+ if (histogram_allocator) |
+ histogram_allocator->DeletePersistentLocation(); |
+ |
return EXIT_SUCCESS; |
} |