From f646be06ed5c37ca8fa7b5b6f446c162e948edd9 Mon Sep 17 00:00:00 2001 From: Peter Kalauskas Date: Mon, 5 Nov 2018 12:05:29 -0800 Subject: [PATCH] Add separate lazy service target to cas Test: Run cts test android.media.cts.MediaCasTest Bug: 119050069 Change-Id: I5117e4d10931affe85f2a0bb437d2fefb291e18f --- cas/1.0/default/Android.bp | 22 ++++++++++--- .../android.hardware.cas@1.0-service-lazy.rc | 9 ++++++ .../android.hardware.cas@1.0-service-lazy.xml | 11 +++++++ cas/1.0/default/service.cpp | 32 ++++++++++++------- 4 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 cas/1.0/default/android.hardware.cas@1.0-service-lazy.rc create mode 100644 cas/1.0/default/android.hardware.cas@1.0-service-lazy.xml diff --git a/cas/1.0/default/Android.bp b/cas/1.0/default/Android.bp index a80c47f6f8..debb3e5bed 100644 --- a/cas/1.0/default/Android.bp +++ b/cas/1.0/default/Android.bp @@ -1,6 +1,5 @@ -cc_binary { - name: "android.hardware.cas@1.0-service", - vintf_fragments: ["android.hardware.cas@1.0-service.xml"], +cc_defaults { + name: "cas_service_defaults", defaults: ["hidl_defaults"], vendor: true, relative_install_path: "hw", @@ -14,7 +13,6 @@ cc_binary { ], compile_multilib: "32", - init_rc: ["android.hardware.cas@1.0-service.rc"], shared_libs: [ "android.hardware.cas@1.0", @@ -32,3 +30,19 @@ cc_binary { "media_plugin_headers", ], } + +cc_binary { + name: "android.hardware.cas@1.0-service", + vintf_fragments: ["android.hardware.cas@1.0-service.xml"], + defaults: ["cas_service_defaults"], + init_rc: ["android.hardware.cas@1.0-service.rc"], +} + +cc_binary { + name: "android.hardware.cas@1.0-service-lazy", + vintf_fragments: ["android.hardware.cas@1.0-service-lazy.xml"], + overrides: ["android.hardware.cas@1.0-service"], + defaults: ["cas_service_defaults"], + init_rc: ["android.hardware.cas@1.0-service-lazy.rc"], + cflags: ["-DLAZY_SERVICE"], +} diff --git a/cas/1.0/default/android.hardware.cas@1.0-service-lazy.rc b/cas/1.0/default/android.hardware.cas@1.0-service-lazy.rc new file mode 100644 index 0000000000..735cfbc392 --- /dev/null +++ b/cas/1.0/default/android.hardware.cas@1.0-service-lazy.rc @@ -0,0 +1,9 @@ +service vendor.cas-hal-1-0 /vendor/bin/hw/android.hardware.cas@1.0-service + interface android.hardware.cas@1.0::IMediaCasService default + oneshot + disabled + class hal + user media + group mediadrm drmrpc + ioprio rt 4 + writepid /dev/cpuset/foreground/tasks diff --git a/cas/1.0/default/android.hardware.cas@1.0-service-lazy.xml b/cas/1.0/default/android.hardware.cas@1.0-service-lazy.xml new file mode 100644 index 0000000000..9b55370f06 --- /dev/null +++ b/cas/1.0/default/android.hardware.cas@1.0-service-lazy.xml @@ -0,0 +1,11 @@ + + + android.hardware.cas + hwbinder + 1.0 + + IMediaCasService + default + + + diff --git a/cas/1.0/default/service.cpp b/cas/1.0/default/service.cpp index 04a8ad9729..2e6e55d1aa 100644 --- a/cas/1.0/default/service.cpp +++ b/cas/1.0/default/service.cpp @@ -15,7 +15,11 @@ */ //#define LOG_NDEBUG 0 +#ifdef LAZY_SERVICE +#define LOG_TAG "android.hardware.cas@1.0-service-lazy" +#else #define LOG_TAG "android.hardware.cas@1.0-service" +#endif #include #include @@ -25,24 +29,30 @@ using android::hardware::configureRpcThreadpool; using android::hardware::joinRpcThreadpool; -using android::hardware::cas::V1_0::implementation::MediaCasService; +using android::hardware::LazyServiceRegistrar; using android::hardware::cas::V1_0::IMediaCasService; +using android::hardware::cas::V1_0::implementation::MediaCasService; + +#ifdef LAZY_SERVICE +const bool kLazyService = true; +#else +const bool kLazyService = false; +#endif int main() { - ALOGD("android.hardware.cas@1.0-service starting..."); - - // The CAS HAL may communicate to other vendor components via - // /dev/vndbinder - android::ProcessState::initWithDriver("/dev/vndbinder"); - configureRpcThreadpool(8, true /* callerWillJoin */); // Setup hwbinder service android::sp service = new MediaCasService(); - android::status_t status = service->registerAsService(); - LOG_ALWAYS_FATAL_IF( - status != android::OK, - "Error while registering cas service: %d", status); + android::status_t status; + if (kLazyService) { + auto serviceRegistrar = std::make_shared(); + status = serviceRegistrar->registerServiceWithCallback(service); + } else { + status = service->registerAsService(); + } + LOG_ALWAYS_FATAL_IF(status != android::OK, "Error while registering cas service: %d", status); + joinRpcThreadpool(); return 0; }