diff options
author | 2017-02-06 16:34:41 -0800 | |
---|---|---|
committer | 2017-02-08 23:51:42 +0000 | |
commit | e1f5e6fd7ad07778fa4381059852a94567d77dfc (patch) | |
tree | d21543bb6ac6bc38fd6ed4668a8d1a894e7846f1 | |
parent | ebdddc9a3ea71b409f04e0d51eef69682a5542f8 (diff) |
Break dependency of libui on libbinder
the dependency existed only because of
HdrCapabilities, which inherited from
Parcelable, instead of LightFlatenable<>.
An added benefit is that HdrCapabilities isn’t
virtual anymore.
Also, since the dtor is not trivial, move it to
the cpp, to avoid inlining.
Fix-up includes.
Test: built and booted device
Change-Id: Iaf9c4ef9dcc5cb28b29f79d9f7d8f21800223eb8
-rw-r--r-- | include/ui/HdrCapabilities.h | 22 | ||||
-rw-r--r-- | libs/gui/ISurfaceComposer.cpp | 4 | ||||
-rw-r--r-- | libs/ui/Android.bp | 1 | ||||
-rw-r--r-- | libs/ui/HdrCapabilities.cpp | 90 |
4 files changed, 77 insertions, 40 deletions
diff --git a/include/ui/HdrCapabilities.h b/include/ui/HdrCapabilities.h index a7cd5fb58e..925aa1b7b3 100644 --- a/include/ui/HdrCapabilities.h +++ b/include/ui/HdrCapabilities.h @@ -17,11 +17,15 @@ #ifndef ANDROID_UI_HDR_CAPABILTIES_H #define ANDROID_UI_HDR_CAPABILTIES_H -#include <binder/Parcelable.h> +#include <stdint.h> + +#include <vector> + +#include <utils/Flattenable.h> namespace android { -class HdrCapabilities : public Parcelable +class HdrCapabilities : public LightFlattenable<HdrCapabilities> { public: HdrCapabilities(const std::vector<int32_t /*android_hdr_t*/>& types, @@ -32,8 +36,8 @@ public: mMinLuminance(minLuminance) {} // Make this move-constructable and move-assignable - HdrCapabilities(HdrCapabilities&& other) = default; - HdrCapabilities& operator=(HdrCapabilities&& other) = default; + HdrCapabilities(HdrCapabilities&& other); + HdrCapabilities& operator=(HdrCapabilities&& other); HdrCapabilities() : mSupportedHdrTypes(), @@ -41,7 +45,7 @@ public: mMaxAverageLuminance(-1.0f), mMinLuminance(-1.0f) {} - virtual ~HdrCapabilities() = default; + ~HdrCapabilities(); const std::vector<int32_t /*android_hdr_t*/>& getSupportedHdrTypes() const { return mSupportedHdrTypes; @@ -50,9 +54,11 @@ public: float getDesiredMaxAverageLuminance() const { return mMaxAverageLuminance; } float getDesiredMinLuminance() const { return mMinLuminance; } - // Parcelable interface - virtual status_t writeToParcel(Parcel* parcel) const override; - virtual status_t readFromParcel(const Parcel* parcel) override; + // Flattenable protocol + bool isFixedSize() const { return false; } + size_t getFlattenedSize() const; + status_t flatten(void* buffer, size_t size) const; + status_t unflatten(void const* buffer, size_t size); private: std::vector<int32_t /*android_hdr_t*/> mSupportedHdrTypes; diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp index 5a2c3db9df..06d1261feb 100644 --- a/libs/gui/ISurfaceComposer.cpp +++ b/libs/gui/ISurfaceComposer.cpp @@ -432,7 +432,7 @@ public: } result = reply.readInt32(); if (result == NO_ERROR) { - result = reply.readParcelable(outCapabilities); + result = reply.read(*outCapabilities); } return result; } @@ -753,7 +753,7 @@ status_t BnSurfaceComposer::onTransact( result = getHdrCapabilities(display, &capabilities); reply->writeInt32(result); if (result == NO_ERROR) { - reply->writeParcelable(capabilities); + reply->write(capabilities); } return NO_ERROR; } diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp index 67efb8470a..cfe170d47a 100644 --- a/libs/ui/Android.bp +++ b/libs/ui/Android.bp @@ -67,7 +67,6 @@ cc_library_shared { "android.hardware.graphics.allocator@2.0", "android.hardware.graphics.mapper@2.0", "libnativeloader", - "libbinder", "libcutils", "libhardware", "libhidlbase", diff --git a/libs/ui/HdrCapabilities.cpp b/libs/ui/HdrCapabilities.cpp index 511f68ab4c..39adc5e929 100644 --- a/libs/ui/HdrCapabilities.cpp +++ b/libs/ui/HdrCapabilities.cpp @@ -16,44 +16,76 @@ #include <ui/HdrCapabilities.h> -#include <binder/Parcel.h> - namespace android { -status_t HdrCapabilities::writeToParcel(Parcel* parcel) const -{ - status_t result = parcel->writeInt32Vector(mSupportedHdrTypes); - if (result != OK) { - return result; - } - result = parcel->writeFloat(mMaxLuminance); - if (result != OK) { - return result; +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundefined-reinterpret-cast" +#endif + +HdrCapabilities::~HdrCapabilities() = default; +HdrCapabilities::HdrCapabilities(HdrCapabilities&& other) = default; +HdrCapabilities& HdrCapabilities::operator=(HdrCapabilities&& other) = default; + + +size_t HdrCapabilities::getFlattenedSize() const { + return sizeof(mMaxLuminance) + + sizeof(mMaxAverageLuminance) + + sizeof(mMinLuminance) + + sizeof(int32_t) + + mSupportedHdrTypes.size() * sizeof(int32_t); +} + +status_t HdrCapabilities::flatten(void* buffer, size_t size) const { + + if (size < getFlattenedSize()) { + return NO_MEMORY; } - result = parcel->writeFloat(mMaxAverageLuminance); - if (result != OK) { - return result; + + int32_t* const buf = static_cast<int32_t*>(buffer); + reinterpret_cast<float&>(buf[0]) = mMaxLuminance; + reinterpret_cast<float&>(buf[1]) = mMaxAverageLuminance; + reinterpret_cast<float&>(buf[2]) = mMinLuminance; + buf[3] = static_cast<int32_t>(mSupportedHdrTypes.size()); + for (size_t i = 0, c = mSupportedHdrTypes.size(); i < c; ++i) { + buf[4 + i] = mSupportedHdrTypes[i]; } - result = parcel->writeFloat(mMinLuminance); - return result; + return NO_ERROR; } -status_t HdrCapabilities::readFromParcel(const Parcel* parcel) -{ - status_t result = parcel->readInt32Vector(&mSupportedHdrTypes); - if (result != OK) { - return result; +status_t HdrCapabilities::unflatten(void const* buffer, size_t size) { + + size_t minSize = sizeof(mMaxLuminance) + + sizeof(mMaxAverageLuminance) + + sizeof(mMinLuminance) + + sizeof(int32_t); + + if (size < minSize) { + return NO_MEMORY; } - result = parcel->readFloat(&mMaxLuminance); - if (result != OK) { - return result; + + int32_t const * const buf = static_cast<int32_t const *>(buffer); + const size_t itemCount = size_t(buf[3]); + + // check the buffer is large enough + if (size < minSize + itemCount * sizeof(int32_t)) { + return BAD_VALUE; } - result = parcel->readFloat(&mMaxAverageLuminance); - if (result != OK) { - return result; + + mMaxLuminance = reinterpret_cast<float const&>(buf[0]); + mMaxAverageLuminance = reinterpret_cast<float const&>(buf[1]); + mMinLuminance = reinterpret_cast<float const&>(buf[2]); + if (itemCount) { + mSupportedHdrTypes.reserve(itemCount); + for (size_t i = 0; i < itemCount; ++i) { + mSupportedHdrTypes[i] = buf[4 + i]; + } } - result = parcel->readFloat(&mMinLuminance); - return result; + return NO_ERROR; } +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + } // namespace android |