diff options
author | 2016-10-05 19:05:35 +0000 | |
---|---|---|
committer | 2016-10-05 19:05:35 +0000 | |
commit | 077f38caaf921e394d6819fff4e574c5a07fe4a3 (patch) | |
tree | 19635efb562d93ff7741f720153d1581fe5a2f26 | |
parent | a9c14d9e9048bc2f0d3290055f82f27144a6d1a7 (diff) | |
parent | ee45b938e8a45f125a062b73d7111d636141ad68 (diff) |
Merge "Fix anonymous struct and union warnings" am: 87e72cb237 am: a3ac6c2b86 am: 86eff80c19
am: ee45b938e8
Change-Id: I3580bd93dca6c863a11435c0fc4fa5bf25f51067
-rw-r--r-- | include/gui/BufferItem.h | 16 | ||||
-rw-r--r-- | libs/gui/Android.mk | 3 | ||||
-rw-r--r-- | libs/gui/BufferItem.cpp | 44 |
3 files changed, 37 insertions, 26 deletions
diff --git a/include/gui/BufferItem.h b/include/gui/BufferItem.h index 3ab63d0632..5232d0f69e 100644 --- a/include/gui/BufferItem.h +++ b/include/gui/BufferItem.h @@ -74,13 +74,7 @@ class BufferItem : public Flattenable<BufferItem> { // to set by queueBuffer each time this slot is queued. This value // is guaranteed to be monotonically increasing for each newly // acquired buffer. - union { - int64_t mTimestamp; - struct { - uint32_t mTimestampLo; - uint32_t mTimestampHi; - }; - }; + int64_t mTimestamp; // mIsAutoTimestamp indicates whether mTimestamp was generated // automatically when the buffer was queued. @@ -92,13 +86,7 @@ class BufferItem : public Flattenable<BufferItem> { android_dataspace mDataSpace; // mFrameNumber is the number of the queued frame for this slot. - union { - uint64_t mFrameNumber; - struct { - uint32_t mFrameNumberLo; - uint32_t mFrameNumberHi; - }; - }; + uint64_t mFrameNumber; // mSlot is the slot index of this buffer (default INVALID_BUFFER_SLOT). int mSlot; diff --git a/libs/gui/Android.mk b/libs/gui/Android.mk index f5961cfa51..71b5ccae46 100644 --- a/libs/gui/Android.mk +++ b/libs/gui/Android.mk @@ -36,6 +36,9 @@ LOCAL_CPPFLAGS += -Wno-gnu-zero-variadic-macro-arguments # Don't warn about struct padding LOCAL_CPPFLAGS += -Wno-padded +# android/sensors.h uses nested anonymous unions and anonymous structs +LOCAL_CPPFLAGS += -Wno-nested-anon-types -Wno-gnu-anonymous-struct + LOCAL_CPPFLAGS += -DDEBUG_ONLY_CODE=$(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)),1,0) LOCAL_SRC_FILES := \ diff --git a/libs/gui/BufferItem.cpp b/libs/gui/BufferItem.cpp index 2ffeb0d333..669124e33e 100644 --- a/libs/gui/BufferItem.cpp +++ b/libs/gui/BufferItem.cpp @@ -23,6 +23,21 @@ namespace android { +template<typename T> +static inline constexpr uint32_t low32(const T n) { + return static_cast<uint32_t>(static_cast<uint64_t>(n)); +} + +template<typename T> +static inline constexpr uint32_t high32(const T n) { + return static_cast<uint32_t>(static_cast<uint64_t>(n)>>32); +} + +template<typename T> +static inline constexpr T to64(const uint32_t lo, const uint32_t hi) { + return static_cast<T>(static_cast<uint64_t>(hi)<<32 | lo); +} + BufferItem::BufferItem() : mGraphicBuffer(NULL), mFence(NULL), @@ -56,12 +71,12 @@ size_t BufferItem::getPodSize() const { addAligned(size, mCrop); addAligned(size, mTransform); addAligned(size, mScalingMode); - addAligned(size, mTimestampLo); - addAligned(size, mTimestampHi); + addAligned(size, low32(mTimestamp)); + addAligned(size, high32(mTimestamp)); addAligned(size, mIsAutoTimestamp); addAligned(size, mDataSpace); - addAligned(size, mFrameNumberLo); - addAligned(size, mFrameNumberHi); + addAligned(size, low32(mFrameNumber)); + addAligned(size, high32(mFrameNumber)); addAligned(size, mSlot); addAligned(size, mIsDroppable); addAligned(size, mAcquireCalled); @@ -144,12 +159,12 @@ status_t BufferItem::flatten( writeAligned(buffer, size, mCrop); writeAligned(buffer, size, mTransform); writeAligned(buffer, size, mScalingMode); - writeAligned(buffer, size, mTimestampLo); - writeAligned(buffer, size, mTimestampHi); + writeAligned(buffer, size, low32(mTimestamp)); + writeAligned(buffer, size, high32(mTimestamp)); writeAligned(buffer, size, mIsAutoTimestamp); writeAligned(buffer, size, mDataSpace); - writeAligned(buffer, size, mFrameNumberLo); - writeAligned(buffer, size, mFrameNumberHi); + writeAligned(buffer, size, low32(mFrameNumber)); + writeAligned(buffer, size, high32(mFrameNumber)); writeAligned(buffer, size, mSlot); writeAligned(buffer, size, mIsDroppable); writeAligned(buffer, size, mAcquireCalled); @@ -200,15 +215,20 @@ status_t BufferItem::unflatten( return NO_MEMORY; } + uint32_t timestampLo = 0, timestampHi = 0; + uint32_t frameNumberLo = 0, frameNumberHi = 0; + readAligned(buffer, size, mCrop); readAligned(buffer, size, mTransform); readAligned(buffer, size, mScalingMode); - readAligned(buffer, size, mTimestampLo); - readAligned(buffer, size, mTimestampHi); + readAligned(buffer, size, timestampLo); + readAligned(buffer, size, timestampHi); + mTimestamp = to64<int64_t>(timestampLo, timestampHi); readAligned(buffer, size, mIsAutoTimestamp); readAligned(buffer, size, mDataSpace); - readAligned(buffer, size, mFrameNumberLo); - readAligned(buffer, size, mFrameNumberHi); + readAligned(buffer, size, frameNumberLo); + readAligned(buffer, size, frameNumberHi); + mFrameNumber = to64<uint64_t>(frameNumberLo, frameNumberHi); readAligned(buffer, size, mSlot); readAligned(buffer, size, mIsDroppable); readAligned(buffer, size, mAcquireCalled); |