summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/surfaceflinger/Surface.h7
-rw-r--r--libs/surfaceflinger_client/Surface.cpp21
2 files changed, 16 insertions, 12 deletions
diff --git a/include/surfaceflinger/Surface.h b/include/surfaceflinger/Surface.h
index 67dc693..ac01ce5 100644
--- a/include/surfaceflinger/Surface.h
+++ b/include/surfaceflinger/Surface.h
@@ -145,15 +145,13 @@ public:
uint32_t reserved[2];
};
- Surface(const Parcel& data);
+ static sp<Surface> readFromParcel(
+ const Parcel& data, const sp<Surface>& other);
static bool isValid(const sp<Surface>& surface) {
return (surface != 0) && surface->isValid();
}
- static bool isSameSurface(
- const sp<Surface>& lhs, const sp<Surface>& rhs);
-
bool isValid();
SurfaceID ID() const { return mToken; }
uint32_t getFlags() const { return mFlags; }
@@ -191,6 +189,7 @@ private:
Surface(const Surface& rhs);
Surface(const sp<SurfaceControl>& control);
+ Surface(const Parcel& data, const sp<IBinder>& ref);
~Surface();
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;
}