| 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 20 matching lines...) Expand all Loading... |
| 31 #include "SkData.h" | 31 #include "SkData.h" |
| 32 #include "SkForceLinking.h" | 32 #include "SkForceLinking.h" |
| 33 #include "SkGraphics.h" | 33 #include "SkGraphics.h" |
| 34 #include "SkOSFile.h" | 34 #include "SkOSFile.h" |
| 35 #include "SkPictureRecorder.h" | 35 #include "SkPictureRecorder.h" |
| 36 #include "SkPictureUtils.h" | 36 #include "SkPictureUtils.h" |
| 37 #include "SkString.h" | 37 #include "SkString.h" |
| 38 #include "SkSurface.h" | 38 #include "SkSurface.h" |
| 39 #include "SkTaskGroup.h" | 39 #include "SkTaskGroup.h" |
| 40 #include "SkThreadUtils.h" | 40 #include "SkThreadUtils.h" |
| 41 #include "ThermalManager.h" |
| 41 | 42 |
| 42 #include <stdlib.h> | 43 #include <stdlib.h> |
| 43 | 44 |
| 44 #ifndef SK_BUILD_FOR_WIN32 | 45 #ifndef SK_BUILD_FOR_WIN32 |
| 45 #include <unistd.h> | 46 #include <unistd.h> |
| 46 #endif | 47 #endif |
| 47 | 48 |
| 48 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK | 49 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK |
| 49 #include "nanobenchAndroid.h" | 50 #include "nanobenchAndroid.h" |
| 50 #endif | 51 #endif |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 DEFINE_string(zoom, "1.0,0", "Comma-separated zoomMax,zoomPeriodMs factors for a
periodic SKP zoom " | 105 DEFINE_string(zoom, "1.0,0", "Comma-separated zoomMax,zoomPeriodMs factors for a
periodic SKP zoom " |
| 105 "function that ping-pongs between 1.0 and zoomMax."
); | 106 "function that ping-pongs between 1.0 and zoomMax."
); |
| 106 DEFINE_bool(bbh, true, "Build a BBH for SKPs?"); | 107 DEFINE_bool(bbh, true, "Build a BBH for SKPs?"); |
| 107 DEFINE_bool(mpd, true, "Use MultiPictureDraw for the SKPs?"); | 108 DEFINE_bool(mpd, true, "Use MultiPictureDraw for the SKPs?"); |
| 108 DEFINE_bool(loopSKP, true, "Loop SKPs like we do for micro benches?"); | 109 DEFINE_bool(loopSKP, true, "Loop SKPs like we do for micro benches?"); |
| 109 DEFINE_int32(flushEvery, 10, "Flush --outResultsFile every Nth run."); | 110 DEFINE_int32(flushEvery, 10, "Flush --outResultsFile every Nth run."); |
| 110 DEFINE_bool(resetGpuContext, true, "Reset the GrContext before running each test
."); | 111 DEFINE_bool(resetGpuContext, true, "Reset the GrContext before running each test
."); |
| 111 DEFINE_bool(gpuStats, false, "Print GPU stats after each gpu benchmark?"); | 112 DEFINE_bool(gpuStats, false, "Print GPU stats after each gpu benchmark?"); |
| 112 DEFINE_bool(gpuStatsDump, false, "Dump GPU states after each benchmark to json")
; | 113 DEFINE_bool(gpuStatsDump, false, "Dump GPU states after each benchmark to json")
; |
| 113 DEFINE_bool(keepAlive, false, "Print a message every so often so that we don't t
ime out"); | 114 DEFINE_bool(keepAlive, false, "Print a message every so often so that we don't t
ime out"); |
| 115 DEFINE_string(useThermalManager, "0,1,10,1000", "enabled,threshold,sleepTimeMs,T
imeoutMs for " |
| 116 "thermalManager\n"); |
| 114 | 117 |
| 115 DEFINE_string(sourceType, "", | 118 DEFINE_string(sourceType, "", |
| 116 "Apply usual --match rules to source type: bench, gm, skp, image, etc.")
; | 119 "Apply usual --match rules to source type: bench, gm, skp, image, etc.")
; |
| 117 DEFINE_string(benchType, "", | 120 DEFINE_string(benchType, "", |
| 118 "Apply usual --match rules to bench type: micro, recording, playback, sk
codec, etc."); | 121 "Apply usual --match rules to bench type: micro, recording, playback, sk
codec, etc."); |
| 119 | 122 |
| 120 static double now_ms() { return SkTime::GetNSecs() * 1e-6; } | 123 static double now_ms() { return SkTime::GetNSecs() * 1e-6; } |
| 121 | 124 |
| 122 static SkString humanize(double ms) { | 125 static SkString humanize(double ms) { |
| 123 if (FLAGS_verbose) return SkStringPrintf("%llu", (uint64_t)(ms*1e6)); | 126 if (FLAGS_verbose) return SkStringPrintf("%llu", (uint64_t)(ms*1e6)); |
| (...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 } else if (FLAGS_ms) { | 1052 } else if (FLAGS_ms) { |
| 1050 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\tsamples\tc
onfig\tbench\n"); | 1053 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\tsamples\tc
onfig\tbench\n"); |
| 1051 } else { | 1054 } else { |
| 1052 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\t%-*s\tconf
ig\tbench\n", | 1055 SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\t%-*s\tconf
ig\tbench\n", |
| 1053 FLAGS_samples, "samples"); | 1056 FLAGS_samples, "samples"); |
| 1054 } | 1057 } |
| 1055 | 1058 |
| 1056 SkTArray<Config> configs; | 1059 SkTArray<Config> configs; |
| 1057 create_configs(&configs); | 1060 create_configs(&configs); |
| 1058 | 1061 |
| 1062 #ifdef THERMAL_MANAGER_SUPPORTED |
| 1063 int tmEnabled, tmThreshold, tmSleepTimeMs, tmTimeoutMs; |
| 1064 if (4 != sscanf(FLAGS_useThermalManager[0], "%d,%d,%d,%d", |
| 1065 &tmEnabled, &tmThreshold, &tmSleepTimeMs, &tmTimeoutMs)) { |
| 1066 SkDebugf("Can't parse %s from --useThermalManager.\n", FLAGS_useThermalM
anager[0]); |
| 1067 exit(1); |
| 1068 } |
| 1069 ThermalManager tm(tmThreshold, tmSleepTimeMs, tmTimeoutMs); |
| 1070 #endif |
| 1071 |
| 1059 if (FLAGS_keepAlive) { | 1072 if (FLAGS_keepAlive) { |
| 1060 start_keepalive(); | 1073 start_keepalive(); |
| 1061 } | 1074 } |
| 1062 | 1075 |
| 1063 int runs = 0; | 1076 int runs = 0; |
| 1064 BenchmarkStream benchStream; | 1077 BenchmarkStream benchStream; |
| 1065 while (Benchmark* b = benchStream.next()) { | 1078 while (Benchmark* b = benchStream.next()) { |
| 1066 SkAutoTDelete<Benchmark> bench(b); | 1079 SkAutoTDelete<Benchmark> bench(b); |
| 1067 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getUniqueName()))
{ | 1080 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getUniqueName()))
{ |
| 1068 continue; | 1081 continue; |
| 1069 } | 1082 } |
| 1070 | 1083 |
| 1071 if (!configs.empty()) { | 1084 if (!configs.empty()) { |
| 1072 log->bench(bench->getUniqueName(), bench->getSize().fX, bench->getSi
ze().fY); | 1085 log->bench(bench->getUniqueName(), bench->getSize().fX, bench->getSi
ze().fY); |
| 1073 bench->delayedSetup(); | 1086 bench->delayedSetup(); |
| 1074 } | 1087 } |
| 1075 for (int i = 0; i < configs.count(); ++i) { | 1088 for (int i = 0; i < configs.count(); ++i) { |
| 1089 #ifdef THERMAL_MANAGER_SUPPORTED |
| 1090 if (tmEnabled && !tm.coolOffIfNecessary()) { |
| 1091 SkDebugf("Could not cool off, timings will be throttled\n"); |
| 1092 } |
| 1093 #endif |
| 1076 Target* target = is_enabled(b, configs[i]); | 1094 Target* target = is_enabled(b, configs[i]); |
| 1077 if (!target) { | 1095 if (!target) { |
| 1078 continue; | 1096 continue; |
| 1079 } | 1097 } |
| 1080 | 1098 |
| 1081 // During HWUI output this canvas may be nullptr. | 1099 // During HWUI output this canvas may be nullptr. |
| 1082 SkCanvas* canvas = target->getCanvas(); | 1100 SkCanvas* canvas = target->getCanvas(); |
| 1083 const char* config = target->config.name.c_str(); | 1101 const char* config = target->config.name.c_str(); |
| 1084 | 1102 |
| 1085 if (FLAGS_pre_log) { | 1103 if (FLAGS_pre_log) { |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1222 | 1240 |
| 1223 return 0; | 1241 return 0; |
| 1224 } | 1242 } |
| 1225 | 1243 |
| 1226 #if !defined SK_BUILD_FOR_IOS | 1244 #if !defined SK_BUILD_FOR_IOS |
| 1227 int main(int argc, char** argv) { | 1245 int main(int argc, char** argv) { |
| 1228 SkCommandLineFlags::Parse(argc, argv); | 1246 SkCommandLineFlags::Parse(argc, argv); |
| 1229 return nanobench_main(); | 1247 return nanobench_main(); |
| 1230 } | 1248 } |
| 1231 #endif | 1249 #endif |
| OLD | NEW |