Switching to FSM-based DL lifecycle.
This is a pure refactoring.
Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: Ieda2be08d7359fa69b2d328c85b3606de6d02b3d
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index 8c79d77..8b28bac 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -171,29 +171,31 @@
public:
DataLoaderStub(IncrementalService& service, MountId id, DataLoaderParamsParcel&& params,
FileSystemControlParcel&& control,
- const DataLoaderStatusListener* externalListener)
- : mService(service),
- mId(id),
- mParams(std::move(params)),
- mControl(std::move(control)),
- mListener(externalListener ? *externalListener : DataLoaderStatusListener()) {}
+ const DataLoaderStatusListener* externalListener);
~DataLoaderStub();
- bool create();
+ bool requestCreate();
bool requestStart();
- void destroy();
+ bool requestDestroy();
- // accessors
+ bool waitForDestroy(Clock::duration duration = std::chrono::seconds(60));
+
+ void onDump(int fd);
+
MountId id() const { return mId; }
const DataLoaderParamsParcel& params() const { return mParams; }
- int status() const { return mStatus; }
- bool startRequested() const { return mStartRequested; }
private:
binder::Status onStatusChanged(MountId mount, int newStatus) final;
+ bool create();
bool start();
- bool waitForDestroy();
+ bool destroy();
+
+ bool setTargetStatus(int status);
+ bool waitForStatus(int status, Clock::duration duration);
+
+ bool fsmStep();
IncrementalService& mService;
MountId const mId;
@@ -203,9 +205,9 @@
std::mutex mStatusMutex;
std::condition_variable mStatusCondition;
- int mStatus = IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
- bool mStartRequested = false;
- bool mDestroyRequested = true;
+ int mCurrentStatus = IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
+ int mTargetStatus = IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
+ TimePoint mTargetStatusTs = {};
};
using DataLoaderStubPtr = sp<DataLoaderStub>;