Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Unified Diff: src/core/SkPicture.cpp

Issue 1060863004: Reduce sizeof(SkPicture::Analysis) from 24 bytes to 2 bytes. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: robertphillips nits Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/core/SkPicture.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkPicture.cpp
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index 37bf921666c4842a1711309e2975b1772b17aaf2..4d4364aec6988d641b17c9d714d7ad65d35e4228 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -133,27 +133,18 @@ struct TextHunter {
struct SkPicture::PathCounter {
SK_CREATE_MEMBER_DETECTOR(paint);
- PathCounter()
- : numPaintWithPathEffectUses (0)
- , numFastPathDashEffects (0)
- , numAAConcavePaths (0)
- , numAAHairlineConcavePaths (0)
- , numAADFEligibleConcavePaths(0) {
- }
+ PathCounter() : fNumSlowPathsAndDashEffects(0) {}
// Recurse into nested pictures.
void operator()(const SkRecords::DrawPicture& op) {
const SkPicture::Analysis& analysis = op.picture->fAnalysis;
- numPaintWithPathEffectUses += analysis.fNumPaintWithPathEffectUses;
- numFastPathDashEffects += analysis.fNumFastPathDashEffects;
- numAAConcavePaths += analysis.fNumAAConcavePaths;
- numAAHairlineConcavePaths += analysis.fNumAAHairlineConcavePaths;
- numAADFEligibleConcavePaths += analysis.fNumAADFEligibleConcavePaths;
+ fNumSlowPathsAndDashEffects += analysis.fNumSlowPathsAndDashEffects;
}
void checkPaint(const SkPaint* paint) {
if (paint && paint->getPathEffect()) {
- numPaintWithPathEffectUses++;
+ // Initially assume it's slow.
+ fNumSlowPathsAndDashEffects++;
}
}
@@ -165,7 +156,7 @@ struct SkPicture::PathCounter {
SkPathEffect::DashType dashType = effect->asADash(&info);
if (2 == op.count && SkPaint::kRound_Cap != op.paint.getStrokeCap() &&
SkPathEffect::kDash_DashType == dashType && 2 == info.fCount) {
- numFastPathDashEffects++;
+ fNumSlowPathsAndDashEffects--;
}
}
}
@@ -173,16 +164,16 @@ struct SkPicture::PathCounter {
void operator()(const SkRecords::DrawPath& op) {
this->checkPaint(&op.paint);
if (op.paint.isAntiAlias() && !op.path.isConvex()) {
- numAAConcavePaths++;
-
SkPaint::Style paintStyle = op.paint.getStyle();
const SkRect& pathBounds = op.path.getBounds();
if (SkPaint::kStroke_Style == paintStyle &&
0 == op.paint.getStrokeWidth()) {
- numAAHairlineConcavePaths++;
+ // AA hairline concave path is not slow.
} else if (SkPaint::kFill_Style == paintStyle && pathBounds.width() < 64.f &&
pathBounds.height() < 64.f && !op.path.isVolatile()) {
- numAADFEligibleConcavePaths++;
+ // AADF eligible concave path is not slow.
+ } else {
+ fNumSlowPathsAndDashEffects++;
}
}
}
@@ -195,11 +186,7 @@ struct SkPicture::PathCounter {
template <typename T>
SK_WHEN(!HasMember_paint<T>, void) operator()(const T& op) { /* do nothing */ }
- int numPaintWithPathEffectUses;
- int numFastPathDashEffects;
- int numAAConcavePaths;
- int numAAHairlineConcavePaths;
- int numAADFEligibleConcavePaths;
+ int fNumSlowPathsAndDashEffects;
};
SkPicture::Analysis::Analysis(const SkRecord& record) {
@@ -209,11 +196,7 @@ SkPicture::Analysis::Analysis(const SkRecord& record) {
for (unsigned i = 0; i < record.count(); i++) {
record.visit<void>(i, counter);
}
- fNumPaintWithPathEffectUses = counter.numPaintWithPathEffectUses;
- fNumFastPathDashEffects = counter.numFastPathDashEffects;
- fNumAAConcavePaths = counter.numAAConcavePaths;
- fNumAAHairlineConcavePaths = counter.numAAHairlineConcavePaths;
- fNumAADFEligibleConcavePaths = counter.numAADFEligibleConcavePaths;
+ fNumSlowPathsAndDashEffects = SkTMin<int>(counter.fNumSlowPathsAndDashEffects, 255);
fHasText = false;
TextHunter text;
@@ -230,13 +213,7 @@ bool SkPicture::Analysis::suitableForGpuRasterization(const char** reason,
// TODO: the heuristic used here needs to be refined
static const int kNumSlowPathsTol = 6;
- int numSlowPathDashedPaths = fNumPaintWithPathEffectUses - fNumFastPathDashEffects;
-
- int numSlowPaths = fNumAAConcavePaths -
- fNumAAHairlineConcavePaths -
- fNumAADFEligibleConcavePaths;
-
- bool ret = numSlowPathDashedPaths + numSlowPaths < kNumSlowPathsTol;
+ bool ret = fNumSlowPathsAndDashEffects < kNumSlowPathsTol;
if (!ret && reason) {
*reason = "Too many slow paths (either concave or dashed).";
« no previous file with comments | « include/core/SkPicture.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698