aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/PathBench.cpp
diff options
context:
space:
mode:
authorGravatar jvanverth@google.com <jvanverth@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-22 13:34:01 +0000
committerGravatar jvanverth@google.com <jvanverth@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-22 13:34:01 +0000
commit46d3d39e65e0b3ea2ad7c91c176ccafb4df0fa24 (patch)
tree3ed0089389283fd2d9cfa8bea196b9363ee60a9d /bench/PathBench.cpp
parent9d5f99bc309a7d733e33a149bef295ae3c8b3ac1 (diff)
Add GPU support for axis-aligned ovals:
- Add drawOval base function to SkDevice, and override in SkGpuDevice - Move isSimilarityMatrix to SkMatrix (renamed to isSimilarity) and fixed up unit test - Since both SkGpuDevice::drawOval() and GrContext::drawPath() can try to draw ovals, added GrContext::canDrawOval() and GrContext::internalDrawOval() to avoid duplicate code - Hooked in axis-aligned oval fill shader - Enabled GPU stroked circles - Added stroked circle bench test Review URL: https://codereview.appspot.com/7137050 git-svn-id: http://skia.googlecode.com/svn/trunk@7304 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/PathBench.cpp')
-rw-r--r--bench/PathBench.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/bench/PathBench.cpp b/bench/PathBench.cpp
index 390c5326ec..ad9ca1d967 100644
--- a/bench/PathBench.cpp
+++ b/bench/PathBench.cpp
@@ -122,7 +122,7 @@ public:
name->append("oval");
}
virtual void makePath(SkPath* path) SK_OVERRIDE {
- SkRect r = { 10, 10, 20, 20 };
+ SkRect r = { 10, 10, 30, 20 };
path->addOval(r);
}
private:
@@ -624,13 +624,14 @@ private:
class CirclesBench : public SkBenchmark {
protected:
SkString fName;
+ Flags fFlags;
enum {
N = SkBENCHLOOP(100)
};
public:
- CirclesBench(void* param) : INHERITED(param) {
- fName.printf("circles");
+ CirclesBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) {
+ fName.printf("circles_%s", fFlags & kStroke_Flag ? "stroke" : "fill");
}
protected:
@@ -643,6 +644,9 @@ protected:
paint.setColor(SK_ColorBLACK);
paint.setAntiAlias(true);
+ if (fFlags & kStroke_Flag) {
+ paint.setStyle(SkPaint::kStroke_Style);
+ }
SkRandom rand;
@@ -655,6 +659,10 @@ protected:
r.fRight = r.fLeft + 2 * radius;
r.fBottom = r.fTop + 2 * radius;
+ if (fFlags & kStroke_Flag) {
+ paint.setStrokeWidth(rand.nextUScalar1() * 5.0f);
+ }
+
SkPath temp;
// mimic how Chrome does circles
@@ -671,6 +679,7 @@ private:
typedef SkBenchmark INHERITED;
};
+
// Chrome creates its own round rects with each corner possibly being different.
// In its "zero radius" incarnation it creates degenerate round rects.
// Note: PathTest::test_arb_round_rect_is_convex and
@@ -959,9 +968,12 @@ static BenchRegistry gRegPathTo(FactPathTo);
static BenchRegistry gRegReverseAdd(FactReverseAdd);
static BenchRegistry gRegReverseTo(FactReverseTo);
-static SkBenchmark* CirclesTest(void* p) { return new CirclesBench(p); }
+static SkBenchmark* CirclesTest(void* p) { return new CirclesBench(p, FLAGS00); }
static BenchRegistry gRegCirclesTest(CirclesTest);
+static SkBenchmark* CirclesStrokeTest(void* p) { return new CirclesBench(p, FLAGS01); }
+static BenchRegistry gRegCirclesStrokeTest(CirclesStrokeTest);
+
static SkBenchmark* ArbRoundRectTest(void* p) { return new ArbRoundRectBench(p, false); }
static BenchRegistry gRegArbRoundRectTest(ArbRoundRectTest);