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>
GLBenches do not expect gl state to change between onPerCanvasPreDraw and *PostDraw, but we do a clear and sometimes we clear as draw. This causes us to bind vertex objects / programs / etc.
This change creates two new virtual methods which are called right before and immediately after timing.
BUG=skia:
Review URL: https://codereview.chromium.org/1379853003
(and a couple presubmit fixes)
This allows us to turn back on -Werror for LLVM coverage builds,
and more generally supports building with Clang 3.7.
No public API changes.
TBR=reed@google.com
BUG=skia:
Review URL: https://codereview.chromium.org/1232463006
This fixes every case where virtual and SK_OVERRIDE were on the same line,
which should be the bulk of cases. We'll have to manually clean up the rest
over time unless I level up in regexes.
for f in (find . -type f); perl -p -i -e 's/virtual (.*)SK_OVERRIDE/\1SK_OVERRIDE/g' $f; end
BUG=skia:
Review URL: https://codereview.chromium.org/806653007
Memory usage grows unbounded in path_create without this patch (growing the
paths). This bench also somewhat needlessly cycles through 32 paths, so now
we just work with one.
Peak memory usage drops from ~2-3G to ~150M. This should fix the NexusS crashes,
or at least get us to the next one.
BUG=skia:1687
R=caryclark@google.com
Author: mtklein@google.com
Review URL: https://codereview.chromium.org/111283007
git-svn-id: http://skia.googlecode.com/svn/trunk@12925 2bbb7eff-a529-9590-31e7-b0007b416f81
I'm not quite sure why I wrote such a convoluted API with setLoops()/getLoops().
This replaces it with a loops argument passed to onDraw().
This CL is largely mechanical translation from the old API to the new one.
MathBench used this->getLoops() outside onDraw(), which seems incorrect. I
fixed it.
BUG=
R=djsollen@google.com
Author: mtklein@google.com
Review URL: https://codereview.chromium.org/99893003
git-svn-id: http://skia.googlecode.com/svn/trunk@12466 2bbb7eff-a529-9590-31e7-b0007b416f81
Adds "grresourcecache_add" and "grresourcecache_find" bench tests to test
GrResourceCache::add and GrResourceCache::find. The tests work only
with GPU backends, since GrResourceCache needs an GrGpu.
Modifies bench tests to override SkBenchmark::isSuitableFor(Backend)
function that specifies what kind of backend the test is inteded
for. This replaces the previous "fIsRendering" flag that would
indicate test that did no rendering.
Adds SkCanvas::getGrContext() call to get the GrContext that the
canvas ends up drawing to. The member function solves a common
use-case that is also used in the benchmark added here.
R=mtklein@google.com, bsalomon@google.com
Author: kkinnunen@nvidia.com
Review URL: https://codereview.chromium.org/73643005
git-svn-id: http://skia.googlecode.com/svn/trunk@12334 2bbb7eff-a529-9590-31e7-b0007b416f81
Using Mike Klein's excellent coverage tool, increase the
unit testing of SkPath.cpp from 70% to 95%.
Along the way, determined that these functions were not
maintained or used:
SkPath::pathTo
SkPath::contains
as well as a large block of SkPath::cheapGetDirection().
Changed SkPath::validate() to permit infinities in
the path data points.
Fixed errors in preserving direction.
Fixed error setting direction when convexity is unknown.
Added missing conic to moveTo only detector.
BUG=
R=bsalomon@google.com, reed@google.com
Author: caryclark@google.com
Review URL: https://codereview.chromium.org/65493004
git-svn-id: http://skia.googlecode.com/svn/trunk@12291 2bbb7eff-a529-9590-31e7-b0007b416f81
so that we could track performance changes for ovals. However, rendering the
stroked oval cases are now ~5ms slower since they're larger. This restores them
to something close to their original performance by slightly shrinking the
bounds. This will help determine what effect r7304 may have had.
git-svn-id: http://skia.googlecode.com/svn/trunk@7365 2bbb7eff-a529-9590-31e7-b0007b416f81
- 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