11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkBenchmark.h" 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkAAClip.h" 101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkPath.h" 111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkRegion.h" 121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkString.h" 131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass AAClipBuilderBench : public SkBenchmark { 151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkString fName; 161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkPath fPath; 171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkRect fRect; 181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkRegion fRegion; 191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger bool fDoPath; 201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger bool fDoAA; 211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger enum { 231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger N = SkBENCHLOOP(200), 241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger }; 251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic: 271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger AAClipBuilderBench(void* param, bool doPath, bool doAA) : INHERITED(param) { 281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fDoPath = doPath; 291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fDoAA = doAA; 301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fName.printf("aaclip_build_%s_%s", doPath ? "path" : "rect", 321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger doAA ? "AA" : "BW"); 331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fRegion.setRect(0, 0, 640, 480); 351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fRect.set(fRegion.getBounds()); 361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fRect.inset(SK_Scalar1/4, SK_Scalar1/4); 371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fPath.addRoundRect(fRect, SkIntToScalar(20), SkIntToScalar(20)); 381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprotected: 411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual const char* onGetName() { return fName.c_str(); } 421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void onDraw(SkCanvas* canvas) { 431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkPaint paint; 441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger this->setupPaint(&paint); 451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (int i = 0; i < N; ++i) { 471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkAAClip clip; 481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (fDoPath) { 491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger clip.setPath(fPath, &fRegion, fDoAA); 501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } else { 511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger clip.setRect(fRect, fDoAA); 521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate: 561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef SkBenchmark INHERITED; 571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}; 581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass AAClipRegionBench : public SkBenchmark { 601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic: 611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger AAClipRegionBench(void* param) : INHERITED(param) { 621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkPath path; 631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // test conversion of a complex clip to a aaclip 641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger path.addCircle(0, 0, SkIntToScalar(200)); 651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger path.addCircle(0, 0, SkIntToScalar(180)); 661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // evenodd means we've constructed basically a stroked circle 671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger path.setFillType(SkPath::kEvenOdd_FillType); 681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkIRect bounds; 701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger path.getBounds().roundOut(&bounds); 711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger fRegion.setPath(path, SkRegion(bounds)); 721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprotected: 751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual const char* onGetName() { return "aaclip_setregion"; } 761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void onDraw(SkCanvas* canvas) { 771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (int i = 0; i < N; ++i) { 781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkAAClip clip; 791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger clip.setRegion(fRegion); 801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate: 841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger enum { 851cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger N = SkBENCHLOOP(400), 861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger }; 871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkRegion fRegion; 881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef SkBenchmark INHERITED; 891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}; 901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 911cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/////////////////////////////////////////////////////////////////////////////// 921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkBenchmark* Fact0(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, false, false)); } 941cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkBenchmark* Fact1(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, false, true)); } 951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkBenchmark* Fact2(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, true, false)); } 961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkBenchmark* Fact3(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, true, true)); } 971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic BenchRegistry gReg0(Fact0); 991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic BenchRegistry gReg1(Fact1); 1001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic BenchRegistry gReg2(Fact2); 1011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic BenchRegistry gReg3(Fact3); 1021cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkBenchmark* Fact01(void* p) { return SkNEW_ARGS(AAClipRegionBench, (p)); } 1041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic BenchRegistry gReg01(Fact01); 105