aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@google.com>2017-01-10 14:21:12 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-10 14:21:30 +0000
commit1e74cad9b4ed8079433d4e62ab3198d97436f5ec (patch)
tree3a5fa903460f46e94a56eefa9b889645fa58b104
parent8cbb4246e58c97e2ac51087d2708795b3b59f5e9 (diff)
Revert "Improve quad edges' smoothness in non-AA cases"
This reverts commit d4ed326d6f3704995b0e91292bf2c87e9d36bb14. Reason for revert: reverting temporarily to get us rolling into Chrome again. Must be this CL right? https://storage.googleapis.com/chromium-layout-test-archives/linux_trusty_blink_rel/3364/layout-test-results/results.html Original change's description: > Improve quad edges' smoothness in non-AA cases > > Previously, non-AA quad edges only have an accuracy about 1/2 pixel > (while the AA quad edges have an accuracy about 1/8 pixel). Now, we > increase non-AA quad edges' accuracy to 1/8 pixel as well. > > The difference is very significant for rotating non-AA filled circles. > For example, run `./out/Debug/SampleApp --slide GM:fillcircle` with AA > turned off (by pressing b). > > The benchmark added reveals that increasing quad accuracy from 1/2 to > 1/8 doesn't affect the performance significantly. The following is the > 1/2-accuracy performance versus 1/8-accuracy performance: > > curr/maxrss loops min median mean max stddev samples > config bench > 7/17 MB 19 2.43µs 2.57µs 2.81µs 10.5µs 22% 16119 > 8888 path_fill_big_nonaacircle > 7/17 MB 17 1.38µs 1.42µs 1.52µs 13µs 20% 21409 > 8888 path_fill_small_nonaacircle > > curr/maxrss loops min median mean max stddev samples > config bench > 7/17 MB 71 2.52µs 2.59µs 2.79µs 7.67µs 19% 7557 > 8888 path_fill_big_nonaacircle > 7/17 MB 64 1.45µs 1.49µs 1.51µs 2.39µs 5% 12704 > 8888 path_fill_small_nonaacircle > > > BUG=skia: > > Change-Id: I3482098aeafcc6f2ec9aa3382977c0dc1b650964 > Reviewed-on: https://skia-review.googlesource.com/6699 > Reviewed-by: Mike Reed <reed@google.com> > Commit-Queue: Yuqian Li <liyuqian@google.com> > TBR=caryclark@google.com,liyuqian@google.com,reed@google.com,djsollen@google.com,bungeman@google.com,reviews@skia.org,fmalita@chromium.org BUG=skia: NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: I5bc4596ab506f6f61ac2da91a07cf51d61114f31 Reviewed-on: https://skia-review.googlesource.com/6829 Commit-Queue: Mike Klein <mtklein@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
-rw-r--r--bench/PathBench.cpp20
-rw-r--r--src/core/SkEdge.cpp15
2 files changed, 3 insertions, 32 deletions
diff --git a/bench/PathBench.cpp b/bench/PathBench.cpp
index 449d30558e..4ca4401163 100644
--- a/bench/PathBench.cpp
+++ b/bench/PathBench.cpp
@@ -173,23 +173,6 @@ private:
typedef PathBench INHERITED;
};
-class NonAACirclePathBench: public CirclePathBench {
-public:
- NonAACirclePathBench(Flags flags) : INHERITED(flags) {}
-
- void appendName(SkString* name) override {
- name->append("nonaacircle");
- }
-
- void setupPaint(SkPaint* paint) override {
- CirclePathBench::setupPaint(paint);
- paint->setAntiAlias(false);
- }
-
-private:
- typedef CirclePathBench INHERITED;
-};
-
// Test max speedup of Analytic AA for concave paths
class AAAConcavePathBench : public PathBench {
public:
@@ -1107,9 +1090,6 @@ DEF_BENCH( return new CirclePathBench(FLAGS01); )
DEF_BENCH( return new CirclePathBench(FLAGS10); )
DEF_BENCH( return new CirclePathBench(FLAGS11); )
-DEF_BENCH( return new NonAACirclePathBench(FLAGS00); )
-DEF_BENCH( return new NonAACirclePathBench(FLAGS10); )
-
DEF_BENCH( return new AAAConcavePathBench(FLAGS00); )
DEF_BENCH( return new AAAConcavePathBench(FLAGS10); )
DEF_BENCH( return new AAAConvexPathBench(FLAGS00); )
diff --git a/src/core/SkEdge.cpp b/src/core/SkEdge.cpp
index f8e8d98b5d..216604b551 100644
--- a/src/core/SkEdge.cpp
+++ b/src/core/SkEdge.cpp
@@ -157,22 +157,16 @@ static inline SkFDot6 cheap_distance(SkFDot6 dx, SkFDot6 dy)
return dx;
}
-static inline int diff_to_shift(SkFDot6 dx, SkFDot6 dy, int shiftAA = 2)
+static inline int diff_to_shift(SkFDot6 dx, SkFDot6 dy)
{
// cheap calc of distance from center of p0-p2 to the center of the curve
SkFDot6 dist = cheap_distance(dx, dy);
// shift down dist (it is currently in dot6)
- // down by 3 should give us 1/8 pixel accuracy (assuming our dist is accurate...)
+ // down by 5 should give us 1/2 pixel accuracy (assuming our dist is accurate...)
// this is chosen by heuristic: make it as big as possible (to minimize segments)
// ... but small enough so that our curves still look smooth
- // When shift > 0, we're using AA and everything is scaled up so we can
- // lower the accuracy.
-#ifdef SK_SUPPORT_LEGACY_QUAD_SHIFT
dist = (dist + (1 << 4)) >> 5;
-#else
- dist = (dist + (1 << 4)) >> (3 + shiftAA);
-#endif
// each subdivision (shift value) cuts this dist (error) by 1/4
return (32 - SkCLZ(dist)) >> 1;
@@ -220,10 +214,7 @@ bool SkQuadraticEdge::setQuadraticWithoutUpdate(const SkPoint pts[3], int shift)
{
SkFDot6 dx = (SkLeftShift(x1, 1) - x0 - x2) >> 2;
SkFDot6 dy = (SkLeftShift(y1, 1) - y0 - y2) >> 2;
- // This is a little confusing:
- // before this line, shift is the scale up factor for AA;
- // after this line, shift is the fCurveShift.
- shift = diff_to_shift(dx, dy, shift);
+ shift = diff_to_shift(dx, dy);
SkASSERT(shift >= 0);
}
// need at least 1 subdivision for our bias trick