Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(597)

Side by Side Diff: bench/benchmain.cpp

Issue 73643005: Implement a benchmark for GrResourceCache (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: address comments Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « bench/XfermodeBench.cpp ('k') | gm/bleed.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #if SK_SUPPORT_GPU 9 #if SK_SUPPORT_GPU
10 #include "GrContext.h" 10 #include "GrContext.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 static void performScale(SkCanvas* canvas, int w, int h) { 151 static void performScale(SkCanvas* canvas, int w, int h) {
152 const SkScalar x = SkIntToScalar(w) / 2; 152 const SkScalar x = SkIntToScalar(w) / 2;
153 const SkScalar y = SkIntToScalar(h) / 2; 153 const SkScalar y = SkIntToScalar(h) / 2;
154 154
155 canvas->translate(x, y); 155 canvas->translate(x, y);
156 // just enough so we can't take the sprite case 156 // just enough so we can't take the sprite case
157 canvas->scale(SK_Scalar1 * 99/100, SK_Scalar1 * 99/100); 157 canvas->scale(SK_Scalar1 * 99/100, SK_Scalar1 * 99/100);
158 canvas->translate(-x, -y); 158 canvas->translate(-x, -y);
159 } 159 }
160 160
161 enum Backend {
162 kNonRendering_Backend,
163 kRaster_Backend,
164 kGPU_Backend,
165 kPDF_Backend,
166 };
167
168 static SkBaseDevice* make_device(SkBitmap::Config config, const SkIPoint& size, 161 static SkBaseDevice* make_device(SkBitmap::Config config, const SkIPoint& size,
169 Backend backend, int sampleCount, GrContext* co ntext) { 162 SkBenchmark::Backend backend, int sampleCount, GrContext* context) {
170 SkBaseDevice* device = NULL; 163 SkBaseDevice* device = NULL;
171 SkBitmap bitmap; 164 SkBitmap bitmap;
172 bitmap.setConfig(config, size.fX, size.fY); 165 bitmap.setConfig(config, size.fX, size.fY);
173 166
174 switch (backend) { 167 switch (backend) {
175 case kRaster_Backend: 168 case SkBenchmark::kRaster_Backend:
176 bitmap.allocPixels(); 169 bitmap.allocPixels();
177 erase(bitmap); 170 erase(bitmap);
178 device = SkNEW_ARGS(SkBitmapDevice, (bitmap)); 171 device = SkNEW_ARGS(SkBitmapDevice, (bitmap));
179 break; 172 break;
180 #if SK_SUPPORT_GPU 173 #if SK_SUPPORT_GPU
181 case kGPU_Backend: { 174 case SkBenchmark::kGPU_Backend: {
182 GrTextureDesc desc; 175 GrTextureDesc desc;
183 desc.fConfig = kSkia8888_GrPixelConfig; 176 desc.fConfig = kSkia8888_GrPixelConfig;
184 desc.fFlags = kRenderTarget_GrTextureFlagBit; 177 desc.fFlags = kRenderTarget_GrTextureFlagBit;
185 desc.fWidth = size.fX; 178 desc.fWidth = size.fX;
186 desc.fHeight = size.fY; 179 desc.fHeight = size.fY;
187 desc.fSampleCnt = sampleCount; 180 desc.fSampleCnt = sampleCount;
188 SkAutoTUnref<GrTexture> texture(context->createUncachedTexture(desc, NULL, 0)); 181 SkAutoTUnref<GrTexture> texture(context->createUncachedTexture(desc, NULL, 0));
189 if (!texture) { 182 if (!texture) {
190 return NULL; 183 return NULL;
191 } 184 }
192 device = SkNEW_ARGS(SkGpuDevice, (context, texture.get())); 185 device = SkNEW_ARGS(SkGpuDevice, (context, texture.get()));
193 break; 186 break;
194 } 187 }
195 #endif 188 #endif
196 case kPDF_Backend: 189 case SkBenchmark::kPDF_Backend:
197 default: 190 default:
198 SkDEBUGFAIL("unsupported"); 191 SkDEBUGFAIL("unsupported");
199 } 192 }
200 return device; 193 return device;
201 } 194 }
202 195
203 #if SK_SUPPORT_GPU 196 #if SK_SUPPORT_GPU
204 GrContextFactory gContextFactory; 197 GrContextFactory gContextFactory;
205 typedef GrContextFactory::GLContextType GLContextType; 198 typedef GrContextFactory::GLContextType GLContextType;
206 static const GLContextType kNative = GrContextFactory::kNative_GLContextType; 199 static const GLContextType kNative = GrContextFactory::kNative_GLContextType;
(...skipping 10 matching lines...) Expand all
217 #ifdef SK_DEBUG 210 #ifdef SK_DEBUG
218 static const bool kIsDebug = true; 211 static const bool kIsDebug = true;
219 #else 212 #else
220 static const bool kIsDebug = false; 213 static const bool kIsDebug = false;
221 #endif 214 #endif
222 215
223 static const struct Config { 216 static const struct Config {
224 SkBitmap::Config config; 217 SkBitmap::Config config;
225 const char* name; 218 const char* name;
226 int sampleCount; 219 int sampleCount;
227 Backend backend; 220 SkBenchmark::Backend backend;
228 GLContextType contextType; 221 GLContextType contextType;
229 bool runByDefault; 222 bool runByDefault;
230 } gConfigs[] = { 223 } gConfigs[] = {
231 { SkBitmap::kNo_Config, "NONRENDERING", 0, kNonRendering_Backend, kNa tive, true}, 224 { SkBitmap::kNo_Config, "NONRENDERING", 0, SkBenchmark::kNonRendering _Backend, kNative, true},
232 { SkBitmap::kARGB_8888_Config, "8888", 0, kRaster_Backend, kNa tive, true}, 225 { SkBitmap::kARGB_8888_Config, "8888", 0, SkBenchmark::kRaster_Backe nd, kNative, true},
233 { SkBitmap::kRGB_565_Config, "565", 0, kRaster_Backend, kNa tive, true}, 226 { SkBitmap::kRGB_565_Config, "565", 0, SkBenchmark::kRaster_Backe nd, kNative, true},
234 #if SK_SUPPORT_GPU 227 #if SK_SUPPORT_GPU
235 { SkBitmap::kARGB_8888_Config, "GPU", 0, kGPU_Backend, kNa tive, true}, 228 { SkBitmap::kARGB_8888_Config, "GPU", 0, SkBenchmark::kGPU_Backend, kNative, true},
236 { SkBitmap::kARGB_8888_Config, "MSAA4", 4, kGPU_Backend, kNa tive, false}, 229 { SkBitmap::kARGB_8888_Config, "MSAA4", 4, SkBenchmark::kGPU_Backend, kNative, false},
237 { SkBitmap::kARGB_8888_Config, "MSAA16", 16, kGPU_Backend, kNa tive, false}, 230 { SkBitmap::kARGB_8888_Config, "MSAA16", 16, SkBenchmark::kGPU_Backend, kNative, false},
238 #if SK_ANGLE 231 #if SK_ANGLE
239 { SkBitmap::kARGB_8888_Config, "ANGLE", 0, kGPU_Backend, kAN GLE, true}, 232 { SkBitmap::kARGB_8888_Config, "ANGLE", 0, SkBenchmark::kGPU_Backend, kANGLE, true},
240 #endif // SK_ANGLE 233 #endif // SK_ANGLE
241 { SkBitmap::kARGB_8888_Config, "Debug", 0, kGPU_Backend, kDe bug, kIsDebug}, 234 { SkBitmap::kARGB_8888_Config, "Debug", 0, SkBenchmark::kGPU_Backend, kDebug, kIsDebug},
242 { SkBitmap::kARGB_8888_Config, "NULLGPU", 0, kGPU_Backend, kNu ll, true}, 235 { SkBitmap::kARGB_8888_Config, "NULLGPU", 0, SkBenchmark::kGPU_Backend, kNull, true},
243 #endif // SK_SUPPORT_GPU 236 #endif // SK_SUPPORT_GPU
244 }; 237 };
245 238
246 DEFINE_string(outDir, "", "If given, image of each bench will be put in outDir." ); 239 DEFINE_string(outDir, "", "If given, image of each bench will be put in outDir." );
247 DEFINE_string(timers, "cg", "Timers to display. " 240 DEFINE_string(timers, "cg", "Timers to display. "
248 "Options: w(all) W(all, truncated) c(pu) C(pu, truncated) g(pu)"); 241 "Options: w(all) W(all, truncated) c(pu) C(pu, truncated) g(pu)");
249 242
250 DEFINE_bool(rotate, false, "Rotate canvas before bench run?"); 243 DEFINE_bool(rotate, false, "Rotate canvas before bench run?");
251 DEFINE_bool(scale, false, "Scale canvas before bench run?"); 244 DEFINE_bool(scale, false, "Scale canvas before bench run?");
252 DEFINE_bool(clip, false, "Clip canvas before bench run?"); 245 DEFINE_bool(clip, false, "Clip canvas before bench run?");
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 if (gConfigs[i].runByDefault) { 336 if (gConfigs[i].runByDefault) {
344 *configs.append() = i; 337 *configs.append() = i;
345 } 338 }
346 } 339 }
347 } 340 }
348 // Filter out things we can't run. 341 // Filter out things we can't run.
349 if (kNormal_BenchMode != benchMode) { 342 if (kNormal_BenchMode != benchMode) {
350 // Non-rendering configs only run in normal mode 343 // Non-rendering configs only run in normal mode
351 for (int i = 0; i < configs.count(); ++i) { 344 for (int i = 0; i < configs.count(); ++i) {
352 const Config& config = gConfigs[configs[i]]; 345 const Config& config = gConfigs[configs[i]];
353 if (kNonRendering_Backend == config.backend) { 346 if (SkBenchmark::kNonRendering_Backend == config.backend) {
354 configs.remove(i, 1); 347 configs.remove(i, 1);
355 --i; 348 --i;
356 } 349 }
357 } 350 }
358 } 351 }
359 // Set the resource path. 352 // Set the resource path.
360 if (!FLAGS_resourcePath.isEmpty()) { 353 if (!FLAGS_resourcePath.isEmpty()) {
361 SkBenchmark::SetResourcePath(FLAGS_resourcePath[0]); 354 SkBenchmark::SetResourcePath(FLAGS_resourcePath[0]);
362 } 355 }
363 356
364 #if SK_SUPPORT_GPU 357 #if SK_SUPPORT_GPU
365 for (int i = 0; i < configs.count(); ++i) { 358 for (int i = 0; i < configs.count(); ++i) {
366 const Config& config = gConfigs[configs[i]]; 359 const Config& config = gConfigs[configs[i]];
367 360
368 if (kGPU_Backend == config.backend) { 361 if (SkBenchmark::kGPU_Backend == config.backend) {
369 GrContext* context = gContextFactory.get(config.contextType); 362 GrContext* context = gContextFactory.get(config.contextType);
370 if (NULL == context) { 363 if (NULL == context) {
371 logger.logError(SkStringPrintf( 364 logger.logError(SkStringPrintf(
372 "Error creating GrContext for config %s. Config will be skip ped.\n", 365 "Error creating GrContext for config %s. Config will be skip ped.\n",
373 config.name)); 366 config.name));
374 configs.remove(i); 367 configs.remove(i);
375 --i; 368 --i;
376 continue; 369 continue;
377 } 370 }
378 if (config.sampleCount > context->getMaxSampleCount()){ 371 if (config.sampleCount > context->getMaxSampleCount()){
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 str.append(" DEBUG"); 413 str.append(" DEBUG");
421 #endif 414 #endif
422 str.append("\n"); 415 str.append("\n");
423 logger.logProgress(str); 416 logger.logProgress(str);
424 417
425 418
426 // Set texture cache limits if non-default. 419 // Set texture cache limits if non-default.
427 for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); ++i) { 420 for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); ++i) {
428 #if SK_SUPPORT_GPU 421 #if SK_SUPPORT_GPU
429 const Config& config = gConfigs[i]; 422 const Config& config = gConfigs[i];
430 if (kGPU_Backend != config.backend) { 423 if (SkBenchmark::kGPU_Backend != config.backend) {
431 continue; 424 continue;
432 } 425 }
433 GrContext* context = gContextFactory.get(config.contextType); 426 GrContext* context = gContextFactory.get(config.contextType);
434 if (NULL == context) { 427 if (NULL == context) {
435 continue; 428 continue;
436 } 429 }
437 430
438 size_t bytes; 431 size_t bytes;
439 int count; 432 int count;
440 context->getTextureCacheLimits(&count, &bytes); 433 context->getTextureCacheLimits(&count, &bytes);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 bench->setForceAA(FLAGS_forceAA); 466 bench->setForceAA(FLAGS_forceAA);
474 bench->setForceFilter(FLAGS_forceFilter); 467 bench->setForceFilter(FLAGS_forceFilter);
475 bench->setDither(dither); 468 bench->setDither(dither);
476 AutoPrePostDraw appd(bench); 469 AutoPrePostDraw appd(bench);
477 470
478 bool loggedBenchName = false; 471 bool loggedBenchName = false;
479 for (int i = 0; i < configs.count(); ++i) { 472 for (int i = 0; i < configs.count(); ++i) {
480 const int configIndex = configs[i]; 473 const int configIndex = configs[i];
481 const Config& config = gConfigs[configIndex]; 474 const Config& config = gConfigs[configIndex];
482 475
483 if ((kNonRendering_Backend == config.backend) == bench->isRendering( )) { 476 if (!bench->isSuitableFor(config.backend)) {
484 continue; 477 continue;
485 } 478 }
486 479
487 GrContext* context = NULL; 480 GrContext* context = NULL;
488 #if SK_SUPPORT_GPU 481 #if SK_SUPPORT_GPU
489 SkGLContextHelper* glContext = NULL; 482 SkGLContextHelper* glContext = NULL;
490 if (kGPU_Backend == config.backend) { 483 if (SkBenchmark::kGPU_Backend == config.backend) {
491 context = gContextFactory.get(config.contextType); 484 context = gContextFactory.get(config.contextType);
492 if (NULL == context) { 485 if (NULL == context) {
493 continue; 486 continue;
494 } 487 }
495 glContext = gContextFactory.getGLContext(config.contextType); 488 glContext = gContextFactory.getGLContext(config.contextType);
496 } 489 }
497 #endif 490 #endif
498 SkAutoTUnref<SkBaseDevice> device; 491 SkAutoTUnref<SkBaseDevice> device;
499 SkAutoTUnref<SkCanvas> canvas; 492 SkAutoTUnref<SkCanvas> canvas;
500 SkPicture recordFrom, recordTo; 493 SkPicture recordFrom, recordTo;
501 const SkIPoint dim = bench->getSize(); 494 const SkIPoint dim = bench->getSize();
502 495
503 const SkPicture::RecordingFlags kRecordFlags = 496 const SkPicture::RecordingFlags kRecordFlags =
504 SkPicture::kUsePathBoundsForClip_RecordingFlag; 497 SkPicture::kUsePathBoundsForClip_RecordingFlag;
505 498
506 if (kNonRendering_Backend != config.backend) { 499 if (SkBenchmark::kNonRendering_Backend != config.backend) {
507 device.reset(make_device(config.config, 500 device.reset(make_device(config.config,
508 dim, 501 dim,
509 config.backend, 502 config.backend,
510 config.sampleCount, 503 config.sampleCount,
511 context)); 504 context));
512 if (!device.get()) { 505 if (!device.get()) {
513 logger.logError(SkStringPrintf( 506 logger.logError(SkStringPrintf(
514 "Device creation failure for config %s. Will skip.\n", c onfig.name)); 507 "Device creation failure for config %s. Will skip.\n", c onfig.name));
515 continue; 508 continue;
516 } 509 }
(...skipping 29 matching lines...) Expand all
546 if (!loggedBenchName) { 539 if (!loggedBenchName) {
547 loggedBenchName = true; 540 loggedBenchName = true;
548 SkString str; 541 SkString str;
549 str.printf("running bench [%3d %3d] %*s ", 542 str.printf("running bench [%3d %3d] %*s ",
550 dim.fX, dim.fY, longestName, bench->getName()); 543 dim.fX, dim.fY, longestName, bench->getName());
551 logger.logProgress(str); 544 logger.logProgress(str);
552 } 545 }
553 546
554 #if SK_SUPPORT_GPU 547 #if SK_SUPPORT_GPU
555 SkGLContextHelper* contextHelper = NULL; 548 SkGLContextHelper* contextHelper = NULL;
556 if (kGPU_Backend == config.backend) { 549 if (SkBenchmark::kGPU_Backend == config.backend) {
557 contextHelper = gContextFactory.getGLContext(config.contextType) ; 550 contextHelper = gContextFactory.getGLContext(config.contextType) ;
558 } 551 }
559 BenchTimer timer(contextHelper); 552 BenchTimer timer(contextHelper);
560 #else 553 #else
561 BenchTimer timer; 554 BenchTimer timer;
562 #endif 555 #endif
563 556
564 double previous = std::numeric_limits<double>::infinity(); 557 double previous = std::numeric_limits<double>::infinity();
565 bool converged = false; 558 bool converged = false;
566 559
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 } 651 }
659 652
660 const double current = timer.fWall / loopsPerIter; 653 const double current = timer.fWall / loopsPerIter;
661 if (FLAGS_verbose && current > previous) { SkDebugf("↑"); } 654 if (FLAGS_verbose && current > previous) { SkDebugf("↑"); }
662 if (FLAGS_verbose) { SkDebugf("%.3g ", current); } 655 if (FLAGS_verbose) { SkDebugf("%.3g ", current); }
663 converged = HasConverged(previous, current, timer.fWall); 656 converged = HasConverged(previous, current, timer.fWall);
664 previous = current; 657 previous = current;
665 } while (!kIsDebug && !converged); 658 } while (!kIsDebug && !converged);
666 if (FLAGS_verbose) { SkDebugf("\n"); } 659 if (FLAGS_verbose) { SkDebugf("\n"); }
667 660
668 if (FLAGS_outDir.count() && kNonRendering_Backend != config.backend) { 661 if (FLAGS_outDir.count() && SkBenchmark::kNonRendering_Backend != co nfig.backend) {
669 saveFile(bench->getName(), 662 saveFile(bench->getName(),
670 config.name, 663 config.name,
671 FLAGS_outDir[0], 664 FLAGS_outDir[0],
672 device->accessBitmap(false)); 665 device->accessBitmap(false));
673 } 666 }
674 667
675 if (kIsDebug) { 668 if (kIsDebug) {
676 // Let's not mislead ourselves by looking at Debug build bench t imes! 669 // Let's not mislead ourselves by looking at Debug build bench t imes!
677 continue; 670 continue;
678 } 671 }
(...skipping 26 matching lines...) Expand all
705 gContextFactory.destroyContexts(); 698 gContextFactory.destroyContexts();
706 #endif 699 #endif
707 return 0; 700 return 0;
708 } 701 }
709 702
710 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 703 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
711 int main(int argc, char * const argv[]) { 704 int main(int argc, char * const argv[]) {
712 return tool_main(argc, (char**) argv); 705 return tool_main(argc, (char**) argv);
713 } 706 }
714 #endif 707 #endif
OLDNEW
« no previous file with comments | « bench/XfermodeBench.cpp ('k') | gm/bleed.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698