int tool_main(int argc, char** argv) { SkString usage; usage.printf("Time drawing .skp files.\n" "\tPossible arguments for --filter: [%s]\n\t\t[%s]", filterTypesUsage().c_str(), filterFlagsUsage().c_str()); SkCommandLineFlags::SetUsage(usage.c_str()); SkCommandLineFlags::Parse(argc, argv); if (FLAGS_repeat < 1) { SkString error; error.printf("--repeats must be >= 1. Was %i\n", FLAGS_repeat); gLogger.logError(error); exit(-1); } if (FLAGS_logFile.count() == 1) { if (!gLogger.SetLogFile(FLAGS_logFile[0])) { SkString str; str.printf("Could not open %s for writing.\n", FLAGS_logFile[0]); gLogger.logError(str); // TODO(borenet): We're disabling this for now, due to // write-protected Android devices. The very short-term // solution is to ignore the fact that we have no log file. //exit(-1); } } #if SK_ENABLE_INST_COUNT gPrintInstCount = true; #endif SkAutoGraphics ag; sk_tools::PictureBenchmark benchmark; setup_benchmark(&benchmark); int failures = 0; for (int i = 0; i < FLAGS_readPath.count(); ++i) { failures += process_input(FLAGS_readPath[i], benchmark); } if (failures != 0) { SkString err; err.printf("Failed to run %i benchmarks.\n", failures); gLogger.logError(err); return 1; } #if LAZY_CACHE_STATS if (FLAGS_trackDeferredCaching) { SkDebugf("Total cache hit rate: %f\n", (double) gTotalCacheHits / (gTotalCacheHits + gTotalCacheMisses)); } #endif return 0; }
int main(int argc, char *argv[]) { static Settings settings = { .num_images = -1, .width = 1024, .height = 1024, .do_profile = FALSE }; static GOptionEntry entries[] = { { "num-images", 'n', 0, G_OPTION_ARG_INT, &settings.num_images, "Number of images", "N" }, { "width", 'w', 0, G_OPTION_ARG_INT, &settings.width, "Width of imags", "W" }, { "height", 'h', 0, G_OPTION_ARG_INT, &settings.height, "Height of images", "H" }, { "enable-profiling", 'n', 0, G_OPTION_ARG_NONE, &settings.do_profile, "Enable profiling", NULL }, { NULL } }; GOptionContext *context; opencl_desc *ocl; Benchmark *benchmark; GError *error = NULL; context = g_option_context_new (" - test multi GPU performance"); g_option_context_add_main_entries (context, entries, NULL); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_print ("Option parsing failed: %s\n", error->message); return 1; } g_print("## %s@%s\n", g_get_user_name(), g_get_host_name()); g_thread_init (NULL); ocl = ocl_new (settings.do_profile); benchmark = setup_benchmark (ocl, &settings); measure_benchmark ("Single GPU", execute_single_gpu, benchmark); measure_benchmark ("Single Threaded, Multi GPU", execute_multi_gpu_single_thread, benchmark); measure_benchmark ("Multi Threaded, Multi GPU", execute_multi_gpu_multi_thread, benchmark); teardown_benchmark(benchmark); ocl_free(ocl); return 0; }
int tool_main(int argc, char** argv) { SetupCrashHandler(); SkString usage; usage.printf("Time drawing .skp files.\n" "\tPossible arguments for --filter: [%s]\n\t\t[%s]", filterTypesUsage().c_str(), filterFlagsUsage().c_str()); SkCommandLineFlags::SetUsage(usage.c_str()); SkCommandLineFlags::Parse(argc, argv); if (FLAGS_repeat < 1) { SkString error; error.printf("--repeats must be >= 1. Was %i\n", FLAGS_repeat); gLogger.logError(error); exit(-1); } if (FLAGS_logFile.count() == 1) { if (!gLogger.SetLogFile(FLAGS_logFile[0])) { SkString str; str.printf("Could not open %s for writing.\n", FLAGS_logFile[0]); gLogger.logError(str); // TODO(borenet): We're disabling this for now, due to // write-protected Android devices. The very short-term // solution is to ignore the fact that we have no log file. //exit(-1); } } SkAutoTDelete<PictureJSONResultsWriter> jsonWriter; if (FLAGS_jsonLog.count() == 1) { SkASSERT(FLAGS_builderName.count() == 1 && FLAGS_gitHash.count() == 1); jsonWriter.reset(SkNEW(PictureJSONResultsWriter( FLAGS_jsonLog[0], FLAGS_builderName[0], FLAGS_buildNumber, FLAGS_timestamp, FLAGS_gitHash[0], FLAGS_gitNumber))); gWriter.add(jsonWriter.get()); } gWriter.add(&gLogWriter); #if SK_ENABLE_INST_COUNT gPrintInstCount = true; #endif SkAutoGraphics ag; sk_tools::PictureBenchmark benchmark; setup_benchmark(&benchmark); int failures = 0; for (int i = 0; i < FLAGS_readPath.count(); ++i) { failures += process_input(FLAGS_readPath[i], benchmark); } if (failures != 0) { SkString err; err.printf("Failed to run %i benchmarks.\n", failures); gLogger.logError(err); return 1; } #if SK_LAZY_CACHE_STATS if (FLAGS_trackDeferredCaching) { SkDebugf("Total cache hit rate: %f\n", (double) gTotalCacheHits / (gTotalCacheHits + gTotalCacheMisses)); } #endif #if GR_GPU_STATS if (FLAGS_gpuStats && benchmark.renderer()->isUsingGpuDevice()) { GrContext* ctx = benchmark.renderer()->getGrContext(); SkDebugf("RenderTarget Binds: %d\n", ctx->gpuStats()->renderTargetBinds()); SkDebugf("Shader Compilations: %d\n", ctx->gpuStats()->shaderCompilations()); } #endif gWriter.end(); return 0; }