GradientBench(void* param, GradType gradType, GradData data = gGradData[0], SkShader::TileMode tm = SkShader::kClamp_TileMode, GeomType geomType = kRect_GeomType, float scale = 1.0f ) : INHERITED(param) { fName.printf("gradient_%s_%s", gGrads[gradType].fName, tilemodename(tm)); if (geomType != kRect_GeomType) { fName.append("_"); fName.append(geomtypename(geomType)); } fName.append(data.fName); const SkPoint pts[2] = { { 0, 0 }, { SkIntToScalar(W), SkIntToScalar(H) } }; fCount = SkBENCHLOOP(N * gGrads[gradType].fRepeat); fShader = gGrads[gradType].fMaker(pts, data, tm, NULL, scale); fGeomType = geomType; }
virtual void onDraw(SkCanvas* canvas) { SkPaint paint; this->setupPaint(&paint); paint.setAntiAlias(true); SkRandom rand; for (int i = 0; i < SkBENCHLOOP(3); i++) { SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, rand.nextUScalar1() * 400); r.offset(fRadius, fRadius); if (fRadius > 0) { SkMorphologyImageFilter* mf = NULL; switch (fStyle) { case kDilate_MT: mf = new SkDilateImageFilter(SkScalarFloorToInt(fRadius), SkScalarFloorToInt(fRadius)); break; case kErode_MT: mf = new SkErodeImageFilter(SkScalarFloorToInt(fRadius), SkScalarFloorToInt(fRadius)); break; } paint.setImageFilter(mf)->unref(); } canvas->drawOval(r, paint); } }
virtual void onDraw(SkCanvas* canvas) { SkPaint paint; this->setupPaint(&paint); paint.setAntiAlias(true); SkMWCRandom rand; for (int i = 0; i < SkBENCHLOOP(3); i++) { SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, rand.nextUScalar1() * 400); paint.setImageFilter(fFilter); canvas->drawOval(r, paint); } }
virtual void onDraw(SkCanvas* canvas) { SkPaint paint; this->setupPaint(&paint); paint.setAntiAlias(true); SkRandom rand; for (int i = 0; i < SkBENCHLOOP(10); i++) { SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, rand.nextUScalar1() * 400); r.offset(fRadius, fRadius); if (fRadius > 0) { SkMaskFilter* mf = SkBlurMaskFilter::Create(fRadius, fStyle, 0); paint.setMaskFilter(mf)->unref(); } canvas->drawOval(r, paint); } }
virtual void onDraw(SkCanvas* canvas) { SkPaint paint; this->setupPaint(&paint); const SkRect r = { 0, 0, SkIntToScalar(4), SkIntToScalar(4) }; const SkPoint pts[] = { { 0, 0 }, { SkIntToScalar(100), SkIntToScalar(100) }, }; for (int i = 0; i < SkBENCHLOOP(1000); i++) { const int a = i % 256; SkColor colors[] = { SK_ColorBLACK, SkColorSetARGB(a, a, a, a), SK_ColorWHITE }; SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode); paint.setShader(s)->unref(); canvas->drawRect(r, paint); } }
* found in the LICENSE file. */ #include "BenchTimer.h" #include "LazyDecodeBitmap.h" #include "PictureBenchmark.h" #include "PictureRenderer.h" #include "SkBenchmark.h" #include "SkForceLinking.h" #include "SkGraphics.h" #include "SkStream.h" #include "SkString.h" #include "SkTArray.h" #include "TimerData.h" static const int kNumNormalRecordings = SkBENCHLOOP(10); static const int kNumRTreeRecordings = SkBENCHLOOP(10); static const int kNumPlaybacks = SkBENCHLOOP(4); static const size_t kNumBaseBenchmarks = 3; static const size_t kNumTileSizes = 3; static const size_t kNumBbhPlaybackBenchmarks = 3; static const size_t kNumBenchmarks = kNumBaseBenchmarks + kNumBbhPlaybackBenchmarks; enum BenchmarkType { kNormal_BenchmarkType = 0, kRTree_BenchmarkType, }; struct Histogram { Histogram() { // Make fCpuTime negative so that we don't mess with stats:
*/ static void path_hline(SkPath* path) { path->moveTo(SkIntToScalar(10), SkIntToScalar(10)); path->lineTo(SkIntToScalar(600), SkIntToScalar(10)); } class DashBench : public SkBenchmark { protected: SkString fName; SkTDArray<SkScalar> fIntervals; int fWidth; SkPoint fPts[2]; bool fDoClip; enum { N = SkBENCHLOOP(100) }; public: DashBench(void* param, const SkScalar intervals[], int count, int width, bool doClip = false) : INHERITED(param) { fIntervals.append(count, intervals); for (int i = 0; i < count; ++i) { fIntervals[i] *= width; } fWidth = width; fName.printf("dash_%d_%s", width, doClip ? "clipped" : "noclip"); fDoClip = doClip; fPts[0].set(SkIntToScalar(10), SkIntToScalar(10)); fPts[1].set(SkIntToScalar(600), SkIntToScalar(10)); }
virtual void onDraw(SkCanvas* canvas) { int n = SkBENCHLOOP(N * this->mulLoopCount()); for (int i = 0; i < n; i++) { this->performTest(); } }
* found in the LICENSE file. */ #include "SkBenchmark.h" #include "SkCanvas.h" #include "SkPaint.h" #include "SkRandom.h" #include "SkString.h" #include "SkShader.h" class RectBench : public SkBenchmark { public: int fShift, fStroke; enum { W = 640, H = 480, N = SkBENCHLOOP(300) }; SkRect fRects[N]; SkColor fColors[N]; RectBench(void* param, int shift, int stroke = 0) : INHERITED(param) , fShift(shift) , fStroke(stroke) { SkRandom rand; const SkScalar offset = SK_Scalar1/3; for (int i = 0; i < N; i++) { int x = rand.nextU() % W; int y = rand.nextU() % H; int w = rand.nextU() % W; int h = rand.nextU() % H;
virtual void onDraw(SkCanvas* canvas) { int n = SkBENCHLOOP(kLoop * this->mulLoopCount()); for (int i = 0; i < n; i++) { this->performTest(fDst, fSrc, kBuffer); } }
} private: typedef PictureRecordBench INHERITED; }; /* * Populates the SkPaint dictionary with a large number of unique paint * objects that differ only by color */ class UniquePaintDictionaryRecordBench : public PictureRecordBench { public: UniquePaintDictionaryRecordBench(void* param) : INHERITED(param, "unique_paint_dictionary") { } enum { M = SkBENCHLOOP(15000), // number of unique paint objects }; protected: virtual float innerLoopScale() const SK_OVERRIDE { return 0.1f; } virtual void recordCanvas(SkCanvas* canvas) { SkRandom rand; for (int i = 0; i < M; i++) { SkPaint paint; paint.setColor(rand.nextU()); canvas->drawPaint(paint); } } private: typedef PictureRecordBench INHERITED; };
return true; } class RegionBench : public SkBenchmark { public: typedef bool (*Proc)(SkRegion& a, SkRegion& b); SkRegion fA, fB; Proc fProc; SkString fName; int fLoopMul; enum { W = 1024, H = 768, N = SkBENCHLOOP(2000) }; SkIRect randrect(SkRandom& rand) { int x = rand.nextU() % W; int y = rand.nextU() % H; int w = rand.nextU() % W; int h = rand.nextU() % H; return SkIRect::MakeXYWH(x, y, w >> 1, h >> 1); } RegionBench(void* param, int count, Proc proc, const char name[], int mul = 1) : INHERITED(param) { fProc = proc; fName.printf("region_%s_%d", name, count); fLoopMul = mul;