27 #ifdef BENCHMARK_OS_WINDOWS
32 #endif // BENCHMARK_OS_WINDOWS
36 #ifdef BENCHMARK_OS_WINDOWS
37 typedef WORD PlatformColorCode;
39 typedef const char* PlatformColorCode;
43 #ifdef BENCHMARK_OS_WINDOWS
46 return FOREGROUND_RED;
48 return FOREGROUND_GREEN;
50 return FOREGROUND_RED | FOREGROUND_GREEN;
52 return FOREGROUND_BLUE;
54 return FOREGROUND_BLUE | FOREGROUND_RED;
56 return FOREGROUND_BLUE | FOREGROUND_GREEN;
90 std::size_t
size = 256;
92 auto ret = vsnprintf(local_buff,
size, msg, args_cp);
101 else if (
static_cast<size_t>(ret) <
size)
105 size = (size_t)ret + 1;
106 std::unique_ptr<char[]> buff(
new char[
size]);
107 ret = vsnprintf(buff.get(),
size, msg,
args);
130 #ifdef BENCHMARK_OS_WINDOWS
133 const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
136 CONSOLE_SCREEN_BUFFER_INFO buffer_info;
137 GetConsoleScreenBufferInfo(stdout_handle, &buffer_info);
138 const WORD old_color_attrs = buffer_info.wAttributes;
144 SetConsoleTextAttribute(stdout_handle,
145 GetPlatformColorCode(
color) | FOREGROUND_INTENSITY);
150 SetConsoleTextAttribute(stdout_handle, old_color_attrs);
152 const char* color_code = GetPlatformColorCode(
color);
153 if (color_code) out <<
FormatString(
"\033[0;3%sm", color_code);
159 #if BENCHMARK_OS_WINDOWS
162 return 0 != _isatty(_fileno(
stdout));
167 const char*
const SUPPORTED_TERM_VALUES[] = {
168 "xterm",
"xterm-color",
"xterm-256color",
169 "screen",
"screen-256color",
"tmux",
170 "tmux-256color",
"rxvt-unicode",
"rxvt-unicode-256color",
174 const char*
const term = getenv(
"TERM");
176 bool term_supports_color =
false;
177 for (
const char* candidate : SUPPORTED_TERM_VALUES) {
178 if (term && 0 == strcmp(term, candidate)) {
179 term_supports_color =
true;
184 return 0 != isatty(fileno(
stdout)) && term_supports_color;
185 #endif // BENCHMARK_OS_WINDOWS