OLD | NEW |
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 | 9 |
10 #include "BenchTimer.h" | 10 #include "BenchTimer.h" |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 } | 186 } |
187 | 187 |
188 enum Backend { | 188 enum Backend { |
189 kNonRendering_Backend, | 189 kNonRendering_Backend, |
190 kRaster_Backend, | 190 kRaster_Backend, |
191 kGPU_Backend, | 191 kGPU_Backend, |
192 kPDF_Backend, | 192 kPDF_Backend, |
193 }; | 193 }; |
194 | 194 |
195 static SkDevice* make_device(SkBitmap::Config config, const SkIPoint& size, | 195 static SkDevice* make_device(SkBitmap::Config config, const SkIPoint& size, |
196 Backend backend, GrContext* context) { | 196 Backend backend, int sampleCount, GrContext* contex
t) { |
197 SkDevice* device = NULL; | 197 SkDevice* device = NULL; |
198 SkBitmap bitmap; | 198 SkBitmap bitmap; |
199 bitmap.setConfig(config, size.fX, size.fY); | 199 bitmap.setConfig(config, size.fX, size.fY); |
200 | 200 |
201 switch (backend) { | 201 switch (backend) { |
202 case kRaster_Backend: | 202 case kRaster_Backend: |
203 bitmap.allocPixels(); | 203 bitmap.allocPixels(); |
204 erase(bitmap); | 204 erase(bitmap); |
205 device = SkNEW_ARGS(SkDevice, (bitmap)); | 205 device = SkNEW_ARGS(SkDevice, (bitmap)); |
206 break; | 206 break; |
207 #if SK_SUPPORT_GPU | 207 #if SK_SUPPORT_GPU |
208 case kGPU_Backend: { | 208 case kGPU_Backend: { |
209 GrTextureDesc desc; | 209 GrTextureDesc desc; |
210 desc.fConfig = kSkia8888_GrPixelConfig; | 210 desc.fConfig = kSkia8888_GrPixelConfig; |
211 desc.fFlags = kRenderTarget_GrTextureFlagBit; | 211 desc.fFlags = kRenderTarget_GrTextureFlagBit; |
212 desc.fWidth = size.fX; | 212 desc.fWidth = size.fX; |
213 desc.fHeight = size.fY; | 213 desc.fHeight = size.fY; |
| 214 desc.fSampleCnt = sampleCount; |
214 SkAutoTUnref<GrTexture> texture(context->createUncachedTexture(desc,
NULL, 0)); | 215 SkAutoTUnref<GrTexture> texture(context->createUncachedTexture(desc,
NULL, 0)); |
215 if (!texture) { | 216 if (!texture) { |
216 return NULL; | 217 return NULL; |
217 } | 218 } |
218 device = SkNEW_ARGS(SkGpuDevice, (context, texture.get())); | 219 device = SkNEW_ARGS(SkGpuDevice, (context, texture.get())); |
219 break; | 220 break; |
220 } | 221 } |
221 #endif | 222 #endif |
222 case kPDF_Backend: | 223 case kPDF_Backend: |
223 default: | 224 default: |
224 SkASSERT(!"unsupported"); | 225 SkASSERT(!"unsupported"); |
225 } | 226 } |
226 return device; | 227 return device; |
227 } | 228 } |
228 | 229 |
229 #if SK_SUPPORT_GPU | 230 #if SK_SUPPORT_GPU |
230 GrContextFactory gContextFactory; | 231 GrContextFactory gContextFactory; |
231 typedef GrContextFactory::GLContextType GLContextType; | 232 typedef GrContextFactory::GLContextType GLContextType; |
232 static const GLContextType kDontCareGLCtxType = GrContextFactory::kNative_GLCont
extType; | 233 static const GLContextType kDontCareGLCtxType = GrContextFactory::kNative_GLCont
extType; |
233 #else | 234 #else |
234 typedef int GLContextType; | 235 typedef int GLContextType; |
235 static const GLContextType kDontCareGLCtxType = 0; | 236 static const GLContextType kDontCareGLCtxType = 0; |
236 #endif | 237 #endif |
237 | 238 |
238 static const struct { | 239 static const struct { |
239 SkBitmap::Config fConfig; | 240 SkBitmap::Config fConfig; |
240 const char* fName; | 241 const char* fName; |
| 242 int fSampleCnt; |
241 Backend fBackend; | 243 Backend fBackend; |
242 GLContextType fContextType; | 244 GLContextType fContextType; |
| 245 bool fRunByDefault; |
243 } gConfigs[] = { | 246 } gConfigs[] = { |
244 { SkBitmap::kNo_Config, "NONRENDERING", kNonRendering_Backend, kD
ontCareGLCtxType }, | 247 { SkBitmap::kNo_Config, "NONRENDERING", 0, kNonRendering_Backend, kD
ontCareGLCtxType, true }, |
245 { SkBitmap::kARGB_8888_Config, "8888", kRaster_Backend, kDontCar
eGLCtxType }, | 248 { SkBitmap::kARGB_8888_Config, "8888", 0, kRaster_Backend, kD
ontCareGLCtxType, true }, |
246 { SkBitmap::kRGB_565_Config, "565", kRaster_Backend, kDontCar
eGLCtxType }, | 249 { SkBitmap::kRGB_565_Config, "565", 0, kRaster_Backend, kD
ontCareGLCtxType, true }, |
247 #if SK_SUPPORT_GPU | 250 #if SK_SUPPORT_GPU |
248 { SkBitmap::kARGB_8888_Config, "GPU", kGPU_Backend, GrContextFa
ctory::kNative_GLContextType }, | 251 { SkBitmap::kARGB_8888_Config, "GPU", 0, kGPU_Backend, Gr
ContextFactory::kNative_GLContextType, true }, |
| 252 { SkBitmap::kARGB_8888_Config, "MSAA4", 4, kGPU_Backend, Gr
ContextFactory::kNative_GLContextType, false }, |
| 253 { SkBitmap::kARGB_8888_Config, "MSAA16", 16, kGPU_Backend, Gr
ContextFactory::kNative_GLContextType, false }, |
249 #if SK_ANGLE | 254 #if SK_ANGLE |
250 { SkBitmap::kARGB_8888_Config, "ANGLE", kGPU_Backend, GrContextFa
ctory::kANGLE_GLContextType }, | 255 { SkBitmap::kARGB_8888_Config, "ANGLE", 0, kGPU_Backend, Gr
ContextFactory::kANGLE_GLContextType, true }, |
251 #endif // SK_ANGLE | 256 #endif // SK_ANGLE |
252 #ifdef SK_DEBUG | 257 #ifdef SK_DEBUG |
253 { SkBitmap::kARGB_8888_Config, "Debug", kGPU_Backend, GrContextFa
ctory::kDebug_GLContextType }, | 258 { SkBitmap::kARGB_8888_Config, "Debug", 0, kGPU_Backend, Gr
ContextFactory::kDebug_GLContextType, GR_DEBUG }, |
254 #endif // SK_DEBUG | 259 #endif // SK_DEBUG |
255 { SkBitmap::kARGB_8888_Config, "NULLGPU", kGPU_Backend, GrContextFa
ctory::kNull_GLContextType }, | 260 { SkBitmap::kARGB_8888_Config, "NULLGPU", 0, kGPU_Backend, Gr
ContextFactory::kNull_GLContextType, true }, |
256 #endif // SK_SUPPORT_GPU | 261 #endif // SK_SUPPORT_GPU |
257 }; | 262 }; |
258 | 263 |
259 static int findConfig(const char config[]) { | 264 static int findConfig(const char config[]) { |
260 for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) { | 265 for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) { |
261 if (!strcmp(config, gConfigs[i].fName)) { | 266 if (!strcmp(config, gConfigs[i].fName)) { |
262 return i; | 267 return i; |
263 } | 268 } |
264 } | 269 } |
265 return -1; | 270 return -1; |
266 } | 271 } |
267 | 272 |
268 static bool skip_name(const SkTDArray<const char*> array, const char name[]) { | 273 static bool skip_name(const SkTDArray<const char*> array, const char name[]) { |
269 if (0 == array.count()) { | 274 if (0 == array.count()) { |
270 // no names, so don't skip anything | 275 // no names, so don't skip anything |
271 return false; | 276 return false; |
272 } | 277 } |
273 for (int i = 0; i < array.count(); ++i) { | 278 for (int i = 0; i < array.count(); ++i) { |
274 if (strstr(name, array[i])) { | 279 if (strstr(name, array[i])) { |
275 // found the name, so don't skip | 280 // found the name, so don't skip |
276 return false; | 281 return false; |
277 } | 282 } |
278 } | 283 } |
279 return true; | 284 return true; |
280 } | 285 } |
281 | 286 |
282 static void help() { | 287 static void help() { |
| 288 SkString configsStr; |
| 289 static const size_t kConfigCount = SK_ARRAY_COUNT(gConfigs); |
| 290 for (size_t i = 0; i < kConfigCount; ++i) { |
| 291 configsStr.appendf("%s%s", gConfigs[i].fName, ((i == kConfigCount - 1) ?
"" : "|")); |
| 292 } |
| 293 |
283 SkDebugf("Usage: bench [-o outDir] [--repeat nr] [--logPerIter] " | 294 SkDebugf("Usage: bench [-o outDir] [--repeat nr] [--logPerIter] " |
284 "[--timers [wcgWC]*] [--rotate]\n" | 295 "[--timers [wcgWC]*] [--rotate]\n" |
285 " [--scale] [--clip] [--min] [--forceAA 1|0] [--forceFilter 1|0]
\n" | 296 " [--scale] [--clip] [--min] [--forceAA 1|0] [--forceFilter 1|0]
\n" |
286 " [--forceDither 1|0] [--forceBlend 1|0]" | 297 " [--forceDither 1|0] [--forceBlend 1|0]" |
287 #if SK_SUPPORT_GPU | 298 #if SK_SUPPORT_GPU |
288 " [--gpuCacheSize <bytes> <count>]" | 299 " [--gpuCacheSize <bytes> <count>]" |
289 #endif | 300 #endif |
290 "\n" | 301 "\n" |
291 " [--strokeWidth width] [--match name]\n" | 302 " [--strokeWidth width] [--match name]\n" |
292 " [--mode normal|deferred|deferredSilent|record|picturerecord]\n
" | 303 " [--mode normal|deferred|deferredSilent|record|picturerecord]\n
" |
293 " [--config 8888|565|GPU|ANGLE|NULLGPU] [-Dfoo bar] [--logFile f
ilename]\n" | 304 " [--config "); |
294 " [-h|--help]"); | 305 SkDebugf("%s]\n", configsStr.c_str()); |
| 306 SkDebugf(" [-Dfoo bar] [--logFile filename] [-h|--help]"); |
295 SkDebugf("\n\n"); | 307 SkDebugf("\n\n"); |
296 SkDebugf(" -o outDir : Image of each bench will be put in outDir.\n"); | 308 SkDebugf(" -o outDir : Image of each bench will be put in outDir.\n"); |
297 SkDebugf(" --repeat nr : Each bench repeats for nr times.\n"); | 309 SkDebugf(" --repeat nr : Each bench repeats for nr times.\n"); |
298 SkDebugf(" --logPerIter : " | 310 SkDebugf(" --logPerIter : " |
299 "Log each repeat timer instead of mean, default is disabled.\n"); | 311 "Log each repeat timer instead of mean, default is disabled.\n"); |
300 SkDebugf(" --timers [wcgWC]* : " | 312 SkDebugf(" --timers [wcgWC]* : " |
301 "Display wall, cpu, gpu, truncated wall or truncated cpu time for e
ach bench.\n"); | 313 "Display wall, cpu, gpu, truncated wall or truncated cpu time for e
ach bench.\n"); |
302 SkDebugf(" --rotate : Rotate before each bench runs.\n"); | 314 SkDebugf(" --rotate : Rotate before each bench runs.\n"); |
303 SkDebugf(" --scale : Scale before each bench runs.\n"); | 315 SkDebugf(" --scale : Scale before each bench runs.\n"); |
304 SkDebugf(" --clip : Clip before each bench runs.\n"); | 316 SkDebugf(" --clip : Clip before each bench runs.\n"); |
(...skipping 15 matching lines...) Expand all Loading... |
320 SkDebugf(" --match name : Only run bench whose name is matched.\n"); | 332 SkDebugf(" --match name : Only run bench whose name is matched.\n"); |
321 SkDebugf(" --mode normal|deferred|deferredSilent|record|picturerecord :\n
" | 333 SkDebugf(" --mode normal|deferred|deferredSilent|record|picturerecord :\n
" |
322 " Run in the corresponding mode\n" | 334 " Run in the corresponding mode\n" |
323 " normal, Use a normal canvas to draw to;\n" | 335 " normal, Use a normal canvas to draw to;\n" |
324 " deferred, Use a deferrred canvas when drawing;\n" | 336 " deferred, Use a deferrred canvas when drawing;\n" |
325 " deferredSilent, deferred with silent playback;\n" | 337 " deferredSilent, deferred with silent playback;\n" |
326 " record, Benchmark the time to record to an SkPict
ure;\n" | 338 " record, Benchmark the time to record to an SkPict
ure;\n" |
327 " picturerecord, Benchmark the time to do record fr
om a \n" | 339 " picturerecord, Benchmark the time to do record fr
om a \n" |
328 " SkPicture to a SkPicture.\n"); | 340 " SkPicture to a SkPicture.\n"); |
329 SkDebugf(" --logFile filename : destination for writing log output, in ad
dition to stdout.\n"); | 341 SkDebugf(" --logFile filename : destination for writing log output, in ad
dition to stdout.\n"); |
330 SkDebugf(" --config "); | 342 SkDebugf(" --config %s:\n", configsStr.c_str()); |
331 static const size_t kConfigCount = SK_ARRAY_COUNT(gConfigs); | 343 SkDebugf(" Run bench in corresponding config mode.\n"); |
332 for (size_t i = 0; i < kConfigCount; ++i) { | |
333 SkDebugf("%s%s", gConfigs[i].fName, ((i == kConfigCount - 1) ? "" : "|")
); | |
334 } | |
335 SkDebugf(" : Run bench in corresponding config mode.\n"); | |
336 SkDebugf(" -Dfoo bar : Add extra definition to bench.\n"); | 344 SkDebugf(" -Dfoo bar : Add extra definition to bench.\n"); |
337 SkDebugf(" -h|--help : Show this help message.\n"); | 345 SkDebugf(" -h|--help : Show this help message.\n"); |
338 } | 346 } |
339 | 347 |
340 int tool_main(int argc, char** argv); | 348 int tool_main(int argc, char** argv); |
341 int tool_main(int argc, char** argv) { | 349 int tool_main(int argc, char** argv) { |
342 #if SK_ENABLE_INST_COUNT | 350 #if SK_ENABLE_INST_COUNT |
343 gPrintInstCount = true; | 351 gPrintInstCount = true; |
344 #endif | 352 #endif |
345 SkAutoGraphics ag; | 353 SkAutoGraphics ag; |
(...skipping 26 matching lines...) Expand all Loading... |
372 float strokeWidth; | 380 float strokeWidth; |
373 SkTDArray<const char*> fMatches; | 381 SkTDArray<const char*> fMatches; |
374 benchModes benchMode = kNormal_benchModes; | 382 benchModes benchMode = kNormal_benchModes; |
375 SkString perIterTimeformat("%.2f"); | 383 SkString perIterTimeformat("%.2f"); |
376 SkString normalTimeFormat("%6.2f"); | 384 SkString normalTimeFormat("%6.2f"); |
377 | 385 |
378 SkString outDir; | 386 SkString outDir; |
379 SkBitmap::Config outConfig = SkBitmap::kNo_Config; | 387 SkBitmap::Config outConfig = SkBitmap::kNo_Config; |
380 const char* configName = ""; | 388 const char* configName = ""; |
381 Backend backend = kRaster_Backend; // for warning | 389 Backend backend = kRaster_Backend; // for warning |
| 390 int sampleCount = 0; |
382 SkTDArray<int> configs; | 391 SkTDArray<int> configs; |
383 bool userConfig = false; | 392 bool userConfig = false; |
384 | 393 |
385 SkBenchLogger logger; | 394 SkBenchLogger logger; |
386 | 395 |
387 char* const* stop = argv + argc; | 396 char* const* stop = argv + argc; |
388 for (++argv; argv < stop; ++argv) { | 397 for (++argv; argv < stop; ++argv) { |
389 if (strcmp(*argv, "-o") == 0) { | 398 if (strcmp(*argv, "-o") == 0) { |
390 argv++; | 399 argv++; |
391 if (argv < stop && **argv) { | 400 if (argv < stop && **argv) { |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 && !outDir.isEmpty()) { | 590 && !outDir.isEmpty()) { |
582 logger.logError("'--mode record' and '--mode picturerecord' are not" | 591 logger.logError("'--mode record' and '--mode picturerecord' are not" |
583 " compatible with -o.\n"); | 592 " compatible with -o.\n"); |
584 return -1; | 593 return -1; |
585 } | 594 } |
586 if ((benchMode == kRecord_benchModes || benchMode == kPictureRecord_benchMod
es)) { | 595 if ((benchMode == kRecord_benchModes || benchMode == kPictureRecord_benchMod
es)) { |
587 perIterTimeformat.set("%.4f"); | 596 perIterTimeformat.set("%.4f"); |
588 normalTimeFormat.set("%6.4f"); | 597 normalTimeFormat.set("%6.4f"); |
589 } | 598 } |
590 if (!userConfig) { | 599 if (!userConfig) { |
591 // if no config is specified by user, we add them all. | 600 // if no config is specified by user, add the default configs |
592 for (unsigned int i = 0; i < SK_ARRAY_COUNT(gConfigs); ++i) { | 601 for (unsigned int i = 0; i < SK_ARRAY_COUNT(gConfigs); ++i) { |
593 *configs.append() = i; | 602 if (gConfigs[i].fRunByDefault) { |
| 603 *configs.append() = i; |
| 604 } |
594 } | 605 } |
595 } | 606 } |
596 if (kNormal_benchModes != benchMode) { | 607 if (kNormal_benchModes != benchMode) { |
597 // Non-rendering configs only run in normal mode | 608 // Non-rendering configs only run in normal mode |
598 for (int i = 0; i < configs.count(); ++i) { | 609 for (int i = 0; i < configs.count(); ++i) { |
599 int configIdx = configs[i]; | 610 int configIdx = configs[i]; |
600 if (kNonRendering_Backend == gConfigs[configIdx].fBackend) { | 611 if (kNonRendering_Backend == gConfigs[configIdx].fBackend) { |
601 configs.remove(i, 1); | 612 configs.remove(i, 1); |
602 --i; | 613 --i; |
603 } | 614 } |
604 } | 615 } |
605 } | 616 } |
606 | 617 |
| 618 #if SK_SUPPORT_GPU |
| 619 for (int i = 0; i < configs.count(); ++i) { |
| 620 int configIdx = configs[i]; |
| 621 |
| 622 if (kGPU_Backend == gConfigs[configIdx].fBackend && gConfigs[configIdx].
fSampleCnt > 0) { |
| 623 GrContext* context = gContextFactory.get(gConfigs[configIdx].fContex
tType); |
| 624 if (NULL == context) { |
| 625 SkString error; |
| 626 error.printf("Error creating GrContext for config %s. Config wil
l be skipped.\n", |
| 627 gConfigs[configIdx].fName); |
| 628 logger.logError(error.c_str()); |
| 629 configs.remove(i); |
| 630 --i; |
| 631 continue; |
| 632 } |
| 633 if (gConfigs[configIdx].fSampleCnt > context->getMaxSampleCount()){ |
| 634 SkString error; |
| 635 error.printf("Sample count (%d) for config %s is unsupported. Co
nfig will be skipped.\n", |
| 636 gConfigs[configIdx].fSampleCnt, gConfigs[configIdx]
.fName); |
| 637 logger.logError(error.c_str()); |
| 638 configs.remove(i); |
| 639 --i; |
| 640 continue; |
| 641 } |
| 642 } |
| 643 } |
| 644 #endif |
| 645 |
607 // report our current settings | 646 // report our current settings |
608 { | 647 { |
609 SkString str; | 648 SkString str; |
610 const char* deferredMode = benchMode == kDeferred_benchModes ? "yes" : | 649 const char* deferredMode = benchMode == kDeferred_benchModes ? "yes" : |
611 (benchMode == kDeferredSilent_benchModes ? "silent" : "no"); | 650 (benchMode == kDeferredSilent_benchModes ? "silent" : "no"); |
612 str.printf("skia bench: alpha=0x%02X antialias=%d filter=%d " | 651 str.printf("skia bench: alpha=0x%02X antialias=%d filter=%d " |
613 "deferred=%s logperiter=%d", | 652 "deferred=%s logperiter=%d", |
614 forceAlpha, forceAA, forceFilter, deferredMode, | 653 forceAlpha, forceAA, forceFilter, deferredMode, |
615 logPerIter); | 654 logPerIter); |
616 str.appendf(" rotate=%d scale=%d clip=%d min=%d", | 655 str.appendf(" rotate=%d scale=%d clip=%d min=%d", |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 } | 760 } |
722 } else { | 761 } else { |
723 if (!bench->isRendering()) { | 762 if (!bench->isRendering()) { |
724 continue; | 763 continue; |
725 } | 764 } |
726 } | 765 } |
727 | 766 |
728 outConfig = gConfigs[configIndex].fConfig; | 767 outConfig = gConfigs[configIndex].fConfig; |
729 configName = gConfigs[configIndex].fName; | 768 configName = gConfigs[configIndex].fName; |
730 backend = gConfigs[configIndex].fBackend; | 769 backend = gConfigs[configIndex].fBackend; |
| 770 sampleCount = gConfigs[configIndex].fSampleCnt; |
731 GrContext* context = NULL; | 771 GrContext* context = NULL; |
732 BenchTimer* timer = timers[configIndex]; | 772 BenchTimer* timer = timers[configIndex]; |
733 | 773 |
734 #if SK_SUPPORT_GPU | 774 #if SK_SUPPORT_GPU |
735 SkGLContextHelper* glContext = NULL; | 775 SkGLContextHelper* glContext = NULL; |
736 if (kGPU_Backend == backend) { | 776 if (kGPU_Backend == backend) { |
737 context = gContextFactory.get(gConfigs[configIndex].fContextType
); | 777 context = gContextFactory.get(gConfigs[configIndex].fContextType
); |
738 if (NULL == context) { | 778 if (NULL == context) { |
739 continue; | 779 continue; |
740 } | 780 } |
741 glContext = gContextFactory.getGLContext(gConfigs[configIndex].f
ContextType); | 781 glContext = gContextFactory.getGLContext(gConfigs[configIndex].f
ContextType); |
742 } | 782 } |
743 #endif | 783 #endif |
744 SkDevice* device = NULL; | 784 SkDevice* device = NULL; |
745 SkCanvas* canvas = NULL; | 785 SkCanvas* canvas = NULL; |
746 SkPicture pictureRecordFrom; | 786 SkPicture pictureRecordFrom; |
747 SkPicture pictureRecordTo; | 787 SkPicture pictureRecordTo; |
748 | 788 |
749 if (kNonRendering_Backend != backend) { | 789 if (kNonRendering_Backend != backend) { |
750 device = make_device(outConfig, dim, backend, context); | 790 device = make_device(outConfig, dim, backend, sampleCount, conte
xt); |
751 | 791 |
752 switch(benchMode) { | 792 switch(benchMode) { |
753 case kDeferredSilent_benchModes: | 793 case kDeferredSilent_benchModes: |
754 case kDeferred_benchModes: | 794 case kDeferred_benchModes: |
755 canvas = new SkDeferredCanvas(device); | 795 canvas = new SkDeferredCanvas(device); |
756 break; | 796 break; |
757 case kRecord_benchModes: | 797 case kRecord_benchModes: |
758 canvas = pictureRecordTo.beginRecording(dim.fX, dim.fY, | 798 canvas = pictureRecordTo.beginRecording(dim.fX, dim.fY, |
759 SkPicture::kUsePathBoundsForClip_RecordingFlag); | 799 SkPicture::kUsePathBoundsForClip_RecordingFlag); |
760 canvas->ref(); | 800 canvas->ref(); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
914 } | 954 } |
915 | 955 |
916 return 0; | 956 return 0; |
917 } | 957 } |
918 | 958 |
919 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 959 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
920 int main(int argc, char * const argv[]) { | 960 int main(int argc, char * const argv[]) { |
921 return tool_main(argc, (char**) argv); | 961 return tool_main(argc, (char**) argv); |
922 } | 962 } |
923 #endif | 963 #endif |
OLD | NEW |