Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec100900 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

MemoryFile.isMemoryFile was internally determining the length of

the ashmem region. This is actually useful information to have,
so expose that more directly.
parent 9d044514
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ public class MemoryFile
    private static native void native_write(FileDescriptor fd, int address, byte[] buffer,
            int srcOffset, int destOffset, int count, boolean isUnpinned) throws IOException;
    private static native void native_pin(FileDescriptor fd, boolean pin) throws IOException;
    private static native boolean native_is_ashmem_region(FileDescriptor fd) throws IOException;
    private static native int native_get_mapped_size(FileDescriptor fd) throws IOException;

    private FileDescriptor mFD;        // ashmem file descriptor
    private int mAddress;   // address of ashmem memory
@@ -300,7 +300,20 @@ public class MemoryFile
     * @hide
     */
    public static boolean isMemoryFile(FileDescriptor fd) throws IOException {
        return native_is_ashmem_region(fd);
        return (native_get_mapped_size(fd) >= 0);
    }

    /**
     * Returns the size of the memory file, rounded up to a page boundary, that
     * the file descriptor refers to, or -1 if the file descriptor does not
     * refer to a memory file.
     *
     * @throws IOException If <code>fd</code> is not a valid file descriptor.
     *
     * @hide
     */
    public static int getMappedSize(FileDescriptor fd) throws IOException {
        return native_get_mapped_size(fd);
    }

    /**
+6 −6
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ static void android_os_MemoryFile_pin(JNIEnv* env, jobject clazz, jobject fileDe
    }
}

static jboolean android_os_MemoryFile_is_ashmem_region(JNIEnv* env, jobject clazz,
static jint android_os_MemoryFile_get_mapped_size(JNIEnv* env, jobject clazz,
        jobject fileDescriptor) {
    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
    // Use ASHMEM_GET_SIZE to find out if the fd refers to an ashmem region.
@@ -129,13 +129,13 @@ static jboolean android_os_MemoryFile_is_ashmem_region(JNIEnv* env, jobject claz
        if (errno == ENOTTY) {
            // ENOTTY means that the ioctl does not apply to this object,
            // i.e., it is not an ashmem region.
            return JNI_FALSE;
            return (jint) -1;
        }
        // Some other error, throw exception
        jniThrowIOException(env, errno);
        return JNI_FALSE;
        return (jint) -1;
    }
    return JNI_TRUE;
    return (jint) result;
}

static const JNINativeMethod methods[] = {
@@ -146,8 +146,8 @@ static const JNINativeMethod methods[] = {
    {"native_read",  "(Ljava/io/FileDescriptor;I[BIIIZ)I", (void*)android_os_MemoryFile_read},
    {"native_write", "(Ljava/io/FileDescriptor;I[BIIIZ)V", (void*)android_os_MemoryFile_write},
    {"native_pin",   "(Ljava/io/FileDescriptor;Z)V", (void*)android_os_MemoryFile_pin},
    {"native_is_ashmem_region", "(Ljava/io/FileDescriptor;)Z",
            (void*)android_os_MemoryFile_is_ashmem_region}
    {"native_get_mapped_size", "(Ljava/io/FileDescriptor;)I",
            (void*)android_os_MemoryFile_get_mapped_size}
};

static const char* const kClassPathName = "android/os/MemoryFile";