diff options
Diffstat (limited to 'libs/surfaceflinger_client/Surface.cpp')
| -rw-r--r-- | libs/surfaceflinger_client/Surface.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/libs/surfaceflinger_client/Surface.cpp b/libs/surfaceflinger_client/Surface.cpp index 01420fe..6fe4c4a 100644 --- a/libs/surfaceflinger_client/Surface.cpp +++ b/libs/surfaceflinger_client/Surface.cpp @@ -334,13 +334,13 @@ Surface::Surface(const sp<SurfaceControl>& surface) init(); } -Surface::Surface(const Parcel& parcel) +Surface::Surface(const Parcel& parcel, const sp<IBinder>& ref) : mBufferMapper(GraphicBufferMapper::get()), mClient(SurfaceClient::getInstance()), mSharedBufferClient(NULL), mInitCheck(NO_INIT) { - mSurface = interface_cast<ISurface>(parcel.readStrongBinder()); + mSurface = interface_cast<ISurface>(ref); mIdentity = parcel.readInt32(); mWidth = parcel.readInt32(); mHeight = parcel.readInt32(); @@ -349,6 +349,17 @@ Surface::Surface(const Parcel& parcel) init(); } +sp<Surface> Surface::readFromParcel( + const Parcel& data, const sp<Surface>& other) +{ + sp<Surface> result(other); + sp<IBinder> binder(data.readStrongBinder()); + if (other==0 || binder != other->mSurface->asBinder()) { + result = new Surface(data, binder); + } + return result; +} + void Surface::init() { android_native_window_t::setSwapInterval = setSwapInterval; @@ -443,12 +454,6 @@ status_t Surface::validate() const return NO_ERROR; } -bool Surface::isSameSurface(const sp<Surface>& lhs, const sp<Surface>& rhs) { - if (lhs == 0 || rhs == 0) - return false; - return lhs->mSurface->asBinder() == rhs->mSurface->asBinder(); -} - sp<ISurface> Surface::getISurface() const { return mSurface; } |
