Merge changes I425638d3,Ie06232a0 into sc-dev

* changes:
  Revert "Migrate ApkAssets to use NativeAllocationRegistry"
  Revert "Cast ApkAssets to uintptr_t before jlong"
This commit is contained in:
Ryan Mitchell
2021-03-08 15:48:29 +00:00
committed by Android (Google) Code Review
2 changed files with 16 additions and 36 deletions

View File

@@ -26,8 +26,6 @@ import android.text.TextUtils;
import com.android.internal.annotations.GuardedBy;
import libcore.util.NativeAllocationRegistry;
import java.io.FileDescriptor;
import java.io.IOException;
import java.lang.annotation.Retention;
@@ -104,11 +102,11 @@ public final class ApkAssets {
public @interface FormatType {}
@GuardedBy("this")
private final long mNativePtr;
private long mNativePtr; // final, except cleared in finalizer.
@Nullable
@GuardedBy("this")
private final StringBlock mStringBlock;
private final StringBlock mStringBlock; // null or closed if mNativePtr = 0.
@PropertyFlags
private final int mFlags;
@@ -116,19 +114,6 @@ public final class ApkAssets {
@Nullable
private final AssetsProvider mAssets;
@GuardedBy("this")
@Nullable
private final Runnable mRunNativeCleanup;
// Use a Holder to allow static initialization of ApkAssets in the boot image, and
// possibly to avoid some initialization ordering issues.
private static class NoImagePreloadHolder {
// TODO(175425996): Make size estimate more accurate
public static final NativeAllocationRegistry REGISTRY =
NativeAllocationRegistry.createMalloced(ApkAssets.class.getClassLoader(),
nativeGetFinalizer());
}
/**
* Creates a new ApkAssets instance from the given path on disk.
*
@@ -303,8 +288,6 @@ public final class ApkAssets {
mFlags = flags;
mNativePtr = nativeLoad(format, path, flags, assets);
mStringBlock = new StringBlock(nativeGetStringBlock(mNativePtr), true /*useSparse*/);
mRunNativeCleanup = NoImagePreloadHolder.REGISTRY.registerNativeAllocation(
this, mNativePtr);
mAssets = assets;
}
@@ -316,8 +299,6 @@ public final class ApkAssets {
mFlags = flags;
mNativePtr = nativeLoadFd(format, fd, friendlyName, flags, assets);
mStringBlock = new StringBlock(nativeGetStringBlock(mNativePtr), true /*useSparse*/);
mRunNativeCleanup = NoImagePreloadHolder.REGISTRY.registerNativeAllocation(
this, mNativePtr);
mAssets = assets;
}
@@ -329,8 +310,6 @@ public final class ApkAssets {
mFlags = flags;
mNativePtr = nativeLoadFdOffsets(format, fd, friendlyName, offset, length, flags, assets);
mStringBlock = new StringBlock(nativeGetStringBlock(mNativePtr), true /*useSparse*/);
mRunNativeCleanup = NoImagePreloadHolder.REGISTRY.registerNativeAllocation(
this, mNativePtr);
mAssets = assets;
}
@@ -338,7 +317,6 @@ public final class ApkAssets {
mFlags = flags;
mNativePtr = nativeLoadEmpty(flags, assets);
mStringBlock = null;
mRunNativeCleanup = null;
mAssets = assets;
}
@@ -433,16 +411,22 @@ public final class ApkAssets {
return "ApkAssets{path=" + getDebugName() + "}";
}
@Override
protected void finalize() throws Throwable {
close();
}
/**
* Closes this class and the contained {@link #mStringBlock}.
*/
public void close() {
synchronized (this) {
if (mStringBlock != null) {
mStringBlock.close();
}
if (mRunNativeCleanup != null) {
mRunNativeCleanup.run();
if (mNativePtr != 0) {
if (mStringBlock != null) {
mStringBlock.close();
}
nativeDestroy(mNativePtr);
mNativePtr = 0;
}
}
}
@@ -457,6 +441,7 @@ public final class ApkAssets {
private static native long nativeLoadFdOffsets(@FormatType int format,
@NonNull FileDescriptor fd, @NonNull String friendlyName, long offset, long length,
@PropertyFlags int flags, @Nullable AssetsProvider asset) throws IOException;
private static native void nativeDestroy(long ptr);
private static native @NonNull String nativeGetAssetPath(long ptr);
private static native @NonNull String nativeGetDebugName(long ptr);
private static native long nativeGetStringBlock(long ptr);
@@ -465,5 +450,4 @@ public final class ApkAssets {
private static native @Nullable OverlayableInfo nativeGetOverlayableInfo(long ptr,
String overlayableName) throws IOException;
private static native boolean nativeDefinesOverlayable(long ptr) throws IOException;
private static native final long nativeGetFinalizer();
}