diff options
author | Bjorn Bringert <bringert@android.com> | 2009-06-01 18:33:33 +0100 |
---|---|---|
committer | Bjorn Bringert <bringert@android.com> | 2009-06-02 09:22:42 +0100 |
commit | ad984f19339008f7eb8687aecc1779be70bc1f65 (patch) | |
tree | 7c71ee777a5a57bda45b66d45798b3a3eae3b793 /core/jni/android_os_MemoryFile.cpp | |
parent | 641bb3d8dfd72f57356d39ef00256d6077c9e235 (diff) | |
download | frameworks_base-ad984f19339008f7eb8687aecc1779be70bc1f65.zip frameworks_base-ad984f19339008f7eb8687aecc1779be70bc1f65.tar.gz frameworks_base-ad984f19339008f7eb8687aecc1779be70bc1f65.tar.bz2 |
Use JNI region calls in MemoryFile read and write.
This will reduce copying or pinning, depending on GC policies, which should
improve performance. See dalvik/docs/jni-tips.html#RegionCalls for more information.
Fixes http://b/issue?id=1887911
Diffstat (limited to 'core/jni/android_os_MemoryFile.cpp')
-rw-r--r-- | core/jni/android_os_MemoryFile.cpp | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/core/jni/android_os_MemoryFile.cpp b/core/jni/android_os_MemoryFile.cpp index 9450e15..6c16150 100644 --- a/core/jni/android_os_MemoryFile.cpp +++ b/core/jni/android_os_MemoryFile.cpp @@ -82,9 +82,7 @@ static jint android_os_MemoryFile_read(JNIEnv* env, jobject clazz, return -1; } - jbyte* bytes = env->GetByteArrayElements(buffer, 0); - memcpy(bytes + destOffset, (const char *)address + srcOffset, count); - env->ReleaseByteArrayElements(buffer, bytes, 0); + env->SetByteArrayRegion(buffer, destOffset, count, (const jbyte *)address + srcOffset); if (unpinned) { ashmem_unpin_region(fd, 0, 0); @@ -103,9 +101,7 @@ static jint android_os_MemoryFile_write(JNIEnv* env, jobject clazz, return -1; } - jbyte* bytes = env->GetByteArrayElements(buffer, 0); - memcpy((char *)address + destOffset, bytes + srcOffset, count); - env->ReleaseByteArrayElements(buffer, bytes, 0); + env->GetByteArrayRegion(buffer, srcOffset, count, (jbyte *)address + destOffset); if (unpinned) { ashmem_unpin_region(fd, 0, 0); |