27 #ifdef BENCHMARK_OS_WINDOWS
32 #endif // BENCHMARK_OS_WINDOWS
36 #ifdef BENCHMARK_OS_WINDOWS
37 typedef WORD PlatformColorCode;
39 typedef const char* PlatformColorCode;
42 PlatformColorCode GetPlatformColorCode(
LogColor color) {
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;
88 va_copy(args_cp,
args);
90 std::size_t
size = 256;
101 else if (
static_cast<size_t>(
ret) <
size)
106 std::unique_ptr<char[]> buff(
new char[
size]);
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);
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