Remove use of SkRefCnt_SafeAssign.

Update pointer to SkRefCnt fields which require it to sk_sp.

Test: refactoring CL. Existing unit tests still pass.
Change-Id: I4f3eb790ee67c09746708458c4492569b64cc58f
This commit is contained in:
Ben Wagner
2018-07-12 12:41:28 -04:00
parent ef594270bf
commit c1a8a46fd4
4 changed files with 24 additions and 33 deletions

View File

@@ -44,8 +44,8 @@ void LayerProperties::reset() {
}
bool LayerProperties::setColorFilter(SkColorFilter* filter) {
if (mColorFilter == filter) return false;
SkRefCnt_SafeAssign(mColorFilter, filter);
if (mColorFilter.get() == filter) return false;
mColorFilter = sk_ref_sp(filter);
return true;
}
@@ -62,7 +62,7 @@ LayerProperties& LayerProperties::operator=(const LayerProperties& other) {
setOpaque(other.opaque());
setAlpha(other.alpha());
setXferMode(other.xferMode());
setColorFilter(other.colorFilter());
setColorFilter(other.getColorFilter());
return *this;
}

View File

@@ -89,9 +89,7 @@ public:
SkBlendMode xferMode() const { return mMode; }
bool setColorFilter(SkColorFilter* filter);
SkColorFilter* colorFilter() const { return mColorFilter; }
SkColorFilter* getColorFilter() const { return mColorFilter.get(); }
// Sets alpha, xfermode, and colorfilter from an SkPaint
// paint may be NULL, in which case defaults will be set
@@ -105,6 +103,7 @@ private:
LayerProperties();
~LayerProperties();
void reset();
bool setColorFilter(SkColorFilter* filter);
// Private since external users should go through properties().effectiveLayerType()
LayerType type() const { return mType; }
@@ -116,7 +115,7 @@ private:
bool mOpaque;
uint8_t mAlpha;
SkBlendMode mMode;
SkColorFilter* mColorFilter = nullptr;
sk_sp<SkColorFilter> mColorFilter;
};
/*

View File

@@ -59,12 +59,6 @@ namespace VectorDrawable {
onPropertyChanged(); \
retVal; \
})
#define UPDATE_SKPROP(field, value) \
({ \
bool retVal = ((field) != (value)); \
if ((field) != (value)) SkRefCnt_SafeAssign((field), (value)); \
retVal; \
})
/* A VectorDrawable is composed of a tree of nodes.
* Each node can be a group node, or a path.
@@ -223,29 +217,28 @@ public:
int fillType = 0; /* non-zero or kWinding_FillType in Skia */
};
explicit FullPathProperties(Node* mNode) : Properties(mNode), mTrimDirty(false) {}
~FullPathProperties() {
SkSafeUnref(fillGradient);
SkSafeUnref(strokeGradient);
}
~FullPathProperties() {}
void syncProperties(const FullPathProperties& prop) {
mPrimitiveFields = prop.mPrimitiveFields;
mTrimDirty = true;
UPDATE_SKPROP(fillGradient, prop.fillGradient);
UPDATE_SKPROP(strokeGradient, prop.strokeGradient);
fillGradient = prop.fillGradient;
strokeGradient = prop.strokeGradient;
onPropertyChanged();
}
void setFillGradient(SkShader* gradient) {
if (UPDATE_SKPROP(fillGradient, gradient)) {
if (fillGradient.get() != gradient) {
fillGradient = sk_ref_sp(gradient);
onPropertyChanged();
}
}
void setStrokeGradient(SkShader* gradient) {
if (UPDATE_SKPROP(strokeGradient, gradient)) {
if (strokeGradient.get() != gradient) {
strokeGradient = sk_ref_sp(gradient);
onPropertyChanged();
}
}
SkShader* getFillGradient() const { return fillGradient; }
SkShader* getStrokeGradient() const { return strokeGradient; }
SkShader* getFillGradient() const { return fillGradient.get(); }
SkShader* getStrokeGradient() const { return strokeGradient.get(); }
float getStrokeWidth() const { return mPrimitiveFields.strokeWidth; }
void setStrokeWidth(float strokeWidth) {
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(strokeWidth, strokeWidth);
@@ -325,8 +318,8 @@ public:
count,
};
PrimitiveFields mPrimitiveFields;
SkShader* fillGradient = nullptr;
SkShader* strokeGradient = nullptr;
sk_sp<SkShader> fillGradient;
sk_sp<SkShader> strokeGradient;
};
// Called from UI thread
@@ -550,8 +543,7 @@ public:
SkRect bounds;
int scaledWidth = 0;
int scaledHeight = 0;
SkColorFilter* colorFilter = nullptr;
~NonAnimatableProperties() { SkSafeUnref(colorFilter); }
sk_sp<SkColorFilter> colorFilter;
} mNonAnimatableProperties;
bool mNonAnimatablePropertiesDirty = true;
@@ -561,8 +553,7 @@ public:
void syncNonAnimatableProperties(const TreeProperties& prop) {
// Copy over the data that can only be changed in UI thread
if (mNonAnimatableProperties.colorFilter != prop.mNonAnimatableProperties.colorFilter) {
SkRefCnt_SafeAssign(mNonAnimatableProperties.colorFilter,
prop.mNonAnimatableProperties.colorFilter);
mNonAnimatableProperties.colorFilter = prop.mNonAnimatableProperties.colorFilter;
}
mNonAnimatableProperties = prop.mNonAnimatableProperties;
}
@@ -599,12 +590,13 @@ public:
}
}
void setColorFilter(SkColorFilter* filter) {
if (UPDATE_SKPROP(mNonAnimatableProperties.colorFilter, filter)) {
if (mNonAnimatableProperties.colorFilter.get() != filter) {
mNonAnimatableProperties.colorFilter = sk_ref_sp(filter);
mNonAnimatablePropertiesDirty = true;
mTree->onPropertyChanged(this);
}
}
SkColorFilter* getColorFilter() const { return mNonAnimatableProperties.colorFilter; }
SkColorFilter* getColorFilter() const { return mNonAnimatableProperties.colorFilter.get(); }
float getViewportWidth() const { return mNonAnimatableProperties.viewportWidth; }
float getViewportHeight() const { return mNonAnimatableProperties.viewportHeight; }

View File

@@ -156,10 +156,10 @@ static bool layerNeedsPaint(const LayerProperties& properties, float alphaMultip
SkPaint* paint) {
paint->setFilterQuality(kLow_SkFilterQuality);
if (alphaMultiplier < 1.0f || properties.alpha() < 255 ||
properties.xferMode() != SkBlendMode::kSrcOver || properties.colorFilter() != nullptr) {
properties.xferMode() != SkBlendMode::kSrcOver || properties.getColorFilter() != nullptr) {
paint->setAlpha(properties.alpha() * alphaMultiplier);
paint->setBlendMode(properties.xferMode());
paint->setColorFilter(sk_ref_sp(properties.colorFilter()));
paint->setColorFilter(sk_ref_sp(properties.getColorFilter()));
return true;
}
return false;