diff options
4 files changed, 16 insertions, 24 deletions
diff --git a/core/java/android/util/MemoryIntArray.java b/core/java/android/util/MemoryIntArray.java index 5cbbbef2cf88..2226881c82cf 100644 --- a/core/java/android/util/MemoryIntArray.java +++ b/core/java/android/util/MemoryIntArray.java @@ -58,6 +58,7 @@ public final class MemoryIntArray implements Parcelable, Closeable { private final boolean mIsOwner; private final long mMemoryAddr; + private final int mSize; private int mFd = -1; /** @@ -75,6 +76,9 @@ public final class MemoryIntArray implements Parcelable, Closeable { final String name = UUID.randomUUID().toString(); mFd = nativeCreate(name, size); mMemoryAddr = nativeOpen(mFd, mIsOwner); + // Note that we use the effective size after allocation, rather than the provided size, + // preserving compat with the original behavior. In practice these should be equivalent. + mSize = nativeSize(mFd); mCloseGuard.open("MemoryIntArray.close"); } @@ -86,6 +90,7 @@ public final class MemoryIntArray implements Parcelable, Closeable { } mFd = pfd.detachFd(); mMemoryAddr = nativeOpen(mFd, mIsOwner); + mSize = nativeSize(mFd); mCloseGuard.open("MemoryIntArray.close"); } @@ -127,13 +132,11 @@ public final class MemoryIntArray implements Parcelable, Closeable { } /** - * Gets the array size. - * - * @throws IOException If an error occurs while accessing the shared memory. + * @return Gets the array size. */ - public int size() throws IOException { + public int size() { enforceNotClosed(); - return nativeSize(mFd); + return mSize; } /** @@ -210,11 +213,10 @@ public final class MemoryIntArray implements Parcelable, Closeable { } } - private void enforceValidIndex(int index) throws IOException { - final int size = size(); - if (index < 0 || index > size - 1) { + private void enforceValidIndex(int index) { + if (index < 0 || index > mSize - 1) { throw new IndexOutOfBoundsException( - index + " not between 0 and " + (size - 1)); + index + " not between 0 and " + (mSize - 1)); } } diff --git a/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java b/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java index 51013e4b4f00..8093af9bb004 100644 --- a/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java +++ b/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java @@ -123,7 +123,7 @@ public class MemoryIntArrayTest { parcel.recycle(); assertNotNull("Should marshall file descriptor", secondArray); - + assertEquals("Marshalled size must be three", 3, secondArray.size()); assertEquals("First element should be 1", 1, secondArray.get(0)); assertEquals("First element should be 2", 2, secondArray.get(1)); assertEquals("First element should be 3", 3, secondArray.get(2)); diff --git a/core/tests/utiltests/src/android/util/RemoteMemoryIntArrayService.java b/core/tests/utiltests/src/android/util/RemoteMemoryIntArrayService.java index 9264c6c86c3f..32dda6be1e2b 100644 --- a/core/tests/utiltests/src/android/util/RemoteMemoryIntArrayService.java +++ b/core/tests/utiltests/src/android/util/RemoteMemoryIntArrayService.java @@ -84,11 +84,7 @@ public class RemoteMemoryIntArrayService extends Service { @Override public int size() { synchronized (mLock) { - try { - return mArray.size(); - } catch (IOException e) { - throw new IllegalStateException(e); - } + return mArray.size(); } } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java b/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java index cd35f67a1369..be480b941586 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java @@ -308,11 +308,8 @@ final class GenerationRegistry { final long token = proto.start(GenerationRegistryProto.BACKING_STORES); final int key = mKeyToBackingStoreMap.keyAt(i); proto.write(BackingStoreProto.KEY, key); - try { - proto.write(BackingStoreProto.BACKING_STORE_SIZE, - mKeyToBackingStoreMap.valueAt(i).size()); - } catch (IOException ignore) { - } + proto.write(BackingStoreProto.BACKING_STORE_SIZE, + mKeyToBackingStoreMap.valueAt(i).size()); proto.write(BackingStoreProto.NUM_CACHED_ENTRIES, mKeyToIndexMapMap.get(key).size()); final ArrayMap<String, Integer> indexMap = mKeyToIndexMapMap.get(key); @@ -357,10 +354,7 @@ final class GenerationRegistry { pw.print("_Backing store for type:"); pw.print(SettingsState.settingTypeToString( SettingsState.getTypeFromKey(key))); pw.print(" user:"); pw.print(SettingsState.getUserIdFromKey(key)); - try { - pw.print(" size:" + mKeyToBackingStoreMap.valueAt(i).size()); - } catch (IOException ignore) { - } + pw.print(" size:" + mKeyToBackingStoreMap.valueAt(i).size()); pw.println(" cachedEntries:" + mKeyToIndexMapMap.get(key).size()); final ArrayMap<String, Integer> indexMap = mKeyToIndexMapMap.get(key); final MemoryIntArray backingStore = getBackingStoreLocked(key, |