libmediadrm: cleanup exception log spam
Included in this change:
* Only log highest HAL version for each scheme
* Make factory vector static so HALs are only enumerated once
Bug: 162255728
Test: MediaDrmTest#testExceptionMessage
Change-Id: I79ee7a58d605a11046fdfad816decedc559a39d6
diff --git a/drm/libmediadrm/DrmUtils.cpp b/drm/libmediadrm/DrmUtils.cpp
index f7e6717..c83fe04 100644
--- a/drm/libmediadrm/DrmUtils.cpp
+++ b/drm/libmediadrm/DrmUtils.cpp
@@ -43,6 +43,9 @@
#include <mediadrm/ICrypto.h>
#include <mediadrm/IDrm.h>
+#include <map>
+#include <string>
+
using HServiceManager = ::android::hidl::manager::V1_2::IServiceManager;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_string;
@@ -66,8 +69,8 @@
return obj;
}
-template <typename Hal, typename V>
-void MakeHidlFactories(const uint8_t uuid[16], V &factories) {
+template <typename Hal, typename V, typename M>
+void MakeHidlFactories(const uint8_t uuid[16], V &factories, M& instances) {
sp<HServiceManager> serviceManager = HServiceManager::getService();
if (serviceManager == nullptr) {
LOG2BE("Failed to get service manager");
@@ -78,7 +81,7 @@
for (const auto &instance : registered) {
auto factory = Hal::getService(instance);
if (factory != nullptr) {
- LOG2BI("found %s %s", Hal::descriptor, instance.c_str());
+ instances[instance.c_str()] = Hal::descriptor;
if (!uuid || factory->isCryptoSchemeSupported(uuid)) {
factories.push_back(factory);
}
@@ -87,6 +90,12 @@
});
}
+template <typename Hal, typename V>
+void MakeHidlFactories(const uint8_t uuid[16], V &factories) {
+ std::map<std::string, std::string> instances;
+ MakeHidlFactories<Hal>(uuid, factories, instances);
+}
+
hidl_vec<uint8_t> toHidlVec(const void *ptr, size_t size) {
hidl_vec<uint8_t> vec(size);
if (ptr != nullptr) {
@@ -147,11 +156,15 @@
std::vector<sp<::V1_0::IDrmFactory>> MakeDrmFactories(const uint8_t uuid[16]) {
std::vector<sp<::V1_0::IDrmFactory>> drmFactories;
- MakeHidlFactories<::V1_0::IDrmFactory>(uuid, drmFactories);
- MakeHidlFactories<::V1_1::IDrmFactory>(uuid, drmFactories);
- MakeHidlFactories<::V1_2::IDrmFactory>(uuid, drmFactories);
- MakeHidlFactories<::V1_3::IDrmFactory>(uuid, drmFactories);
- MakeHidlFactories<::V1_4::IDrmFactory>(uuid, drmFactories);
+ std::map<std::string, std::string> instances;
+ MakeHidlFactories<::V1_0::IDrmFactory>(uuid, drmFactories, instances);
+ MakeHidlFactories<::V1_1::IDrmFactory>(uuid, drmFactories, instances);
+ MakeHidlFactories<::V1_2::IDrmFactory>(uuid, drmFactories, instances);
+ MakeHidlFactories<::V1_3::IDrmFactory>(uuid, drmFactories, instances);
+ MakeHidlFactories<::V1_4::IDrmFactory>(uuid, drmFactories, instances);
+ for (auto const& entry : instances) {
+ LOG2BI("found instance=%s version=%s", entry.first.c_str(), entry.second.c_str());
+ }
return drmFactories;
}