Merge "Add SharedMemory.fromFileDescriptor"

This commit is contained in:
TreeHugger Robot
2021-08-20 04:03:27 +00:00
committed by Android (Google) Code Review
3 changed files with 15 additions and 11 deletions

View File

@@ -31865,6 +31865,7 @@ package android.os {
method public void close();
method @NonNull public static android.os.SharedMemory create(@Nullable String, int) throws android.system.ErrnoException;
method public int describeContents();
method @NonNull public static android.os.SharedMemory fromFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
method public int getSize();
method @NonNull public java.nio.ByteBuffer map(int, int, int) throws android.system.ErrnoException;
method @NonNull public java.nio.ByteBuffer mapReadOnly() throws android.system.ErrnoException;

View File

@@ -274,10 +274,6 @@ package android.os {
field public static final int VPN_UID = 1016; // 0x3f8
}
public final class SharedMemory implements java.io.Closeable android.os.Parcelable {
method @NonNull public static android.os.SharedMemory create(@NonNull android.os.ParcelFileDescriptor);
}
public class StatsServiceManager {
method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsCompanionServiceRegisterer();
method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsManagerServiceRegisterer();

View File

@@ -18,7 +18,6 @@ package android.os;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.system.ErrnoException;
import android.system.Os;
@@ -95,15 +94,23 @@ public final class SharedMemory implements Parcelable, Closeable {
}
/**
* Creates from existing shared memory passed as {@link ParcelFileDesciptor}.
* Creates an instance from existing shared memory passed as {@link ParcelFileDescriptor}.
*
* @param fd File descriptor of shared memory passed as {@link #ParcelFileDescriptor}.
* <p> The {@code fd} should be a shared memory created from
{@code SharedMemory or ASharedMemory}. This can be useful when shared memory is passed as
file descriptor through JNI or binder service implemented in cpp.
* <p> Note that newly created {@code SharedMemory} takes ownership of passed {@code fd} and
* the original {@code fd} becomes detached (Check {@link ParcelFileDescriptor#detachFd()}).
* If the caller wants to use the file descriptor after the call, the caller should duplicate
* the file descriptor (Check {@link ParcelFileDescriptor#dup()}) and pass the duped version
* instead.
*
* @hide
* @param fd File descriptor of shared memory passed as {@link ParcelFileDescriptor}.
*/
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public static @NonNull SharedMemory create(@NonNull ParcelFileDescriptor fd) {
return new SharedMemory(fd.getFileDescriptor());
public static @NonNull SharedMemory fromFileDescriptor(@NonNull ParcelFileDescriptor fd) {
FileDescriptor f = new FileDescriptor();
f.setInt$(fd.detachFd());
return new SharedMemory(f);
}
private static final int PROT_MASK = OsConstants.PROT_READ | OsConstants.PROT_WRITE