check for no_paint and remove some drawdrawable special-casing

Bug: skia:
Change-Id: I824980a47ddd7c8c7627dabb5efd40f8f0889b67
Reviewed-on: https://skia-review.googlesource.com/16900
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
This commit is contained in:
Mike Reed 2017-05-15 13:27:02 -04:00 committed by Skia Commit-Bot
parent 4c9b893953
commit 74564b40bc
3 changed files with 8 additions and 6 deletions

View File

@ -159,6 +159,8 @@ enum Tags {
kHasImage_Tag = 2, // Contains an SkImage or SkBitmap.
kHasText_Tag = 4, // Contains text.
kHasPaint_Tag = 8, // May have an SkPaint field, at least optionally.
kDrawWithPaint_Tag = kDraw_Tag | kHasPaint_Tag,
};
// A macro to make it a little easier to define a struct that can be stored in SkRecord.

View File

@ -81,7 +81,6 @@ struct SkPathCounter {
void operator()(const SkRecords::DrawPicture& op) {
fNumSlowPathsAndDashEffects += op.picture->numSlowPaths();
}
void operator()(const SkRecords::DrawDrawable&) { /* TODO */ }
void checkPaint(const SkPaint* paint) {
if (paint && paint->getPathEffect()) {
@ -132,12 +131,13 @@ struct SkPathCounter {
}
template <typename T>
SK_WHEN(T::kTags & SkRecords::kDraw_Tag, void) operator()(const T& op) {
SK_WHEN(T::kTags & SkRecords::kHasPaint_Tag, void) operator()(const T& op) {
this->checkPaint(AsPtr(op.paint));
}
template <typename T>
SK_WHEN(!(T::kTags & SkRecords::kDraw_Tag), void) operator()(const T& op) { /* do nothing */ }
SK_WHEN(!(T::kTags & SkRecords::kHasPaint_Tag), void)
operator()(const T& op) { /* do nothing */ }
int fNumSlowPathsAndDashEffects;
};

View File

@ -49,13 +49,13 @@ public:
type* get() { return fPaint; }
template <typename T>
SK_WHEN(T::kTags & kDraw_Tag, bool) operator()(T* draw) {
SK_WHEN((T::kTags & kDrawWithPaint_Tag) == kDrawWithPaint_Tag, bool) operator()(T* draw) {
fPaint = AsPtr(draw->paint);
return true;
}
bool operator()(DrawDrawable*) {
static_assert(DrawDrawable::kTags & kDraw_Tag, "");
template <typename T>
SK_WHEN((T::kTags & kDrawWithPaint_Tag) == kDraw_Tag, bool) operator()(T* draw) {
fPaint = nullptr;
return true;
}