Merge "Added CellIdentity struct in types.hal"
diff --git a/renderscript/1.0/default/Device.cpp b/renderscript/1.0/default/Device.cpp
index 3aae060..a2b950d 100644
--- a/renderscript/1.0/default/Device.cpp
+++ b/renderscript/1.0/default/Device.cpp
@@ -1,6 +1,9 @@
#include "Context.h"
#include "Device.h"
+#include <android/dlext.h>
+#include <dlfcn.h>
+
namespace android {
namespace hardware {
namespace renderscript {
@@ -39,7 +42,25 @@
static_assert(sizeof(size_t) <= sizeof(uint64_t), "RenderScript HIDL Error: sizeof(size_t) > sizeof(uint64_t)");
const char* filename = "libRS_internal.so";
- void* handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
+ // Try to load libRS_internal.so from the "rs" namespace directly.
+ typedef struct android_namespace_t* (*GetExportedNamespaceFnPtr)(const char*);
+ GetExportedNamespaceFnPtr getExportedNamespace = reinterpret_cast<GetExportedNamespaceFnPtr>(
+ dlsym(RTLD_DEFAULT, "android_get_exported_namespace"));
+ void* handle = nullptr;
+ if (getExportedNamespace != nullptr) {
+ android_namespace_t* rsNamespace = getExportedNamespace("rs");
+ if (rsNamespace != nullptr) {
+ const android_dlextinfo dlextinfo = {
+ .flags = ANDROID_DLEXT_USE_NAMESPACE, .library_namespace = rsNamespace,
+ };
+ handle = android_dlopen_ext(filename, RTLD_LAZY | RTLD_LOCAL, &dlextinfo);
+ }
+ }
+ if (handle == nullptr) {
+ // if there is no "rs" namespace (in case when this HAL impl is loaded
+ // into a vendor process), then use the plain dlopen.
+ handle = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
+ }
dispatchTable dispatchHal = {
.SetNativeLibDir = (SetNativeLibDirFnPtr) nullptr,
diff --git a/tests/baz/1.0/IBase.hal b/tests/baz/1.0/IBase.hal
index 97b2db4..0c1b61f 100644
--- a/tests/baz/1.0/IBase.hal
+++ b/tests/baz/1.0/IBase.hal
@@ -77,6 +77,30 @@
typedef bitfield<BitField> Mask;
+ typedef uint8_t[128] ByteOneDim;
+ typedef uint8_t[8][128] ByteTwoDim;
+ typedef uint8_t[8][16][128] ByteThreeDim;
+
+ typedef bool[128] BooleanOneDim;
+ typedef bool[8][128] BooleanTwoDim;
+ typedef bool[8][16][128] BooleanThreeDim;
+
+ typedef double[128] DoubleOneDim;
+ typedef double[8][128] DoubleTwoDim;
+ typedef double[8][16][128] DoubleThreeDim;
+
+ struct LotsOfPrimitiveArrays {
+ ByteOneDim byte1;
+ ByteTwoDim byte2;
+ ByteThreeDim byte3;
+ BooleanOneDim boolean1;
+ BooleanTwoDim boolean2;
+ BooleanThreeDim boolean3;
+ DoubleOneDim double1;
+ DoubleTwoDim double2;
+ DoubleThreeDim double3;
+ };
+
someBaseMethod();
someBoolMethod(bool x) generates (bool y);
@@ -97,4 +121,9 @@
takeAMask(BitField bf, bitfield<BitField> first, MyMask second, Mask third)
generates (BitField out, uint8_t f, uint8_t s, uint8_t t);
+
+ testArrays(LotsOfPrimitiveArrays in) generates (LotsOfPrimitiveArrays out);
+ testByteVecs(vec<ByteOneDim> in) generates (vec<ByteOneDim> out);
+ testBooleanVecs(vec<BooleanOneDim> in) generates (vec<BooleanOneDim> out);
+ testDoubleVecs(vec<DoubleOneDim> in) generates (vec<DoubleOneDim> out);
};
diff --git a/tests/baz/1.0/default/Baz.cpp b/tests/baz/1.0/default/Baz.cpp
index 875fe65..5ccd87b 100644
--- a/tests/baz/1.0/default/Baz.cpp
+++ b/tests/baz/1.0/default/Baz.cpp
@@ -199,6 +199,34 @@
return Void();
}
+Return<void> Baz::testArrays(
+ const IBase::LotsOfPrimitiveArrays &in,
+ testArrays_cb _hidl_cb) {
+ _hidl_cb(in);
+ return Void();
+}
+
+Return<void> Baz::testByteVecs(
+ const hidl_vec<IBase::ByteOneDim> &in,
+ testByteVecs_cb _hidl_cb) {
+ _hidl_cb(in);
+ return Void();
+}
+
+Return<void> Baz::testBooleanVecs(
+ const hidl_vec<IBase::BooleanOneDim> &in,
+ testBooleanVecs_cb _hidl_cb) {
+ _hidl_cb(in);
+ return Void();
+}
+
+Return<void> Baz::testDoubleVecs(
+ const hidl_vec<IBase::DoubleOneDim> &in,
+ testDoubleVecs_cb _hidl_cb) {
+ _hidl_cb(in);
+ return Void();
+}
+
// Methods from ::android::hardware::tests::baz::V1_0::IBaz follow.
Return<void> Baz::doThis(float param) {
diff --git a/tests/baz/1.0/default/Baz.h b/tests/baz/1.0/default/Baz.h
index ceb3035..4443587 100644
--- a/tests/baz/1.0/default/Baz.h
+++ b/tests/baz/1.0/default/Baz.h
@@ -53,6 +53,22 @@
uint8_t third,
takeAMask_cb _hidl_cb) override;
+ Return<void> testArrays(
+ const IBase::LotsOfPrimitiveArrays &in,
+ testArrays_cb _hidl_cb) override;
+
+ Return<void> testByteVecs(
+ const hidl_vec<IBase::ByteOneDim> &in,
+ testByteVecs_cb _hidl_cb) override;
+
+ Return<void> testBooleanVecs(
+ const hidl_vec<IBase::BooleanOneDim> &in,
+ testBooleanVecs_cb _hidl_cb) override;
+
+ Return<void> testDoubleVecs(
+ const hidl_vec<IBase::DoubleOneDim> &in,
+ testDoubleVecs_cb _hidl_cb) override;
+
// Methods from ::android::hardware::tests::baz::V1_0::IBaz follow.
Return<void> doThis(float param) override;
Return<int32_t> doThatAndReturnSomething(int64_t param) override;