From 46d3d39e65e0b3ea2ad7c91c176ccafb4df0fa24 Mon Sep 17 00:00:00 2001 From: "jvanverth@google.com" Date: Tue, 22 Jan 2013 13:34:01 +0000 Subject: 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 --- bench/PathBench.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'bench/PathBench.cpp') 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); -- cgit v1.2.3