| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include <ctype.h> | 8 #include <ctype.h> |
| 9 | 9 |
| 10 #include "nanobench.h" | 10 #include "nanobench.h" |
| (...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 998 log->key(FLAGS_key[i-1], FLAGS_key[i]); | 998 log->key(FLAGS_key[i-1], FLAGS_key[i]); |
| 999 } | 999 } |
| 1000 | 1000 |
| 1001 const double overhead = estimate_timer_overhead(); | 1001 const double overhead = estimate_timer_overhead(); |
| 1002 SkDebugf("Timer overhead: %s\n", HUMANIZE(overhead)); | 1002 SkDebugf("Timer overhead: %s\n", HUMANIZE(overhead)); |
| 1003 | 1003 |
| 1004 SkTArray<double> samples; | 1004 SkTArray<double> samples; |
| 1005 | 1005 |
| 1006 if (kAutoTuneLoops != FLAGS_loops) { | 1006 if (kAutoTuneLoops != FLAGS_loops) { |
| 1007 SkDebugf("Fixed number of loops; times would only be misleading so we wo
n't print them.\n"); | 1007 SkDebugf("Fixed number of loops; times would only be misleading so we wo
n't print them.\n"); |
| 1008 } else if (FLAGS_verbose) { | |
| 1009 // No header. | |
| 1010 } else if (FLAGS_quiet) { | 1008 } else if (FLAGS_quiet) { |
| 1011 SkDebugf("median\tbench\tconfig\n"); | 1009 SkDebugf("median\tbench\tconfig\n"); |
| 1012 } else if (kTimedSampling == FLAGS_samples) { | 1010 } else if (kTimedSampling == FLAGS_samples) { |
| 1013 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\tsamples\tc
onfig\tbench\n"); | 1011 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\tsamples\tc
onfig\tbench\n"); |
| 1014 } else { | 1012 } else { |
| 1015 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\t%-*s\tconf
ig\tbench\n", | 1013 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\t%-*s\tconf
ig\tbench\n", |
| 1016 FLAGS_samples, "samples"); | 1014 FLAGS_samples, "samples"); |
| 1017 } | 1015 } |
| 1018 | 1016 |
| 1019 SkTDArray<Config> configs; | 1017 SkTDArray<Config> configs; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1096 | 1094 |
| 1097 if (kAutoTuneLoops != FLAGS_loops) { | 1095 if (kAutoTuneLoops != FLAGS_loops) { |
| 1098 if (configs.count() == 1) { | 1096 if (configs.count() == 1) { |
| 1099 config = ""; // Only print the config if we run the same ben
ch on more than one. | 1097 config = ""; // Only print the config if we run the same ben
ch on more than one. |
| 1100 } | 1098 } |
| 1101 SkDebugf("%4d/%-4dMB\t%s\t%s\n" | 1099 SkDebugf("%4d/%-4dMB\t%s\t%s\n" |
| 1102 , sk_tools::getCurrResidentSetSizeMB() | 1100 , sk_tools::getCurrResidentSetSizeMB() |
| 1103 , sk_tools::getMaxResidentSetSizeMB() | 1101 , sk_tools::getMaxResidentSetSizeMB() |
| 1104 , bench->getUniqueName() | 1102 , bench->getUniqueName() |
| 1105 , config); | 1103 , config); |
| 1106 } else if (FLAGS_verbose) { | |
| 1107 for (int i = 0; i < samples.count(); i++) { | |
| 1108 SkDebugf("%s ", HUMANIZE(samples[i])); | |
| 1109 } | |
| 1110 SkDebugf("%s\n", bench->getUniqueName()); | |
| 1111 } else if (FLAGS_quiet) { | 1104 } else if (FLAGS_quiet) { |
| 1112 if (configs.count() == 1) { | 1105 if (configs.count() == 1) { |
| 1113 config = ""; // Only print the config if we run the same ben
ch on more than one. | 1106 config = ""; // Only print the config if we run the same ben
ch on more than one. |
| 1114 } | 1107 } |
| 1115 SkDebugf("%s\t%s\t%s\n", HUMANIZE(stats.median), bench->getUniqu
eName(), config); | 1108 SkDebugf("%s\t%s\t%s\n", HUMANIZE(stats.median), bench->getUniqu
eName(), config); |
| 1116 } else { | 1109 } else { |
| 1117 const double stddev_percent = 100 * sqrt(stats.var) / stats.mean
; | 1110 const double stddev_percent = 100 * sqrt(stats.var) / stats.mean
; |
| 1118 SkDebugf("%4d/%-4dMB\t%d\t%s\t%s\t%s\t%s\t%.0f%%\t%s\t%s\t%s\n" | 1111 SkDebugf("%4d/%-4dMB\t%d\t%s\t%s\t%s\t%s\t%.0f%%\t%s\t%s\t%s\n" |
| 1119 , sk_tools::getCurrResidentSetSizeMB() | 1112 , sk_tools::getCurrResidentSetSizeMB() |
| 1120 , sk_tools::getMaxResidentSetSizeMB() | 1113 , sk_tools::getMaxResidentSetSizeMB() |
| 1121 , loops | 1114 , loops |
| 1122 , HUMANIZE(stats.min) | 1115 , HUMANIZE(stats.min) |
| 1123 , HUMANIZE(stats.median) | 1116 , HUMANIZE(stats.median) |
| 1124 , HUMANIZE(stats.mean) | 1117 , HUMANIZE(stats.mean) |
| 1125 , HUMANIZE(stats.max) | 1118 , HUMANIZE(stats.max) |
| 1126 , stddev_percent | 1119 , stddev_percent |
| 1127 , kTimedSampling != FLAGS_samples ? stats.plot.c_str() | 1120 , kTimedSampling != FLAGS_samples ? stats.plot.c_str() |
| 1128 : to_string(samples.co
unt()).c_str() | 1121 : to_string(samples.co
unt()).c_str() |
| 1129 , config | 1122 , config |
| 1130 , bench->getUniqueName() | 1123 , bench->getUniqueName() |
| 1131 ); | 1124 ); |
| 1132 } | 1125 } |
| 1133 #if SK_SUPPORT_GPU | 1126 #if SK_SUPPORT_GPU |
| 1134 if (FLAGS_gpuStats && | 1127 if (FLAGS_gpuStats && |
| 1135 Benchmark::kGPU_Backend == configs[i].backend) { | 1128 Benchmark::kGPU_Backend == configs[i].backend) { |
| 1136 gGrFactory->get(configs[i].ctxType)->printCacheStats(); | 1129 gGrFactory->get(configs[i].ctxType)->printCacheStats(); |
| 1137 gGrFactory->get(configs[i].ctxType)->printGpuStats(); | 1130 gGrFactory->get(configs[i].ctxType)->printGpuStats(); |
| 1138 } | 1131 } |
| 1139 #endif | 1132 #endif |
| 1133 if (FLAGS_verbose) { |
| 1134 SkDebugf("Samples: "); |
| 1135 for (int i = 0; i < samples.count(); i++) { |
| 1136 SkDebugf("%s ", HUMANIZE(samples[i])); |
| 1137 } |
| 1138 SkDebugf("%s\n", bench->getUniqueName()); |
| 1139 } |
| 1140 cleanup_run(target); | 1140 cleanup_run(target); |
| 1141 } | 1141 } |
| 1142 } | 1142 } |
| 1143 | 1143 |
| 1144 log->bench("memory_usage", 0,0); | 1144 log->bench("memory_usage", 0,0); |
| 1145 log->config("meta"); | 1145 log->config("meta"); |
| 1146 log->metric("max_rss_mb", sk_tools::getMaxResidentSetSizeMB()); | 1146 log->metric("max_rss_mb", sk_tools::getMaxResidentSetSizeMB()); |
| 1147 | 1147 |
| 1148 #if SK_SUPPORT_GPU | 1148 #if SK_SUPPORT_GPU |
| 1149 // Make sure we clean up the global GrContextFactory here, otherwise we migh
t race with the | 1149 // Make sure we clean up the global GrContextFactory here, otherwise we migh
t race with the |
| 1150 // SkEventTracer destructor | 1150 // SkEventTracer destructor |
| 1151 gGrFactory.reset(NULL); | 1151 gGrFactory.reset(NULL); |
| 1152 #endif | 1152 #endif |
| 1153 | 1153 |
| 1154 return 0; | 1154 return 0; |
| 1155 } | 1155 } |
| 1156 | 1156 |
| 1157 #if !defined SK_BUILD_FOR_IOS | 1157 #if !defined SK_BUILD_FOR_IOS |
| 1158 int main(int argc, char** argv) { | 1158 int main(int argc, char** argv) { |
| 1159 SkCommandLineFlags::Parse(argc, argv); | 1159 SkCommandLineFlags::Parse(argc, argv); |
| 1160 return nanobench_main(); | 1160 return nanobench_main(); |
| 1161 } | 1161 } |
| 1162 #endif | 1162 #endif |
| OLD | NEW |