Merge "Use NativeHandle in MQDescriptor instead of ParcelFileDescriptor" am: 1f00c21c28 am: 689e51eb68

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1556319

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I8e7b23dc4dafadb596caceb533fcb2307ce5e3a9
This commit is contained in:
Devin Moore 2021-01-25 19:49:50 +00:00 committed by Automerger Merge Worker
commit 5dd7ba40f1
11 changed files with 62 additions and 32 deletions

View file

@ -9,6 +9,9 @@ aidl_interface {
srcs: [
"android/hardware/common/fmq/*.aidl",
],
imports: [
"android.hardware.common",
],
stability: "vintf",
backend: {
java: {

View file

@ -2,13 +2,14 @@
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
// edit this file. It looks like you are doing that because you have modified
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
// from an interface or a field from a parcelable and it broke the build. That
// breakage is intended.
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible changes to the AIDL files built
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
@ -18,6 +19,7 @@
package android.hardware.common.fmq;
@VintfStability
parcelable GrantorDescriptor {
int fdIndex;
int offset;
long extent;
}

View file

@ -2,13 +2,14 @@
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
// edit this file. It looks like you are doing that because you have modified
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
// from an interface or a field from a parcelable and it broke the build. That
// breakage is intended.
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible changes to the AIDL files built
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
@ -19,7 +20,7 @@ package android.hardware.common.fmq;
@VintfStability
parcelable MQDescriptor {
android.hardware.common.fmq.GrantorDescriptor[] grantors;
ParcelFileDescriptor fileDescriptor;
android.hardware.common.NativeHandle handle;
int quantum;
int flags;
}

View file

@ -2,13 +2,14 @@
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
// edit this file. It looks like you are doing that because you have modified
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
// from an interface or a field from a parcelable and it broke the build. That
// breakage is intended.
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible changes to the AIDL files built
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped

View file

@ -2,13 +2,14 @@
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
// edit this file. It looks like you are doing that because you have modified
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
// from an interface or a field from a parcelable and it broke the build. That
// breakage is intended.
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible changes to the AIDL files built
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped

View file

@ -21,6 +21,10 @@ package android.hardware.common.fmq;
*/
@VintfStability
parcelable GrantorDescriptor {
/*
* Index of file descriptor for this grantor
*/
int fdIndex;
/*
* The offset of this descriptor in the shared memory in bytes.
*/

View file

@ -16,6 +16,7 @@
package android.hardware.common.fmq;
import android.hardware.common.NativeHandle;
import android.hardware.common.fmq.GrantorDescriptor;
/*
@ -34,8 +35,11 @@ parcelable MQDescriptor<T, Flavor> {
* for blocking operations in the shared memory.
*/
GrantorDescriptor[] grantors;
/* File descriptor for shared memory used in the message queue */
ParcelFileDescriptor fileDescriptor;
/*
* NativeHandle that contains the file descriptors for shared memory used
* in the message queue
*/
NativeHandle handle;
/* Size of each item, T, in bytes */
int quantum;
/* EventFlag word for blocking operations */

View file

@ -41,12 +41,15 @@ interface ITestMsgQ {
*
* @param configureFmq The server sets up a new unsynchronized FMQ if
* this parameter is true.
* @param userFd True to initialize the message queue with a user supplied
* file descriptor for the ring buffer.
* False to let the message queue use a single FD for everything.
*
* @return ret True if successful.
* @return mqDesc This structure describes the unsynchronized FMQ that was
* set up by the service. Client can use it to set up the FMQ at its end.
*/
getFmqUnsyncWrite(bool configureFmq) generates(bool ret, fmq_unsync<int32_t> mqDesc);
getFmqUnsyncWrite(bool configureFmq, bool userFd) generates(bool ret, fmq_unsync<int32_t> mqDesc);
/**
* This method request the service to write into the synchronized read/write

View file

@ -91,9 +91,10 @@ cc_test {
// These are static libs only for testing purposes and portability. Shared
// libs should be used on device.
static_libs: [
"android.hardware.common-unstable-ndk_platform",
"android.hardware.common.fmq-unstable-ndk_platform",
"android.hardware.tests.msgq@1.0",
"android.fmq.test-ndk_platform",
"android.hardware.common.fmq-unstable-ndk_platform",
],
whole_static_libs: [
"android.hardware.tests.msgq@1.0-impl",

View file

@ -41,10 +41,19 @@ Return<bool> TestMsgQ::configureFmqSyncReadWrite(
return true;
}
Return<void> TestMsgQ::getFmqUnsyncWrite(bool configureFmq, getFmqUnsyncWrite_cb _hidl_cb) {
Return<void> TestMsgQ::getFmqUnsyncWrite(bool configureFmq, bool userFd,
getFmqUnsyncWrite_cb _hidl_cb) {
if (configureFmq) {
static constexpr size_t kNumElementsInQueue = 1024;
mFmqUnsynchronized.reset(new (std::nothrow) MessageQueueUnsync(kNumElementsInQueue));
static constexpr size_t kElementSizeBytes = sizeof(int32_t);
android::base::unique_fd ringbufferFd;
if (userFd) {
ringbufferFd.reset(
::ashmem_create_region("UnsyncWrite", kNumElementsInQueue * kElementSizeBytes));
}
mFmqUnsynchronized.reset(new (std::nothrow) MessageQueueUnsync(
kNumElementsInQueue, false, std::move(ringbufferFd),
kNumElementsInQueue * kElementSizeBytes));
}
if ((mFmqUnsynchronized == nullptr) ||
(mFmqUnsynchronized->isValid() == false)) {

View file

@ -56,7 +56,8 @@ struct TestMsgQ : public ITestMsgQ {
// Methods from ::android::hardware::tests::msgq::V1_0::ITestMsgQ follow.
Return<bool> configureFmqSyncReadWrite(const MQDescriptorSync<int32_t>& mqDesc) override;
Return<void> getFmqUnsyncWrite(bool configureFmq, getFmqUnsyncWrite_cb _hidl_cb) override;
Return<void> getFmqUnsyncWrite(bool configureFmq, bool userFd,
getFmqUnsyncWrite_cb _hidl_cb) override;
Return<bool> requestWriteFmqSync(int32_t count) override;
Return<bool> requestReadFmqSync(int32_t count) override;
Return<bool> requestWriteFmqUnsync(int32_t count) override;