diff options
author | Narayan Kamath <narayan@google.com> | 2014-06-03 13:58:40 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-06-03 13:58:40 +0000 |
commit | db1972bd8e9b055f2df77d57ac55f1c02ebdd278 (patch) | |
tree | 763f55625627c024b6319296ab58a527cb49df5b /include/input | |
parent | edcf7f4d3ac452500d68e254d367f559d538695d (diff) | |
parent | 26063a9155ddd18d858cea7fac7c1ddf71e1bcb7 (diff) | |
download | frameworks_native-db1972bd8e9b055f2df77d57ac55f1c02ebdd278.zip frameworks_native-db1972bd8e9b055f2df77d57ac55f1c02ebdd278.tar.gz frameworks_native-db1972bd8e9b055f2df77d57ac55f1c02ebdd278.tar.bz2 |
am 26063a91: am f1dd859b: Merge "x86_64: Align uint64_t/int64_t structure member to 8 bytes"
* commit '26063a9155ddd18d858cea7fac7c1ddf71e1bcb7':
x86_64: Align uint64_t/int64_t structure member to 8 bytes
Diffstat (limited to 'include/input')
-rw-r--r-- | include/input/Input.h | 2 | ||||
-rw-r--r-- | include/input/InputTransport.h | 22 |
2 files changed, 16 insertions, 8 deletions
diff --git a/include/input/Input.h b/include/input/Input.h index a4fa317..bba8f1e 100644 --- a/include/input/Input.h +++ b/include/input/Input.h @@ -189,7 +189,7 @@ struct PointerCoords { enum { MAX_AXES = 14 }; // 14 so that sizeof(PointerCoords) == 64 // Bitfield of axes that are present in this structure. - uint64_t bits; + uint64_t bits __attribute__((aligned(8))); // Values of axes that are stored in this structure packed in order by axis id // for each axis that is present in the structure according to 'bits'. diff --git a/include/input/InputTransport.h b/include/input/InputTransport.h index 8ffdfca..e7e383b 100644 --- a/include/input/InputTransport.h +++ b/include/input/InputTransport.h @@ -39,6 +39,9 @@ namespace android { /* * Intermediate representation used to send input events and related signals. + * + * Note that this structure is used for IPCs so its layout must be identical + * on 64 and 32 bit processes. This is tested in StructLayout_test.cpp. */ struct InputMessage { enum { @@ -49,13 +52,17 @@ struct InputMessage { struct Header { uint32_t type; - uint32_t padding; // 8 byte alignment for the body that follows + // We don't need this field in order to align the body below but we + // leave it here because InputMessage::size() and other functions + // compute the size of this structure as sizeof(Header) + sizeof(Body). + uint32_t padding; } header; + // Body *must* be 8 byte aligned. union Body { struct Key { uint32_t seq; - nsecs_t eventTime; + nsecs_t eventTime __attribute__((aligned(8))); int32_t deviceId; int32_t source; int32_t action; @@ -64,7 +71,7 @@ struct InputMessage { int32_t scanCode; int32_t metaState; int32_t repeatCount; - nsecs_t downTime; + nsecs_t downTime __attribute__((aligned(8))); inline size_t size() const { return sizeof(Key); @@ -73,7 +80,7 @@ struct InputMessage { struct Motion { uint32_t seq; - nsecs_t eventTime; + nsecs_t eventTime __attribute__((aligned(8))); int32_t deviceId; int32_t source; int32_t action; @@ -81,13 +88,14 @@ struct InputMessage { int32_t metaState; int32_t buttonState; int32_t edgeFlags; - nsecs_t downTime; + nsecs_t downTime __attribute__((aligned(8))); float xOffset; float yOffset; float xPrecision; float yPrecision; uint32_t pointerCount; - struct Pointer { + // Note that PointerCoords requires 8 byte alignment. + struct Pointer{ PointerProperties properties; PointerCoords coords; } pointers[MAX_POINTERS]; @@ -112,7 +120,7 @@ struct InputMessage { return sizeof(Finished); } } finished; - } body; + } __attribute__((aligned(8))) body; bool isValid(size_t actualSize) const; size_t size() const; |