Merge "Reduce instructions required to obtain and recycle TypedArray" into lmp-dev

This commit is contained in:
Alan Viverette
2014-09-14 20:04:38 +00:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 19 deletions

View File

@@ -16,6 +16,7 @@
package android.content.res;
import android.util.Pools.SynchronizedPool;
import android.view.ViewDebug;
import com.android.internal.util.XmlUtils;
@@ -96,6 +97,9 @@ public class Resources {
private static final LongSparseArray<ColorStateList> sPreloadedColorStateLists
= new LongSparseArray<ColorStateList>();
// Pool of TypedArrays targeted to this Resources object.
final SynchronizedPool<TypedArray> mTypedArrayPool = new SynchronizedPool<TypedArray>(5);
// Used by BridgeResources in layoutlib
static Resources mSystem = null;
@@ -121,9 +125,10 @@ public class Resources {
private final int[] mCachedXmlBlockIds = { 0, 0, 0, 0 };
private final XmlBlock[] mCachedXmlBlocks = new XmlBlock[4];
private final AssetManager mAssets;
final AssetManager mAssets;
final DisplayMetrics mMetrics = new DisplayMetrics();
private final Configuration mConfiguration = new Configuration();
private final DisplayMetrics mMetrics = new DisplayMetrics();
private NativePluralRules mPluralRule;
private CompatibilityInfo mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;

View File

@@ -20,7 +20,6 @@ import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Pools.SynchronizedPool;
import android.util.TypedValue;
import com.android.internal.util.XmlUtils;
@@ -37,15 +36,11 @@ import java.util.Arrays;
* the positions of the attributes given to obtainStyledAttributes.
*/
public class TypedArray {
private static final SynchronizedPool<TypedArray> mPool = new SynchronizedPool<TypedArray>(5);
static TypedArray obtain(Resources res, int len) {
final TypedArray attrs = mPool.acquire();
final TypedArray attrs = res.mTypedArrayPool.acquire();
if (attrs != null) {
attrs.mLength = len;
attrs.mResources = res;
attrs.mMetrics = res.getDisplayMetrics();
attrs.mAssets = res.getAssets();
attrs.mRecycled = false;
final int fullLen = len * AssetManager.STYLE_NUM_ENTRIES;
@@ -63,9 +58,10 @@ public class TypedArray {
new int[1+len], len);
}
private Resources mResources;
private DisplayMetrics mMetrics;
private AssetManager mAssets;
private final Resources mResources;
private final DisplayMetrics mMetrics;
private final AssetManager mAssets;
private boolean mRecycled;
/*package*/ XmlBlock.Parser mXml;
@@ -872,17 +868,12 @@ public class TypedArray {
}
mRecycled = true;
mResources = null;
mMetrics = null;
mAssets = null;
// These may have been set by the client.
mXml = null;
mTheme = null;
synchronized (mPool) {
mPool.release(this);
}
mResources.mTypedArrayPool.release(this);
}
/**
@@ -984,8 +975,8 @@ public class TypedArray {
/*package*/ TypedArray(Resources resources, int[] data, int[] indices, int len) {
mResources = resources;
mMetrics = mResources.getDisplayMetrics();
mAssets = mResources.getAssets();
mMetrics = mResources.mMetrics;
mAssets = mResources.mAssets;
mData = data;
mIndices = indices;
mLength = len;