Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f796949 authored by Amos Bianchi's avatar Amos Bianchi
Browse files

Change argument of active services callback to bool.

Instead of passing the number of active services, pass a bool
that represents if there are clients.

Bug: 176239128
Test: test aidl_lazy_test

Change-Id: I8180547dfe4ebc11d5d7bb3a7306bc79f839d715
Merged-In: I8180547dfe4ebc11d5d7bb3a7306bc79f839d715
(cherry-picked from 1afb14e050360ece9f127bf27bb416cb274f0eed)
parent a1509565
Loading
Loading
Loading
Loading
+23 −18
Original line number Diff line number Diff line
@@ -38,8 +38,7 @@ public:
                         bool allowIsolated, int dumpFlags);
    void forcePersist(bool persist);

    void setActiveServicesCountCallback(const std::function<bool(int)>&
                                        activeServicesCountCallback);
    void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);

    bool tryUnregister();

@@ -68,6 +67,9 @@ private:
     */
    size_t mNumConnectedServices;

    // previous value passed to the active services callback
    std::optional<bool> mPreviousHasClients;

    struct Service {
        sp<IBinder> service;
        bool allowIsolated;
@@ -82,8 +84,8 @@ private:

    bool mForcePersist;

    // Callback used to report the number of services with clients
    std::function<bool(int)> mActiveServicesCountCallback;
    // Callback used to report if there are services with clients
    std::function<bool(bool)> mActiveServicesCallback;
};

class ClientCounterCallback {
@@ -98,8 +100,7 @@ public:
     */
    void forcePersist(bool persist);

    void setActiveServicesCountCallback(const std::function<bool(int)>&
                                        activeServicesCountCallback);
    void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);

    bool tryUnregister();

@@ -137,7 +138,7 @@ bool ClientCounterCallbackImpl::registerService(const sp<IBinder>& service, cons

void ClientCounterCallbackImpl::forcePersist(bool persist) {
    mForcePersist = persist;
    if (!mForcePersist && mNumConnectedServices == 0) {
    if (!mForcePersist) {
        // Attempt a shutdown in case the number of clients hit 0 while the flag was on
        maybeTryShutdown();
    }
@@ -183,8 +184,12 @@ void ClientCounterCallbackImpl::maybeTryShutdown() {
    }

    bool handledInCallback = false;
    if (mActiveServicesCountCallback != nullptr) {
        handledInCallback = mActiveServicesCountCallback(mNumConnectedServices);
    if (mActiveServicesCallback != nullptr) {
        bool hasClients = mNumConnectedServices != 0;
        if (hasClients != mPreviousHasClients) {
            handledInCallback = mActiveServicesCallback(hasClients);
            mPreviousHasClients = hasClients;
        }
    }

    // If there is no callback defined or the callback did not handle this
@@ -225,9 +230,9 @@ Status ClientCounterCallbackImpl::onClients(const sp<IBinder>& service, bool cli
    reRegister();
}

void ClientCounterCallbackImpl::setActiveServicesCountCallback(const std::function<bool(int)>&
                                                               activeServicesCountCallback) {
    mActiveServicesCountCallback = activeServicesCountCallback;
void ClientCounterCallbackImpl::setActiveServicesCallback(const std::function<bool(bool)>&
                                                          activeServicesCallback) {
    mActiveServicesCallback = activeServicesCallback;
}

ClientCounterCallback::ClientCounterCallback() {
@@ -243,9 +248,9 @@ void ClientCounterCallback::forcePersist(bool persist) {
    mImpl->forcePersist(persist);
}

void ClientCounterCallback::setActiveServicesCountCallback(const std::function<bool(int)>&
                                                           activeServicesCountCallback) {
    mImpl->setActiveServicesCountCallback(activeServicesCountCallback);
void ClientCounterCallback::setActiveServicesCallback(const std::function<bool(bool)>&
                                                      activeServicesCallback) {
    mImpl->setActiveServicesCallback(activeServicesCallback);
}

bool ClientCounterCallback::tryUnregister() {
@@ -279,9 +284,9 @@ void LazyServiceRegistrar::forcePersist(bool persist) {
    mClientCC->forcePersist(persist);
}

void LazyServiceRegistrar::setActiveServicesCountCallback(const std::function<bool(int)>&
                                                          activeServicesCountCallback) {
    mClientCC->setActiveServicesCountCallback(activeServicesCountCallback);
void LazyServiceRegistrar::setActiveServicesCallback(const std::function<bool(bool)>&
                                                     activeServicesCallback) {
    mClientCC->setActiveServicesCallback(activeServicesCallback);
}

bool LazyServiceRegistrar::tryUnregister() {
+5 −6
Original line number Diff line number Diff line
@@ -56,10 +56,10 @@ class LazyServiceRegistrar {
     void forcePersist(bool persist);

     /**
      * Set a callback that is executed when the total number of services with
      * clients changes.
      * The callback takes an argument, which is the number of registered
      * lazy services for this process which have clients.
      * Set a callback that is invoked when the active service count (i.e. services with clients)
      * registered with this process drops to zero (or becomes nonzero).
      * The callback takes a boolean argument, which is 'true' if there is
      * at least one service with clients.
      *
      * Callback return value:
      * - false: Default behavior for lazy services (shut down the process if there
@@ -73,8 +73,7 @@ class LazyServiceRegistrar {
      *
      * This method should be called before 'registerService' to avoid races.
      */
     void setActiveServicesCountCallback(const std::function<bool(int)>&
                                         activeServicesCountCallback);
     void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);

    /**
      * Try to unregister all services previously registered with 'registerService'.