2011-10-31 14:33:35 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2011 Google Inc.
|
|
|
|
*
|
|
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
|
|
* found in the LICENSE file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "SkBenchmark.h"
|
|
|
|
#include "SkAAClip.h"
|
|
|
|
#include "SkPath.h"
|
|
|
|
#include "SkRegion.h"
|
|
|
|
#include "SkString.h"
|
|
|
|
|
|
|
|
class AAClipBuilderBench : public SkBenchmark {
|
|
|
|
SkString fName;
|
|
|
|
SkPath fPath;
|
|
|
|
SkRect fRect;
|
|
|
|
SkRegion fRegion;
|
|
|
|
bool fDoPath;
|
|
|
|
bool fDoAA;
|
|
|
|
|
|
|
|
enum {
|
|
|
|
N = SkBENCHLOOP(200),
|
|
|
|
};
|
|
|
|
|
|
|
|
public:
|
|
|
|
AAClipBuilderBench(void* param, bool doPath, bool doAA) : INHERITED(param) {
|
|
|
|
fDoPath = doPath;
|
|
|
|
fDoAA = doAA;
|
|
|
|
|
|
|
|
fName.printf("aaclip_build_%s_%s", doPath ? "path" : "rect",
|
|
|
|
doAA ? "AA" : "BW");
|
|
|
|
|
|
|
|
fRegion.setRect(0, 0, 640, 480);
|
|
|
|
fRect.set(fRegion.getBounds());
|
|
|
|
fRect.inset(SK_Scalar1/4, SK_Scalar1/4);
|
|
|
|
fPath.addRoundRect(fRect, SkIntToScalar(20), SkIntToScalar(20));
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual const char* onGetName() { return fName.c_str(); }
|
|
|
|
virtual void onDraw(SkCanvas* canvas) {
|
|
|
|
SkPaint paint;
|
|
|
|
this->setupPaint(&paint);
|
|
|
|
|
|
|
|
for (int i = 0; i < N; ++i) {
|
|
|
|
SkAAClip clip;
|
|
|
|
if (fDoPath) {
|
|
|
|
clip.setPath(fPath, &fRegion, fDoAA);
|
|
|
|
} else {
|
|
|
|
clip.setRect(fRect, fDoAA);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
typedef SkBenchmark INHERITED;
|
|
|
|
};
|
|
|
|
|
2011-11-28 19:54:56 +00:00
|
|
|
class AAClipRegionBench : public SkBenchmark {
|
|
|
|
public:
|
|
|
|
AAClipRegionBench(void* param) : INHERITED(param) {
|
|
|
|
SkPath path;
|
|
|
|
// test conversion of a complex clip to a aaclip
|
|
|
|
path.addCircle(0, 0, SkIntToScalar(200));
|
|
|
|
path.addCircle(0, 0, SkIntToScalar(180));
|
|
|
|
// evenodd means we've constructed basically a stroked circle
|
|
|
|
path.setFillType(SkPath::kEvenOdd_FillType);
|
|
|
|
|
|
|
|
SkIRect bounds;
|
|
|
|
path.getBounds().roundOut(&bounds);
|
|
|
|
fRegion.setPath(path, SkRegion(bounds));
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual const char* onGetName() { return "aaclip_setregion"; }
|
|
|
|
virtual void onDraw(SkCanvas* canvas) {
|
|
|
|
for (int i = 0; i < N; ++i) {
|
|
|
|
SkAAClip clip;
|
|
|
|
clip.setRegion(fRegion);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
enum {
|
|
|
|
N = SkBENCHLOOP(400),
|
|
|
|
};
|
|
|
|
SkRegion fRegion;
|
|
|
|
typedef SkBenchmark INHERITED;
|
|
|
|
};
|
|
|
|
|
2011-10-31 14:33:35 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
static SkBenchmark* Fact0(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, false, false)); }
|
|
|
|
static SkBenchmark* Fact1(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, false, true)); }
|
|
|
|
static SkBenchmark* Fact2(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, true, false)); }
|
|
|
|
static SkBenchmark* Fact3(void* p) { return SkNEW_ARGS(AAClipBuilderBench, (p, true, true)); }
|
|
|
|
|
|
|
|
static BenchRegistry gReg0(Fact0);
|
|
|
|
static BenchRegistry gReg1(Fact1);
|
|
|
|
static BenchRegistry gReg2(Fact2);
|
|
|
|
static BenchRegistry gReg3(Fact3);
|
2011-11-28 19:54:56 +00:00
|
|
|
|
|
|
|
static SkBenchmark* Fact01(void* p) { return SkNEW_ARGS(AAClipRegionBench, (p)); }
|
|
|
|
static BenchRegistry gReg01(Fact01);
|