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

Commit 42407bc5 authored by Devin Moore's avatar Devin Moore
Browse files

Add additional instance info to log

When an instance can't be found, we now log the available instances.
This can help debugging when the instance name is misspelled or the
manifest fragment file wasn't included.

Test: launch_cvd && and logcat | grep "Could not find"
Test: atest servicemanager_test
Bug: 302147119
Change-Id: Iad85903d82bbd45c012b007ba1fcf059c5cd5c4a
parent e3e03441
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android-base/strings.h>
#include <binder/BpBinder.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
@@ -112,10 +113,26 @@ static bool isVintfDeclared(const std::string& name) {
    });

    if (!found) {
        std::set<std::string> instances;
        forEachManifest([&](const ManifestWithDescription& mwd) {
            std::set<std::string> res = mwd.manifest->getAidlInstances(aname.package, aname.iface);
            instances.insert(res.begin(), res.end());
            return true;
        });

        std::string available;
        if (instances.empty()) {
            available = "No alternative instances declared in VINTF";
        } else {
            // for logging only. We can't return this information to the client
            // because they may not have permissions to find or list those
            // instances
            available = "VINTF declared instances: " + base::Join(instances, ", ");
        }
        // Although it is tested, explicitly rebuilding qualified name, in case it
        // becomes something unexpected.
        ALOGI("Could not find %s.%s/%s in the VINTF manifest.", aname.package.c_str(),
              aname.iface.c_str(), aname.instance.c_str());
        ALOGI("Could not find %s.%s/%s in the VINTF manifest. %s.", aname.package.c_str(),
              aname.iface.c_str(), aname.instance.c_str(), available.c_str());
    }

    return found;