diff options
author | 2020-09-22 18:11:45 +0000 | |
---|---|---|
committer | 2020-09-25 12:33:30 +0000 | |
commit | 421dfd5842d44a77883fac7ad2781c363e77aed3 (patch) | |
tree | 6d9773522d0e5cc0777c27804802b434214ee14c | |
parent | 2ec1f7b970563ffd1651c36c52e9fc6831120915 (diff) |
Convert SurfaceControl parceling to SAFE_PARCEL
Test: Existing tests
Change-Id: I7618f9677e538fca90ae5cfb0693e5926701f564
-rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 4 | ||||
-rw-r--r-- | libs/gui/SurfaceControl.cpp | 49 | ||||
-rw-r--r-- | libs/gui/include/gui/SurfaceControl.h | 4 |
3 files changed, 25 insertions, 32 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 3fda059497..0264e17b97 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -431,7 +431,7 @@ status_t SurfaceComposerClient::Transaction::readFromParcel(const Parcel* parcel } for (size_t j = 0; j < numSurfaces; j++) { sp<SurfaceControl> surface; - surface = SurfaceControl::readFromParcel(parcel); + SAFE_PARCEL(SurfaceControl::readFromParcel, *parcel, &surface); listenerCallbacks[listener].surfaceControls.insert(surface); } } @@ -507,7 +507,7 @@ status_t SurfaceComposerClient::Transaction::writeToParcel(Parcel* parcel) const } parcel->writeUint32(static_cast<uint32_t>(callbackInfo.surfaceControls.size())); for (auto surfaceControl : callbackInfo.surfaceControls) { - surfaceControl->writeToParcel(parcel); + SAFE_PARCEL(surfaceControl->writeToParcel, *parcel); } } diff --git a/libs/gui/SurfaceControl.cpp b/libs/gui/SurfaceControl.cpp index 8dcb71bcfc..0246b7315e 100644 --- a/libs/gui/SurfaceControl.cpp +++ b/libs/gui/SurfaceControl.cpp @@ -169,42 +169,35 @@ void SurfaceControl::setTransformHint(uint32_t hint) { mTransformHint = hint; } -void SurfaceControl::writeToParcel(Parcel* parcel) -{ - parcel->writeStrongBinder(ISurfaceComposerClient::asBinder(mClient->getClient())); - parcel->writeStrongBinder(mHandle); - parcel->writeStrongBinder(IGraphicBufferProducer::asBinder(mGraphicBufferProducer)); - parcel->writeUint32(mTransformHint); +status_t SurfaceControl::writeToParcel(Parcel& parcel) { + SAFE_PARCEL(parcel.writeStrongBinder, ISurfaceComposerClient::asBinder(mClient->getClient())); + SAFE_PARCEL(parcel.writeStrongBinder, mHandle); + SAFE_PARCEL(parcel.writeStrongBinder, IGraphicBufferProducer::asBinder(mGraphicBufferProducer)); + SAFE_PARCEL(parcel.writeUint32, mTransformHint); + + return NO_ERROR; } -sp<SurfaceControl> SurfaceControl::readFromParcel(const Parcel* parcel) { - bool invalidParcel = false; - status_t status; +status_t SurfaceControl::readFromParcel(const Parcel& parcel, + sp<SurfaceControl>* outSurfaceControl) { sp<IBinder> client; - if ((status = parcel->readStrongBinder(&client)) != OK) { - ALOGE("Failed to read client: %s", statusToString(status).c_str()); - invalidParcel = true; - } sp<IBinder> handle; - if ((status = parcel->readStrongBinder(&handle)) != OK) { - ALOGE("Failed to read handle: %s", statusToString(status).c_str()); - invalidParcel = true; - } sp<IBinder> gbp; - if ((status = parcel->readNullableStrongBinder(&gbp)) != OK) { - ALOGE("Failed to read gbp: %s", statusToString(status).c_str()); - invalidParcel = true; - } - uint32_t transformHint = parcel->readUint32(); + uint32_t transformHint; + + SAFE_PARCEL(parcel.readStrongBinder, &client); + SAFE_PARCEL(parcel.readStrongBinder, &handle); + SAFE_PARCEL(parcel.readNullableStrongBinder, &gbp); + SAFE_PARCEL(parcel.readUint32, &transformHint); - if (invalidParcel) { - return nullptr; - } // We aren't the original owner of the surface. - return new SurfaceControl(new SurfaceComposerClient( - interface_cast<ISurfaceComposerClient>(client)), - handle.get(), interface_cast<IGraphicBufferProducer>(gbp), + *outSurfaceControl = + new SurfaceControl(new SurfaceComposerClient( + interface_cast<ISurfaceComposerClient>(client)), + handle.get(), interface_cast<IGraphicBufferProducer>(gbp), transformHint); + + return NO_ERROR; } // ---------------------------------------------------------------------------- diff --git a/libs/gui/include/gui/SurfaceControl.h b/libs/gui/include/gui/SurfaceControl.h index ac2bbccfd2..f73a9e2667 100644 --- a/libs/gui/include/gui/SurfaceControl.h +++ b/libs/gui/include/gui/SurfaceControl.h @@ -44,8 +44,8 @@ class SurfaceComposerClient; class SurfaceControl : public RefBase { public: - static sp<SurfaceControl> readFromParcel(const Parcel* parcel); - void writeToParcel(Parcel* parcel); + static status_t readFromParcel(const Parcel& parcel, sp<SurfaceControl>* outSurfaceControl); + status_t writeToParcel(Parcel& parcel); static bool isValid(const sp<SurfaceControl>& surface) { return (surface != nullptr) && surface->isValid(); |