Alter gpu veto
This CL unifies the treatment of the dashed and concave paths. Before: TP 28 FP 15 TN 8 FN 3 IND 3 After: TP 28 FP 18 TN 7 FN 2 IND 2 One of the TrueNegatives that became a FalsePositive was the motivation use case (the Chromium busy spinner). Committed: https://skia.googlesource.com/skia/+/87a6a8e18c7d5bbc94f478b44c53dc0e0549f927 Review URL: https://codereview.chromium.org/875913002
This commit is contained in:
parent
1d9e80f02b
commit
98b0315ad6
@ -239,31 +239,22 @@ SkPicture::Analysis::Analysis(const SkRecord& record) {
|
||||
bool SkPicture::Analysis::suitableForGpuRasterization(const char** reason,
|
||||
int sampleCount) const {
|
||||
// TODO: the heuristic used here needs to be refined
|
||||
static const int kNumPaintWithPathEffectsUsesTol = 1;
|
||||
static const int kNumAAConcavePathsTol = 5;
|
||||
static const int kNumSlowPathsTol = 6;
|
||||
|
||||
int numNonDashedPathEffects = fNumPaintWithPathEffectUses -
|
||||
fNumFastPathDashEffects;
|
||||
bool suitableForDash = (0 == fNumPaintWithPathEffectUses) ||
|
||||
(numNonDashedPathEffects < kNumPaintWithPathEffectsUsesTol
|
||||
&& 0 == sampleCount);
|
||||
int numSlowPathDashedPaths = fNumPaintWithPathEffectUses;
|
||||
if (0 == sampleCount) {
|
||||
// The fast dashing path only works when MSAA is disabled
|
||||
numSlowPathDashedPaths -= fNumFastPathDashEffects;
|
||||
}
|
||||
|
||||
bool ret = suitableForDash &&
|
||||
(fNumAAConcavePaths - fNumAAHairlineConcavePaths - fNumAADFEligibleConcavePaths)
|
||||
< kNumAAConcavePathsTol;
|
||||
int numSlowPaths = fNumAAConcavePaths -
|
||||
fNumAAHairlineConcavePaths -
|
||||
fNumAADFEligibleConcavePaths;
|
||||
|
||||
bool ret = numSlowPathDashedPaths + numSlowPaths < kNumSlowPathsTol;
|
||||
|
||||
if (!ret && reason) {
|
||||
if (!suitableForDash) {
|
||||
if (0 != sampleCount) {
|
||||
*reason = "Can't use multisample on dash effect.";
|
||||
} else {
|
||||
*reason = "Too many non dashed path effects.";
|
||||
}
|
||||
} else if ((fNumAAConcavePaths - fNumAAHairlineConcavePaths - fNumAADFEligibleConcavePaths)
|
||||
>= kNumAAConcavePathsTol)
|
||||
*reason = "Too many anti-aliased concave paths.";
|
||||
else
|
||||
*reason = "Unknown reason for GPU unsuitability.";
|
||||
*reason = "Too many slow paths (either concave or dashed).";
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -140,7 +140,9 @@ static void test_gpu_veto(skiatest::Reporter* reporter) {
|
||||
paint.setStyle(SkPaint::kStroke_Style);
|
||||
paint.setPathEffect(dash);
|
||||
|
||||
canvas->drawPath(path, paint);
|
||||
for (int i = 0; i < 50; ++i) {
|
||||
canvas->drawPath(path, paint);
|
||||
}
|
||||
}
|
||||
SkAutoTUnref<SkPicture> picture(recorder.endRecording());
|
||||
// path effects currently render an SkPicture undesireable for GPU rendering
|
||||
@ -225,7 +227,10 @@ static void test_gpu_veto(skiatest::Reporter* reporter) {
|
||||
paint.setPathEffect(pe)->unref();
|
||||
|
||||
SkPoint points [2] = { { 0, 0 }, { 100, 0 } };
|
||||
canvas->drawPoints(SkCanvas::kLines_PointMode, 2, points, paint);
|
||||
|
||||
for (int i = 0; i < 50; ++i) {
|
||||
canvas->drawPoints(SkCanvas::kLines_PointMode, 2, points, paint);
|
||||
}
|
||||
}
|
||||
picture.reset(recorder.endRecording());
|
||||
// fast-path dashed effects are fine for GPU rendering ...
|
||||
@ -238,7 +243,9 @@ static void test_gpu_veto(skiatest::Reporter* reporter) {
|
||||
SkPathEffect* pe = SkDashPathEffect::Create(intervals, 2, 25);
|
||||
paint.setPathEffect(pe)->unref();
|
||||
|
||||
canvas->drawRect(SkRect::MakeWH(10, 10), paint);
|
||||
for (int i = 0; i < 50; ++i) {
|
||||
canvas->drawRect(SkRect::MakeWH(10, 10), paint);
|
||||
}
|
||||
}
|
||||
picture.reset(recorder.endRecording());
|
||||
// ... but only when applied to drawPoint() calls
|
||||
|
Loading…
Reference in New Issue
Block a user