OSDN Git Service

Support binderized and passthrough vendor services
authorJeff Tinker <jtinker@google.com>
Sat, 8 Apr 2017 00:41:49 +0000 (17:41 -0700)
committerJeff Tinker <jtinker@google.com>
Sat, 8 Apr 2017 00:41:49 +0000 (17:41 -0700)
Previously only the vendor service name was used
to get the drm and crypto services, which would work
either for binderized or passthrough devices, but not
both. With this change, the vendor service name is
tried first, and failing that the default passthrough
service is used.

Change-Id: I05e9552da992e8d9dbba0f8dde485406262410a9
related-to-bug:34178477
Test: drm vts test

drm/1.0/vts/functional/drm_hal_vendor_test.cpp

index 7448c42..c8a5c59 100644 (file)
@@ -76,6 +76,7 @@ using std::vector;
 
 using ContentConfiguration = ::DrmHalVTSVendorModule_V1::ContentConfiguration;
 using Key = ::DrmHalVTSVendorModule_V1::ContentConfiguration::Key;
+using VtsTestBase = ::testing::VtsHalHidlTargetTestBase;
 
 #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
 #define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
@@ -104,14 +105,22 @@ class DrmHalVendorFactoryTest : public testing::TestWithParam<std::string> {
               GetParam().c_str());
 
         ASSERT_NE(vendorModule, nullptr);
+
+        // First try the binderized service name provided by the vendor module.
+        // If that fails, which it can on non-binderized devices, try the default
+        // service.
         string name = vendorModule->getServiceName();
-        drmFactory =
-                ::testing::VtsHalHidlTargetTestBase::getService<IDrmFactory>(
-                        name != "default" ? name : "drm");
+        drmFactory = VtsTestBase::getService<IDrmFactory>(name);
+        if (drmFactory == nullptr) {
+            drmFactory = VtsTestBase::getService<IDrmFactory>("drm");
+        }
         ASSERT_NE(drmFactory, nullptr);
-        cryptoFactory =
-                ::testing::VtsHalHidlTargetTestBase::getService<ICryptoFactory>(
-                        name != "default" ? name : "crypto");
+
+        // Dot the same for the crypto factory
+        cryptoFactory = VtsTestBase::getService<ICryptoFactory>(name);
+        if (cryptoFactory == nullptr) {
+            VtsTestBase::getService<ICryptoFactory>("crypto");
+        }
         ASSERT_NE(cryptoFactory, nullptr);
     }