Loading graphics/java/android/graphics/drawable/VectorDrawable.java +34 −27 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.Rect; import android.graphics.Shader; import android.graphics.Shader; import android.os.Trace; import android.util.ArrayMap; import android.util.ArrayMap; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.DisplayMetrics; Loading Loading @@ -605,11 +606,14 @@ public class VectorDrawable extends Drawable { public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser, public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser, @NonNull AttributeSet attrs, @Nullable Theme theme) @NonNull AttributeSet attrs, @Nullable Theme theme) throws XmlPullParserException, IOException { throws XmlPullParserException, IOException { try { Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "VectorDrawable#inflate"); if (mVectorState.mRootGroup != null || mVectorState.mNativeTree != null) { if (mVectorState.mRootGroup != null || mVectorState.mNativeTree != null) { // This VD has been used to display other VD resource content, clean up. // This VD has been used to display other VD resource content, clean up. if (mVectorState.mRootGroup != null) { if (mVectorState.mRootGroup != null) { // Subtract the native allocation for all the nodes. // Subtract the native allocation for all the nodes. VMRuntime.getRuntime().registerNativeFree(mVectorState.mRootGroup.getNativeSize()); VMRuntime.getRuntime().registerNativeFree( mVectorState.mRootGroup.getNativeSize()); // Remove child nodes' reference to tree // Remove child nodes' reference to tree mVectorState.mRootGroup.setTree(null); mVectorState.mRootGroup.setTree(null); } } Loading Loading @@ -637,6 +641,9 @@ public class VectorDrawable extends Drawable { state.onTreeConstructionFinished(); state.onTreeConstructionFinished(); // Update local properties. // Update local properties. updateLocalState(r); updateLocalState(r); } finally { Trace.traceEnd(Trace.TRACE_TAG_RESOURCES); } } } private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException { private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException { Loading libs/hwui/VectorDrawable.cpp +6 −2 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "SkShader.h" #include "SkShader.h" #include <utils/Log.h> #include <utils/Log.h> #include "utils/Macros.h" #include "utils/Macros.h" #include "utils/TraceUtils.h" #include "utils/VectorDrawableUtils.h" #include "utils/VectorDrawableUtils.h" #include <math.h> #include <math.h> Loading Loading @@ -593,14 +594,17 @@ void Tree::draw(SkCanvas* canvas) { void Tree::updateBitmapCache(Bitmap& bitmap, bool useStagingData) { void Tree::updateBitmapCache(Bitmap& bitmap, bool useStagingData) { SkBitmap outCache; SkBitmap outCache; bitmap.getSkBitmap(&outCache); bitmap.getSkBitmap(&outCache); int cacheWidth = outCache.width(); int cacheHeight = outCache.height(); ATRACE_FORMAT("VectorDrawable repaint %dx%d", cacheWidth, cacheHeight); outCache.eraseColor(SK_ColorTRANSPARENT); outCache.eraseColor(SK_ColorTRANSPARENT); SkCanvas outCanvas(outCache); SkCanvas outCanvas(outCache); float viewportWidth = useStagingData ? float viewportWidth = useStagingData ? mStagingProperties.getViewportWidth() : mProperties.getViewportWidth(); mStagingProperties.getViewportWidth() : mProperties.getViewportWidth(); float viewportHeight = useStagingData ? float viewportHeight = useStagingData ? mStagingProperties.getViewportHeight() : mProperties.getViewportHeight(); mStagingProperties.getViewportHeight() : mProperties.getViewportHeight(); float scaleX = outCache.width() / viewportWidth; float scaleX = cacheWidth / viewportWidth; float scaleY = outCache.height() / viewportHeight; float scaleY = cacheHeight / viewportHeight; outCanvas.scale(scaleX, scaleY); outCanvas.scale(scaleX, scaleY); mRootNode->draw(&outCanvas, useStagingData); mRootNode->draw(&outCanvas, useStagingData); } } Loading Loading
graphics/java/android/graphics/drawable/VectorDrawable.java +34 −27 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.Rect; import android.graphics.Shader; import android.graphics.Shader; import android.os.Trace; import android.util.ArrayMap; import android.util.ArrayMap; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.DisplayMetrics; Loading Loading @@ -605,11 +606,14 @@ public class VectorDrawable extends Drawable { public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser, public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser, @NonNull AttributeSet attrs, @Nullable Theme theme) @NonNull AttributeSet attrs, @Nullable Theme theme) throws XmlPullParserException, IOException { throws XmlPullParserException, IOException { try { Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "VectorDrawable#inflate"); if (mVectorState.mRootGroup != null || mVectorState.mNativeTree != null) { if (mVectorState.mRootGroup != null || mVectorState.mNativeTree != null) { // This VD has been used to display other VD resource content, clean up. // This VD has been used to display other VD resource content, clean up. if (mVectorState.mRootGroup != null) { if (mVectorState.mRootGroup != null) { // Subtract the native allocation for all the nodes. // Subtract the native allocation for all the nodes. VMRuntime.getRuntime().registerNativeFree(mVectorState.mRootGroup.getNativeSize()); VMRuntime.getRuntime().registerNativeFree( mVectorState.mRootGroup.getNativeSize()); // Remove child nodes' reference to tree // Remove child nodes' reference to tree mVectorState.mRootGroup.setTree(null); mVectorState.mRootGroup.setTree(null); } } Loading Loading @@ -637,6 +641,9 @@ public class VectorDrawable extends Drawable { state.onTreeConstructionFinished(); state.onTreeConstructionFinished(); // Update local properties. // Update local properties. updateLocalState(r); updateLocalState(r); } finally { Trace.traceEnd(Trace.TRACE_TAG_RESOURCES); } } } private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException { private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException { Loading
libs/hwui/VectorDrawable.cpp +6 −2 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "SkShader.h" #include "SkShader.h" #include <utils/Log.h> #include <utils/Log.h> #include "utils/Macros.h" #include "utils/Macros.h" #include "utils/TraceUtils.h" #include "utils/VectorDrawableUtils.h" #include "utils/VectorDrawableUtils.h" #include <math.h> #include <math.h> Loading Loading @@ -593,14 +594,17 @@ void Tree::draw(SkCanvas* canvas) { void Tree::updateBitmapCache(Bitmap& bitmap, bool useStagingData) { void Tree::updateBitmapCache(Bitmap& bitmap, bool useStagingData) { SkBitmap outCache; SkBitmap outCache; bitmap.getSkBitmap(&outCache); bitmap.getSkBitmap(&outCache); int cacheWidth = outCache.width(); int cacheHeight = outCache.height(); ATRACE_FORMAT("VectorDrawable repaint %dx%d", cacheWidth, cacheHeight); outCache.eraseColor(SK_ColorTRANSPARENT); outCache.eraseColor(SK_ColorTRANSPARENT); SkCanvas outCanvas(outCache); SkCanvas outCanvas(outCache); float viewportWidth = useStagingData ? float viewportWidth = useStagingData ? mStagingProperties.getViewportWidth() : mProperties.getViewportWidth(); mStagingProperties.getViewportWidth() : mProperties.getViewportWidth(); float viewportHeight = useStagingData ? float viewportHeight = useStagingData ? mStagingProperties.getViewportHeight() : mProperties.getViewportHeight(); mStagingProperties.getViewportHeight() : mProperties.getViewportHeight(); float scaleX = outCache.width() / viewportWidth; float scaleX = cacheWidth / viewportWidth; float scaleY = outCache.height() / viewportHeight; float scaleY = cacheHeight / viewportHeight; outCanvas.scale(scaleX, scaleY); outCanvas.scale(scaleX, scaleY); mRootNode->draw(&outCanvas, useStagingData); mRootNode->draw(&outCanvas, useStagingData); } } Loading