diff options
| author | 2021-12-22 22:57:05 +0000 | |
|---|---|---|
| committer | 2021-12-22 22:57:05 +0000 | |
| commit | 9d8962fcd0b4e2e1bf91533ca4a1bf0cf9442b64 (patch) | |
| tree | 0192dde4b11dbd1597d174bef30d48956c0f2bf6 | |
| parent | 6e8a6be7bf29e7108d3abd701686f2695b6f768f (diff) | |
| parent | cd18a4a6d0429159cad9574351067633cca2ef27 (diff) | |
Merge "libbinder_ndk: AIBinder_setInheritRt" am: cd18a4a6d0
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1921340
Change-Id: Iddf966aba4d59f03dd8fcf0b6a1a358e7353ea68
| -rw-r--r-- | libs/binder/ndk/ibinder.cpp | 9 | ||||
| -rw-r--r-- | libs/binder/ndk/include_platform/android/binder_ibinder_platform.h | 11 | ||||
| -rw-r--r-- | libs/binder/ndk/libbinder_ndk.map.txt | 1 | ||||
| -rw-r--r-- | libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp | 25 |
4 files changed, 46 insertions, 0 deletions
diff --git a/libs/binder/ndk/ibinder.cpp b/libs/binder/ndk/ibinder.cpp index 6949c2c9e5..28e3ff43ff 100644 --- a/libs/binder/ndk/ibinder.cpp +++ b/libs/binder/ndk/ibinder.cpp @@ -799,3 +799,12 @@ AIBinder* AIBinder_fromPlatformBinder(const android::sp<android::IBinder>& binde void AIBinder_setMinSchedulerPolicy(AIBinder* binder, int policy, int priority) { binder->asABBinder()->setMinSchedulerPolicy(policy, priority); } + +void AIBinder_setInheritRt(AIBinder* binder, bool inheritRt) { + ABBinder* localBinder = binder->asABBinder(); + if (localBinder == nullptr) { + LOG(FATAL) << "AIBinder_setInheritRt must be called on a local binder"; + } + + localBinder->setInheritRt(inheritRt); +} diff --git a/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h b/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h index b0217c4efc..0549198285 100644 --- a/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h +++ b/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h @@ -68,4 +68,15 @@ __attribute__((weak, warn_unused_result)) const char* AIBinder_getCallingSid() _ */ void AIBinder_setMinSchedulerPolicy(AIBinder* binder, int policy, int priority) __INTRODUCED_IN(33); +/** + * Allow the binder to inherit realtime scheduling policies from its caller. + * + * This must be called before the object is sent to another process. Not thread + * safe. + * + * \param inheritRt whether to inherit realtime scheduling policies (default is + * false). + */ +void AIBinder_setInheritRt(AIBinder* binder, bool inheritRt) __INTRODUCED_IN(33); + __END_DECLS diff --git a/libs/binder/ndk/libbinder_ndk.map.txt b/libs/binder/ndk/libbinder_ndk.map.txt index 197c0a1db0..3824a1b44c 100644 --- a/libs/binder/ndk/libbinder_ndk.map.txt +++ b/libs/binder/ndk/libbinder_ndk.map.txt @@ -146,6 +146,7 @@ LIBBINDER_NDK33 { # introduced=33 AIBinder_Class_disableInterfaceTokenHeader; AIBinder_DeathRecipient_setOnUnlinked; AIBinder_isHandlingTransaction; + AIBinder_setInheritRt; # llndk AIBinder_setMinSchedulerPolicy; # llndk AParcel_marshal; AParcel_unmarshal; diff --git a/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp b/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp index 499f88eb0f..58fa13afe5 100644 --- a/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp +++ b/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp @@ -505,6 +505,31 @@ class MyTestFoo : public IFoo { } }; +TEST(NdkBinder, SetInheritRt) { + // functional test in binderLibTest + sp<IFoo> foo = sp<MyTestFoo>::make(); + AIBinder* binder = foo->getBinder(); + + // does not abort + AIBinder_setInheritRt(binder, true); + AIBinder_setInheritRt(binder, false); + AIBinder_setInheritRt(binder, true); + + AIBinder_decStrong(binder); +} + +TEST(NdkBinder, SetInheritRtNonLocal) { + AIBinder* binder = AServiceManager_getService(kExistingNonNdkService); + ASSERT_NE(binder, nullptr); + + ASSERT_TRUE(AIBinder_isRemote(binder)); + + EXPECT_DEATH(AIBinder_setInheritRt(binder, true), ""); + EXPECT_DEATH(AIBinder_setInheritRt(binder, false), ""); + + AIBinder_decStrong(binder); +} + TEST(NdkBinder, AddNullService) { EXPECT_EQ(EX_ILLEGAL_ARGUMENT, AServiceManager_addService(nullptr, "any-service-name")); } |