diff options
author | jvanverth@google.com <jvanverth@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-22 13:34:01 +0000 |
---|---|---|
committer | jvanverth@google.com <jvanverth@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-22 13:34:01 +0000 |
commit | 46d3d39e65e0b3ea2ad7c91c176ccafb4df0fa24 (patch) | |
tree | 3ed0089389283fd2d9cfa8bea196b9363ee60a9d /bench/PathBench.cpp | |
parent | 9d5f99bc309a7d733e33a149bef295ae3c8b3ac1 (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.cpp | 20 |
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); |