From 90e050e5982a5cddc3d544d103eccc06be42f184 Mon Sep 17 00:00:00 2001 From: "ted.mielczarek" Date: Wed, 30 May 2007 12:14:09 +0000 Subject: [PATCH] Issue 143 - MinidumpProcessor should extract number of processors. r=mento git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@180 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/google_breakpad/processor/system_info.h | 8 ++++++++ src/processor/minidump_processor.cc | 2 ++ src/processor/minidump_stackwalk.cc | 11 ++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/google_breakpad/processor/system_info.h b/src/google_breakpad/processor/system_info.h index 49776b75..fdbdbfd6 100644 --- a/src/google_breakpad/processor/system_info.h +++ b/src/google_breakpad/processor/system_info.h @@ -43,6 +43,9 @@ using std::string; struct SystemInfo { public: + SystemInfo() : os(), os_short(), os_version(), cpu(), cpu_info(), + cpu_count(0) {} + // Resets the SystemInfo object to its default values. void Clear() { os.clear(); @@ -50,6 +53,7 @@ struct SystemInfo { os_version.clear(); cpu.clear(); cpu_info.clear(); + cpu_count = 0; } // A string identifying the operating system, such as "Windows NT", @@ -82,6 +86,10 @@ struct SystemInfo { // present in the dump, or additional identifying information is not // defined for the CPU family, this field will be empty. string cpu_info; + + // The number of processors in the system. Will be greater than one for + // multi-core systems. + int cpu_count; }; } // namespace google_breakpad diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc index 6ab8c07d..9b426d53 100644 --- a/src/processor/minidump_processor.cc +++ b/src/processor/minidump_processor.cc @@ -290,6 +290,8 @@ bool MinidumpProcessor::GetCPUInfo(Minidump *dump, SystemInfo *info) { } } + info->cpu_count = raw_system_info->number_of_processors; + return true; } diff --git a/src/processor/minidump_stackwalk.cc b/src/processor/minidump_stackwalk.cc index 299dd0e7..01b601c7 100644 --- a/src/processor/minidump_stackwalk.cc +++ b/src/processor/minidump_stackwalk.cc @@ -300,6 +300,9 @@ static void PrintProcessState(const ProcessState& process_state) { // This field is optional. printf(" %s\n", cpu_info.c_str()); } + printf(" %d CPU%s\n", + process_state.system_info()->cpu_count, + process_state.system_info()->cpu_count != 1 ? "s" : ""); printf("\n"); // Print crash information. @@ -339,16 +342,18 @@ static void PrintProcessStateMachineReadable(const ProcessState& process_state) { // Print OS and CPU information. // OS|{OS Name}|{OS Version} - // CPU|{CPU Name}|{CPU Info} + // CPU|{CPU Name}|{CPU Info}|{Number of CPUs} printf("OS%c%s%c%s\n", kOutputSeparator, StripSeparator(process_state.system_info()->os).c_str(), kOutputSeparator, StripSeparator(process_state.system_info()->os_version).c_str()); - printf("CPU%c%s%c%s\n", kOutputSeparator, + printf("CPU%c%s%c%s%c%d\n", kOutputSeparator, StripSeparator(process_state.system_info()->cpu).c_str(), kOutputSeparator, // this may be empty - StripSeparator(process_state.system_info()->cpu_info).c_str()); + StripSeparator(process_state.system_info()->cpu_info).c_str(), + kOutputSeparator, + process_state.system_info()->cpu_count); int requesting_thread = process_state.requesting_thread();