• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.os.incremental;
18 
19 import android.content.pm.DataLoaderParamsParcel;
20 import android.content.pm.IDataLoaderStatusListener;
21 import android.os.incremental.IncrementalNewFileParams;
22 import android.os.incremental.IStorageLoadingProgressListener;
23 import android.os.incremental.IStorageHealthListener;
24 import android.os.incremental.PerUidReadTimeouts;
25 import android.os.incremental.StorageHealthCheckParams;
26 import android.os.PersistableBundle;
27 
28 /** @hide */
29 interface IIncrementalService {
30     /**
31      * A set of flags for the |createMode| parameters when creating a new Incremental storage.
32      */
33     const int CREATE_MODE_TEMPORARY_BIND = 1;
34     const int CREATE_MODE_PERMANENT_BIND = 2;
35     const int CREATE_MODE_CREATE = 4;
36     const int CREATE_MODE_OPEN_EXISTING = 8;
37 
38     /**
39      * Opens or creates a storage given a target path and data loader params. Returns the storage ID.
40      */
openStorage(in @tf8InCpp String path)41     int openStorage(in @utf8InCpp String path);
createStorage(in @tf8InCpp String path, in DataLoaderParamsParcel params, int createMode)42     int createStorage(in @utf8InCpp String path, in DataLoaderParamsParcel params, int createMode);
createLinkedStorage(in @tf8InCpp String path, int otherStorageId, int createMode)43     int createLinkedStorage(in @utf8InCpp String path, int otherStorageId, int createMode);
44 
45     /**
46      * Loops DataLoader through bind/create/start with params.
47      */
startLoading(int storageId, in DataLoaderParamsParcel params, in IDataLoaderStatusListener statusListener, in StorageHealthCheckParams healthCheckParams, in IStorageHealthListener healthListener, in PerUidReadTimeouts[] perUidReadTimeouts)48     boolean startLoading(int storageId,
49                          in DataLoaderParamsParcel params,
50                          in IDataLoaderStatusListener statusListener,
51                          in StorageHealthCheckParams healthCheckParams,
52                          in IStorageHealthListener healthListener,
53                          in PerUidReadTimeouts[] perUidReadTimeouts);
54 
55     /**
56      * PM/system is done with this storage, ok to increase timeouts.
57      */
onInstallationComplete(int storageId)58     void onInstallationComplete(int storageId);
59 
60     /**
61      * Bind-mounts a path under a storage to a full path. Can be permanent or temporary.
62      */
63     const int BIND_TEMPORARY = 0;
64     const int BIND_PERMANENT = 1;
makeBindMount(int storageId, in @utf8InCpp String sourcePath, in @utf8InCpp String targetFullPath, int bindType)65     int makeBindMount(int storageId, in @utf8InCpp String sourcePath, in @utf8InCpp String targetFullPath, int bindType);
66 
67     /**
68      * Deletes an existing bind mount on a path under a storage. Returns 0 on success, and -errno on failure.
69      */
deleteBindMount(int storageId, in @utf8InCpp String targetFullPath)70     int deleteBindMount(int storageId, in @utf8InCpp String targetFullPath);
71 
72     /**
73      * Creates a directory under a storage. The target directory is specified by its path.
74      */
makeDirectory(int storageId, in @utf8InCpp String path)75     int makeDirectory(int storageId, in @utf8InCpp String path);
76 
77     /**
78      * Recursively creates a directory under a storage. The target directory is specified by its path.
79      * All the parent directories of the target directory will be created if they do not exist already.
80      */
makeDirectories(int storageId, in @utf8InCpp String path)81     int makeDirectories(int storageId, in @utf8InCpp String path);
82 
83     /**
84      * Creates a file under a storage.
85      */
makeFile(int storageId, in @utf8InCpp String path, in IncrementalNewFileParams params, in @nullable byte[] content)86     int makeFile(int storageId, in @utf8InCpp String path, in IncrementalNewFileParams params, in @nullable byte[] content);
87 
88     /**
89      * Creates a file under a storage. Content of the file is from a range inside another file.
90      * Both files are specified by their paths.
91      */
makeFileFromRange(int storageId, in @utf8InCpp String targetPath, in @utf8InCpp String sourcePath, long start, long end)92     int makeFileFromRange(int storageId, in @utf8InCpp String targetPath, in @utf8InCpp String sourcePath, long start, long end);
93 
94     /**
95      * Creates a hard link between two files in two storage instances.
96      * Source and dest specified by parent storage IDs and their paths.
97      * The source and dest storage instances should be in the same fs mount.
98      * Note: destStorageId can be the same as sourceStorageId.
99      */
makeLink(int sourceStorageId, in @utf8InCpp String sourcePath, int destStorageId, in @utf8InCpp String destPath)100     int makeLink(int sourceStorageId, in @utf8InCpp String sourcePath, int destStorageId, in @utf8InCpp String destPath);
101 
102     /**
103      * Deletes a hard link in a storage, specified by its path.
104      */
unlink(int storageId, in @utf8InCpp String path)105     int unlink(int storageId, in @utf8InCpp String path);
106 
107     /**
108      * Checks if a file is fully loaded. File is specified by its path.
109      * 0 - fully loaded
110      * >0 - certain pages missing
111      * <0 - -errcode
112      */
isFileFullyLoaded(int storageId, in @utf8InCpp String path)113     int isFileFullyLoaded(int storageId, in @utf8InCpp String path);
114 
115     /**
116      * Checks if all files in the storage are fully loaded.
117      * 0 - fully loaded
118      * >0 - certain pages missing
119      * <0 - -errcode
120      */
isFullyLoaded(int storageId)121     int isFullyLoaded(int storageId);
122 
123     /**
124      * Returns overall loading progress of all the files on a storage, progress value between [0,1].
125      * Returns a negative value on error.
126      */
getLoadingProgress(int storageId)127     float getLoadingProgress(int storageId);
128 
129     /**
130      * Reads the metadata of a file. File is specified by either its path or 16 byte id.
131      */
getMetadataByPath(int storageId, in @utf8InCpp String path)132     byte[] getMetadataByPath(int storageId, in @utf8InCpp String path);
getMetadataById(int storageId, in byte[] fileId)133     byte[] getMetadataById(int storageId, in byte[] fileId);
134 
135     /**
136      * Deletes a storage given its ID. Deletes its bind mounts and unmount it. Stop its data loader.
137      */
deleteStorage(int storageId)138     void deleteStorage(int storageId);
139 
140     /**
141      * Permanently disable readlogs reporting for a storage given its ID.
142      */
disallowReadLogs(int storageId)143     void disallowReadLogs(int storageId);
144 
145     /**
146      * Setting up native library directories and extract native libs onto a storage if needed.
147      */
configureNativeBinaries(int storageId, in @utf8InCpp String apkFullPath, in @utf8InCpp String libDirRelativePath, in @utf8InCpp String abi, boolean extractNativeLibs)148     boolean configureNativeBinaries(int storageId, in @utf8InCpp String apkFullPath, in @utf8InCpp String libDirRelativePath, in @utf8InCpp String abi, boolean extractNativeLibs);
149 
150     /**
151      * Waits until all native library extraction is done for the storage
152      */
waitForNativeBinariesExtraction(int storageId)153     boolean waitForNativeBinariesExtraction(int storageId);
154 
155     /**
156      * Register to start listening for loading progress change for a storage.
157      */
registerLoadingProgressListener(int storageId, IStorageLoadingProgressListener listener)158     boolean registerLoadingProgressListener(int storageId, IStorageLoadingProgressListener listener);
159 
160     /**
161      * Stop listening for the loading progress change for a storage.
162      */
unregisterLoadingProgressListener(int storageId)163     boolean unregisterLoadingProgressListener(int storageId);
164 
165     /**
166      * Metrics key for the duration in milliseconds between now and the oldest pending read. The value is a long.
167      */
168     const @utf8InCpp String METRICS_MILLIS_SINCE_OLDEST_PENDING_READ = "millisSinceOldestPendingRead";
169     /**
170      * Metrics key for whether read logs are enabled. The value is a boolean.
171      */
172     const @utf8InCpp String METRICS_READ_LOGS_ENABLED = "readLogsEnabled";
173     /**
174      * Metrics key for the storage health status. The value is an int.
175      */
176     const @utf8InCpp String METRICS_STORAGE_HEALTH_STATUS_CODE = "storageHealthStatusCode";
177     /**
178      * Metrics key for the data loader status. The value is an int.
179      */
180     const @utf8InCpp String METRICS_DATA_LOADER_STATUS_CODE = "dataLoaderStatusCode";
181     /**
182      * Metrics key for duration since last data loader binding attempt. The value is a long.
183      */
184     const @utf8InCpp String METRICS_MILLIS_SINCE_LAST_DATA_LOADER_BIND = "millisSinceLastDataLoaderBind";
185     /**
186      * Metrics key for delay in milliseconds to retry data loader binding. The value is a long.
187      */
188     const @utf8InCpp String METRICS_DATA_LOADER_BIND_DELAY_MILLIS = "dataLoaderBindDelayMillis";
189     /**
190      * Metrics key for total count of delayed reads caused by pending reads. The value is an int.
191      */
192     const @utf8InCpp String METRICS_TOTAL_DELAYED_READS = "totalDelayedReads";
193     /**
194      * Metrics key for total count of delayed reads caused by pending reads. The value is an int.
195      */
196     const @utf8InCpp String METRICS_TOTAL_DELAYED_READS_MILLIS = "totalDelayedReadsMillis";
197     /**
198      * Metrics key for total count of failed reads. The value is an int.
199      */
200     const @utf8InCpp String METRICS_TOTAL_FAILED_READS = "totalFailedReads";
201     /**
202      * Metrics key for the uid of the last read error. The value is an int.
203      */
204     const @utf8InCpp String METRICS_LAST_READ_ERROR_UID = "lastReadErrorUid";
205     /**
206      * Metrics key for duration in milliseconds since the last read error. The value is a long.
207      */
208     const @utf8InCpp String METRICS_MILLIS_SINCE_LAST_READ_ERROR = "millisSinceLastReadError";
209     /**
210      * Metrics key for the error number of the last read error. The value is an int.
211      */
212     const @utf8InCpp String METRICS_LAST_READ_ERROR_NUMBER = "lastReadErrorNo";
213     /**
214      * Return a bundle containing the requested metrics keys and their values.
215      */
getMetrics(int storageId)216     PersistableBundle getMetrics(int storageId);
217 }
218