diff options
author | 2021-03-18 21:21:27 -0700 | |
---|---|---|
committer | 2021-03-23 02:01:06 +0000 | |
commit | cb163f9bb64dcf67ebc64d58a1eb8b74c3baae8f (patch) | |
tree | 6d25326f4d737aad2750e2c67a811247c3348789 /services/incremental/IncrementalService.h | |
parent | 5f573843ca8cea7b39b8ebf3124fb6e5b13a11ae (diff) |
Unbind from DataLoader when not needed anymore.
+ simplify adding new callbacks on storage state
+ streamline lock story for ifs members
Bug: 183101753
Fixes: 183101753
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest PackageManagerServiceTest ChecksumsTest
Change-Id: I86fffa7101eeb42ebccca67ae7f5d133c1ab9dfa
Diffstat (limited to 'services/incremental/IncrementalService.h')
-rw-r--r-- | services/incremental/IncrementalService.h | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h index 4a5db062e3c5..a8f32dec824e 100644 --- a/services/incremental/IncrementalService.h +++ b/services/incremental/IncrementalService.h @@ -74,6 +74,17 @@ using StorageLoadingProgressListener = ::android::sp<IStorageLoadingProgressList using PerUidReadTimeouts = ::android::os::incremental::PerUidReadTimeouts; +struct IfsState { + // If mount is fully loaded. + bool fullyLoaded = false; + // If read logs are enabled on this mount. Populated only if fullyLoaded == true. + bool readLogsEnabled = false; + // If there was an error fetching any of the above. + bool error = false; +}; +// Returns true if wants to be called again. +using IfsStateCallback = std::function<bool(StorageId, IfsState)>; + class IncrementalService final { public: explicit IncrementalService(ServiceManagerWrapper&& sm, std::string_view rootDir); @@ -366,7 +377,7 @@ private: void setUidReadTimeouts(StorageId storage, std::vector<PerUidReadTimeouts>&& perUidReadTimeouts); void clearUidReadTimeouts(StorageId storage); - void updateUidReadTimeouts(StorageId storage, Clock::time_point timeLimit); + bool checkUidReadTimeouts(StorageId storage, IfsState state, Clock::time_point timeLimit); std::unordered_set<std::string_view> adoptMountedInstances(); void mountExistingImages(const std::unordered_set<std::string_view>& mountedRootNames); @@ -387,11 +398,6 @@ private: bool needStartDataLoaderLocked(IncFsMount& ifs); - DataLoaderStubPtr prepareDataLoader(IncFsMount& ifs, - content::pm::DataLoaderParamsParcel&& params, - DataLoaderStatusListener&& statusListener = {}, - const StorageHealthCheckParams& healthCheckParams = {}, - StorageHealthListener&& healthListener = {}); void prepareDataLoaderLocked(IncFsMount& ifs, content::pm::DataLoaderParamsParcel&& params, DataLoaderStatusListener&& statusListener = {}, const StorageHealthCheckParams& healthCheckParams = {}, @@ -410,8 +416,8 @@ private: std::string_view path) const; int makeDirs(const IncFsMount& ifs, StorageId storageId, std::string_view path, int mode); - int setStorageParams(IncFsMount& ifs, StorageId storageId, bool enableReadLogs); - binder::Status applyStorageParams(IncFsMount& ifs, bool enableReadLogs); + int disableReadLogsLocked(IncFsMount& ifs); + int applyStorageParamsLocked(IncFsMount& ifs, bool enableReadLogs); LoadingProgress getLoadingProgressFromPath(const IncFsMount& ifs, std::string_view path) const; @@ -431,6 +437,12 @@ private: bool addTimedJob(TimedQueueWrapper& timedQueue, MountId id, Milliseconds after, Job what); bool removeTimedJobs(TimedQueueWrapper& timedQueue, MountId id); + + void addIfsStateCallback(StorageId storageId, IfsStateCallback callback); + void removeIfsStateCallbacks(StorageId storageId); + void processIfsStateCallbacks(); + void processIfsStateCallbacks(StorageId storageId, std::vector<IfsStateCallback>& callbacks); + bool updateLoadingProgress(int32_t storageId, StorageLoadingProgressListener&& progressListener); long getMillsSinceOldestPendingRead(StorageId storage); @@ -456,6 +468,10 @@ private: std::mutex mCallbacksLock; std::unordered_map<std::string, sp<AppOpsListener>> mCallbackRegistered; + using IfsStateCallbacks = std::unordered_map<StorageId, std::vector<IfsStateCallback>>; + std::mutex mIfsStateCallbacksLock; + IfsStateCallbacks mIfsStateCallbacks; + std::atomic_bool mSystemReady = false; StorageId mNextId = 0; |