diff options
| author | PO HUNG CHEN <howardsoc@google.com> | 2019-08-20 08:18:58 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-08-20 08:18:58 +0000 |
| commit | 35fa063e895d682faa6431dc6e89fcbebe01f2c1 (patch) | |
| tree | cf76b9177af36d6fc321518628da18870572f9ae /core/java/android | |
| parent | b657d9b176ec8f71f200462baaaee6774c3647f6 (diff) | |
| parent | 7bb18effb27158b1a91ae37c41f0fdfd2d42a938 (diff) | |
Merge "Use Ashmem to reduce buffer copies"
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/os/image/DynamicSystemManager.java | 28 | ||||
| -rw-r--r-- | core/java/android/os/image/IDynamicSystemService.aidl | 16 |
2 files changed, 36 insertions, 8 deletions
diff --git a/core/java/android/os/image/DynamicSystemManager.java b/core/java/android/os/image/DynamicSystemManager.java index e4f88c52889f..77fd946f7ccb 100644 --- a/core/java/android/os/image/DynamicSystemManager.java +++ b/core/java/android/os/image/DynamicSystemManager.java @@ -20,6 +20,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemService; import android.content.Context; import android.gsi.GsiProgress; +import android.os.ParcelFileDescriptor; import android.os.RemoteException; /** @@ -52,22 +53,39 @@ public class DynamicSystemManager { /** The DynamicSystemManager.Session represents a started session for the installation. */ public class Session { private Session() {} + /** - * Write a chunk of the DynamicSystem system image + * Set the file descriptor that points to a ashmem which will be used + * to fetch data during the submitFromAshmem. * - * @return {@code true} if the call succeeds. {@code false} if there is any native runtime - * error. + * @param ashmem fd that points to a ashmem + * @param size size of the ashmem file */ @RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM) - public boolean write(byte[] buf) { + public boolean setAshmem(ParcelFileDescriptor ashmem, long size) { try { - return mService.write(buf); + return mService.setAshmem(ashmem, size); } catch (RemoteException e) { throw new RuntimeException(e.toString()); } } /** + * Submit bytes to the DSU partition from the ashmem previously set with + * setAshmem. + * + * @param size Number of bytes + * @return true on success, false otherwise. + */ + @RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM) + public boolean submitFromAshmem(int size) { + try { + return mService.submitFromAshmem(size); + } catch (RemoteException e) { + throw new RuntimeException(e.toString()); + } + } + /** * Finish write and make device to boot into the it after reboot. * * @return {@code true} if the call succeeds. {@code false} if there is any native runtime diff --git a/core/java/android/os/image/IDynamicSystemService.aidl b/core/java/android/os/image/IDynamicSystemService.aidl index 2f4ab2d2420d..a6de170b5ce5 100644 --- a/core/java/android/os/image/IDynamicSystemService.aidl +++ b/core/java/android/os/image/IDynamicSystemService.aidl @@ -79,10 +79,20 @@ interface IDynamicSystemService boolean setEnable(boolean enable, boolean oneShot); /** - * Write a chunk of the DynamicSystem system image + * Set the file descriptor that points to a ashmem which will be used + * to fetch data during the submitFromAshmem. * - * @return true if the call succeeds + * @param fd fd that points to a ashmem + * @param size size of the ashmem file */ - boolean write(in byte[] buf); + boolean setAshmem(in ParcelFileDescriptor fd, long size); + /** + * Submit bytes to the DSU partition from the ashmem previously set with + * setAshmem. + * + * @param bytes number of bytes that can be read from stream. + * @return true on success, false otherwise. + */ + boolean submitFromAshmem(long bytes); } |
