diff options
-rw-r--r-- | core/java/android/content/pm/PackageParser.java | 19 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageParserCacheHelper.java | 114 | ||||
-rw-r--r-- | core/java/android/os/Parcel.java | 66 |
3 files changed, 4 insertions, 195 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index efcd3c9389c2..69e3369ccba1 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -50,8 +50,6 @@ import android.app.ActivityManager; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.PackageParserCacheHelper.ReadHelper; -import android.content.pm.PackageParserCacheHelper.WriteHelper; import android.content.pm.split.DefaultSplitAssetLoader; import android.content.pm.split.SplitAssetDependencyLoader; import android.content.pm.split.SplitAssetLoader; @@ -1026,17 +1024,11 @@ public class PackageParser { @VisibleForTesting protected Package fromCacheEntry(byte[] bytes) throws IOException { - final ReadHelper helper = new ReadHelper(); - - final Parcel p = Parcel.obtain(); - p.setReadWriteHelper(helper); - + Parcel p = Parcel.obtain(); p.unmarshall(bytes, 0, bytes.length); p.setDataPosition(0); - helper.start(p); PackageParser.Package pkg = new PackageParser.Package(p); - p.recycle(); return pkg; @@ -1044,15 +1036,8 @@ public class PackageParser { @VisibleForTesting protected byte[] toCacheEntry(Package pkg) throws IOException { - final WriteHelper helper = new WriteHelper(); - - final Parcel p = Parcel.obtain(); - p.setReadWriteHelper(helper); - + Parcel p = Parcel.obtain(); pkg.writeToParcel(p, 0 /* flags */); - - helper.finish(p); - byte[] serialized = p.marshall(); p.recycle(); diff --git a/core/java/android/content/pm/PackageParserCacheHelper.java b/core/java/android/content/pm/PackageParserCacheHelper.java deleted file mode 100644 index 638bc1359b85..000000000000 --- a/core/java/android/content/pm/PackageParserCacheHelper.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.content.pm; - -import android.os.Parcel; - -import java.util.ArrayList; -import java.util.HashMap; - -/** - * Helper classes to read from and write to Parcel with pooled strings. - * - * @hide - */ -public class PackageParserCacheHelper { - private PackageParserCacheHelper() { - } - - /** - * Parcel read helper with a string pool. - */ - public static class ReadHelper extends Parcel.ReadWriteHelper { - private final ArrayList<String> mStrings = new ArrayList<>(); - - public ReadHelper() { - } - - /** - * Prepare a parcel. - */ - public void start(Parcel p) { - mStrings.clear(); - - final int poolPosition = p.readInt(); - final int startPosition = p.dataPosition(); - - // The pool is at the end of the parcel. - p.setDataPosition(poolPosition); - p.readStringList(mStrings); - - // Then move back. - p.setDataPosition(startPosition); - } - - /** - * Read an string index from a parcel, and returns the corresponding string from the pool. - */ - @Override - public String readString(Parcel p) { - return mStrings.get(p.readInt()); - } - } - - /** - * Parcel write helper with a string pool. - */ - public static class WriteHelper extends Parcel.ReadWriteHelper { - private final ArrayList<String> mStrings = new ArrayList<>(); - - private final HashMap<String, Integer> mIndexes = new HashMap<>(); - - public WriteHelper() { - } - - /** - * Instead of writing a string directly to a parcel, this method adds it to the pool, - * and write the index in the pool to the parcel. - */ - @Override - public void writeString(Parcel p, String s) { - final Integer cur = mIndexes.get(s); - if (cur != null) { - // String already in the pool. Just write the index. - p.writeInt(cur); // Already in the pool. - } else { - // Note in the pool. Add to the pool, and write the index. - final int index = mStrings.size(); - mIndexes.put(s, index); - mStrings.add(s); - - p.writeInt(index); - } - } - - /** - * Closes a parcel by appending the string pool at the end and updating the pool offset, - * which it assumes is at the first byte. - */ - public void finish(Parcel p) { - final int poolPosition = p.readInt(); - p.writeStringList(mStrings); - - p.setDataPosition(0); - p.writeInt(poolPosition); - - // Move back to the end. - p.setDataPosition(p.dataSize()); - } - } -} diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 5284e0de45c9..10331b9229e3 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -291,7 +291,7 @@ public final class Parcel { private static native void nativeWriteFloat(long nativePtr, float val); @FastNative private static native void nativeWriteDouble(long nativePtr, double val); - static native void nativeWriteString(long nativePtr, String val); + private static native void nativeWriteString(long nativePtr, String val); private static native void nativeWriteStrongBinder(long nativePtr, IBinder val); private static native long nativeWriteFileDescriptor(long nativePtr, FileDescriptor val); @@ -306,7 +306,7 @@ public final class Parcel { private static native float nativeReadFloat(long nativePtr); @CriticalNative private static native double nativeReadDouble(long nativePtr); - static native String nativeReadString(long nativePtr); + private static native String nativeReadString(long nativePtr); private static native IBinder nativeReadStrongBinder(long nativePtr); private static native FileDescriptor nativeReadFileDescriptor(long nativePtr); @@ -339,33 +339,6 @@ public final class Parcel { }; /** - * @hide - */ - public static class ReadWriteHelper { - public static final ReadWriteHelper DEFAULT = new ReadWriteHelper(); - - /** - * Called when writing a string to a parcel. Subclasses wanting to write a string - * must use {@link #writeStringNoHelper(String)} to avoid - * infinity recursive calls. - */ - public void writeString(Parcel p, String s) { - nativeWriteString(p.mNativePtr, s); - } - - /** - * Called when reading a string to a parcel. Subclasses wanting to read a string - * must use {@link #readStringNoHelper()} to avoid - * infinity recursive calls. - */ - public String readString(Parcel p) { - return nativeReadString(p.mNativePtr); - } - } - - private ReadWriteHelper mReadWriteHelper = ReadWriteHelper.DEFAULT; - - /** * Retrieve a new Parcel object from the pool. */ public static Parcel obtain() { @@ -379,7 +352,6 @@ public final class Parcel { if (DEBUG_RECYCLE) { p.mStack = new RuntimeException(); } - p.mReadWriteHelper = ReadWriteHelper.DEFAULT; return p; } } @@ -413,16 +385,6 @@ public final class Parcel { } } - /** - * Set a {@link ReadWriteHelper}, which can be used to avoid having duplicate strings, for - * example. - * - * @hide - */ - public void setReadWriteHelper(ReadWriteHelper helper) { - mReadWriteHelper = helper != null ? helper : ReadWriteHelper.DEFAULT; - } - /** @hide */ public static native long getGlobalAllocSize(); @@ -663,17 +625,6 @@ public final class Parcel { * growing dataCapacity() if needed. */ public final void writeString(String val) { - mReadWriteHelper.writeString(this, val); - } - - /** - * Write a string without going though a {@link ReadWriteHelper}. Subclasses of - * {@link ReadWriteHelper} must use this method instead of {@link #writeString} to avoid - * infinity recursive calls. - * - * @hide - */ - public void writeStringNoHelper(String val) { nativeWriteString(mNativePtr, val); } @@ -2045,17 +1996,6 @@ public final class Parcel { * Read a string value from the parcel at the current dataPosition(). */ public final String readString() { - return mReadWriteHelper.readString(this); - } - - /** - * Read a string without going though a {@link ReadWriteHelper}. Subclasses of - * {@link ReadWriteHelper} must use this method instead of {@link #readString} to avoid - * infinity recursive calls. - * - * @hide - */ - public String readStringNoHelper() { return nativeReadString(mNativePtr); } @@ -3056,7 +2996,6 @@ public final class Parcel { if (mOwnsNativeParcelObject) { updateNativeSize(nativeFreeBuffer(mNativePtr)); } - mReadWriteHelper = ReadWriteHelper.DEFAULT; } private void destroy() { @@ -3067,7 +3006,6 @@ public final class Parcel { } mNativePtr = 0; } - mReadWriteHelper = null; } @Override |