mirror of https://github.com/google/benchmark.git
* Adding Host Name and test * Addressing Review Comments * Adding Test for JSON Reporter * Adding HOST_NAME_MAX for MacOS systems * Adding Explaination for MacOS HOST_NAME_MAX Addition * Addressing Peer Review Comments * Adding codecvt in windows header guard * Changing name SystemInfo and adding empty message incase host name fetch fails * Adding Comment on Struct SystemInfo
This commit is contained in:
parent
1f3cba06e4
commit
47a5f77d75
|
@ -1293,6 +1293,15 @@ struct CPUInfo {
|
||||||
BENCHMARK_DISALLOW_COPY_AND_ASSIGN(CPUInfo);
|
BENCHMARK_DISALLOW_COPY_AND_ASSIGN(CPUInfo);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Adding Struct for System Information
|
||||||
|
struct SystemInfo {
|
||||||
|
std::string name;
|
||||||
|
static const SystemInfo& Get();
|
||||||
|
private:
|
||||||
|
SystemInfo();
|
||||||
|
BENCHMARK_DISALLOW_COPY_AND_ASSIGN(SystemInfo);
|
||||||
|
};
|
||||||
|
|
||||||
// Interface for custom benchmark result printers.
|
// Interface for custom benchmark result printers.
|
||||||
// By default, benchmark reports are printed to stdout. However an application
|
// By default, benchmark reports are printed to stdout. However an application
|
||||||
// can control the destination of the reports by calling
|
// can control the destination of the reports by calling
|
||||||
|
@ -1302,6 +1311,7 @@ class BenchmarkReporter {
|
||||||
public:
|
public:
|
||||||
struct Context {
|
struct Context {
|
||||||
CPUInfo const& cpu_info;
|
CPUInfo const& cpu_info;
|
||||||
|
SystemInfo const& sys_info;
|
||||||
// The number of chars in the longest benchmark name.
|
// The number of chars in the longest benchmark name.
|
||||||
size_t name_field_width;
|
size_t name_field_width;
|
||||||
static const char* executable_name;
|
static const char* executable_name;
|
||||||
|
|
|
@ -77,6 +77,8 @@ bool JSONReporter::ReportContext(const Context& context) {
|
||||||
std::string walltime_value = LocalDateTimeString();
|
std::string walltime_value = LocalDateTimeString();
|
||||||
out << indent << FormatKV("date", walltime_value) << ",\n";
|
out << indent << FormatKV("date", walltime_value) << ",\n";
|
||||||
|
|
||||||
|
out << indent << FormatKV("host_name", context.sys_info.name) << ",\n";
|
||||||
|
|
||||||
if (Context::executable_name) {
|
if (Context::executable_name) {
|
||||||
// windows uses backslash for its path separator,
|
// windows uses backslash for its path separator,
|
||||||
// which must be escaped in JSON otherwise it blows up conforming JSON
|
// which must be escaped in JSON otherwise it blows up conforming JSON
|
||||||
|
|
|
@ -79,7 +79,8 @@ void BenchmarkReporter::PrintBasicContext(std::ostream *out,
|
||||||
// No initializer because it's already initialized to NULL.
|
// No initializer because it's already initialized to NULL.
|
||||||
const char *BenchmarkReporter::Context::executable_name;
|
const char *BenchmarkReporter::Context::executable_name;
|
||||||
|
|
||||||
BenchmarkReporter::Context::Context() : cpu_info(CPUInfo::Get()) {}
|
BenchmarkReporter::Context::Context()
|
||||||
|
: cpu_info(CPUInfo::Get()), sys_info(SystemInfo::Get()) {}
|
||||||
|
|
||||||
std::string BenchmarkReporter::Run::benchmark_name() const {
|
std::string BenchmarkReporter::Run::benchmark_name() const {
|
||||||
std::string name = run_name;
|
std::string name = run_name;
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#undef StrCat // Don't let StrCat in string_util.h be renamed to lstrcatA
|
#undef StrCat // Don't let StrCat in string_util.h be renamed to lstrcatA
|
||||||
#include <versionhelpers.h>
|
#include <versionhelpers.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <codecvt>
|
||||||
#else
|
#else
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#ifndef BENCHMARK_OS_FUCHSIA
|
#ifndef BENCHMARK_OS_FUCHSIA
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
#include "check.h"
|
#include "check.h"
|
||||||
#include "cycleclock.h"
|
#include "cycleclock.h"
|
||||||
|
@ -366,6 +368,35 @@ std::vector<CPUInfo::CacheInfo> GetCacheSizes() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string GetSystemName() {
|
||||||
|
#if defined(BENCHMARK_OS_WINDOWS)
|
||||||
|
std::string str;
|
||||||
|
const unsigned COUNT = MAX_COMPUTERNAME_LENGTH+1;
|
||||||
|
TCHAR hostname[COUNT] = {'\0'};
|
||||||
|
DWORD DWCOUNT = COUNT;
|
||||||
|
if (!GetComputerName(hostname, &DWCOUNT))
|
||||||
|
return std::string("");
|
||||||
|
#ifndef UNICODE
|
||||||
|
str = std::string(hostname, DWCOUNT);
|
||||||
|
#else
|
||||||
|
//Using wstring_convert, Is deprecated in C++17
|
||||||
|
using convert_type = std::codecvt_utf8<wchar_t>;
|
||||||
|
std::wstring_convert<convert_type, wchar_t> converter;
|
||||||
|
std::wstring wStr(hostname, DWCOUNT);
|
||||||
|
str = converter.to_bytes(wStr);
|
||||||
|
#endif
|
||||||
|
return str;
|
||||||
|
#else // defined(BENCHMARK_OS_WINDOWS)
|
||||||
|
#ifdef BENCHMARK_OS_MACOSX //Mac Doesnt have HOST_NAME_MAX defined
|
||||||
|
#define HOST_NAME_MAX 64
|
||||||
|
#endif
|
||||||
|
char hostname[HOST_NAME_MAX];
|
||||||
|
int retVal = gethostname(hostname, HOST_NAME_MAX);
|
||||||
|
if (retVal != 0) return std::string("");
|
||||||
|
return std::string(hostname);
|
||||||
|
#endif // Catch-all POSIX block.
|
||||||
|
}
|
||||||
|
|
||||||
int GetNumCPUs() {
|
int GetNumCPUs() {
|
||||||
#ifdef BENCHMARK_HAS_SYSCTL
|
#ifdef BENCHMARK_HAS_SYSCTL
|
||||||
int NumCPU = -1;
|
int NumCPU = -1;
|
||||||
|
@ -609,4 +640,11 @@ CPUInfo::CPUInfo()
|
||||||
scaling_enabled(CpuScalingEnabled(num_cpus)),
|
scaling_enabled(CpuScalingEnabled(num_cpus)),
|
||||||
load_avg(GetLoadAvg()) {}
|
load_avg(GetLoadAvg()) {}
|
||||||
|
|
||||||
|
|
||||||
|
const SystemInfo& SystemInfo::Get() {
|
||||||
|
static const SystemInfo* info = new SystemInfo();
|
||||||
|
return *info;
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemInfo::SystemInfo() : name(GetSystemName()) {}
|
||||||
} // end namespace benchmark
|
} // end namespace benchmark
|
||||||
|
|
|
@ -23,6 +23,7 @@ static int AddContextCases() {
|
||||||
{{"^\\{", MR_Default},
|
{{"^\\{", MR_Default},
|
||||||
{"\"context\":", MR_Next},
|
{"\"context\":", MR_Next},
|
||||||
{"\"date\": \"", MR_Next},
|
{"\"date\": \"", MR_Next},
|
||||||
|
{"\"host_name\":", MR_Next},
|
||||||
{"\"executable\": \".*(/|\\\\)reporter_output_test(\\.exe)?\",",
|
{"\"executable\": \".*(/|\\\\)reporter_output_test(\\.exe)?\",",
|
||||||
MR_Next},
|
MR_Next},
|
||||||
{"\"num_cpus\": %int,$", MR_Next},
|
{"\"num_cpus\": %int,$", MR_Next},
|
||||||
|
|
Loading…
Reference in New Issue