Loading libs/hwui/RenderProperties.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; } Loading libs/hwui/RenderProperties.h +3 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; } Loading @@ -116,7 +115,7 @@ private: bool mOpaque; uint8_t mAlpha; SkBlendMode mMode; SkColorFilter* mColorFilter = nullptr; sk_sp<SkColorFilter> mColorFilter; }; /* Loading libs/hwui/VectorDrawable.h +16 −24 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -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; } Loading Loading @@ -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; } Loading libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
libs/hwui/RenderProperties.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; } Loading
libs/hwui/RenderProperties.h +3 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; } Loading @@ -116,7 +115,7 @@ private: bool mOpaque; uint8_t mAlpha; SkBlendMode mMode; SkColorFilter* mColorFilter = nullptr; sk_sp<SkColorFilter> mColorFilter; }; /* Loading
libs/hwui/VectorDrawable.h +16 −24 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -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; } Loading Loading @@ -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; } Loading
libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading