diff options
-rw-r--r-- | core/java/android/view/Surface.java | 15 | ||||
-rw-r--r-- | core/jni/android_view_Surface.cpp | 16 | ||||
-rw-r--r-- | include/surfaceflinger/ISurfaceFlingerClient.h | 1 | ||||
-rw-r--r-- | include/surfaceflinger/SurfaceComposerClient.h | 11 | ||||
-rw-r--r-- | libs/surfaceflinger/LayerBase.cpp | 8 | ||||
-rw-r--r-- | libs/surfaceflinger/LayerBase.h | 4 | ||||
-rw-r--r-- | libs/surfaceflinger/SurfaceFlinger.cpp | 13 | ||||
-rw-r--r-- | libs/surfaceflinger/SurfaceFlinger.h | 4 | ||||
-rw-r--r-- | libs/surfaceflinger_client/ISurfaceFlingerClient.cpp | 6 | ||||
-rw-r--r-- | libs/surfaceflinger_client/SurfaceComposerClient.cpp | 22 | ||||
-rw-r--r-- | services/java/com/android/server/WindowManagerService.java | 7 |
11 files changed, 93 insertions, 14 deletions
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index b85667b..183fce3 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -182,7 +182,18 @@ public class Surface implements Parcelable { int pid, int display, int w, int h, int format, int flags) throws OutOfResourcesException { mCanvas = new CompatibleCanvas(); - init(s,pid,display,w,h,format,flags); + init(s,pid,null,display,w,h,format,flags); + } + + /** + * create a surface with a name + * {@hide} + */ + public Surface(SurfaceSession s, + int pid, String name, int display, int w, int h, int format, int flags) + throws OutOfResourcesException { + mCanvas = new CompatibleCanvas(); + init(s,pid,name,display,w,h,format,flags); } /** @@ -400,7 +411,7 @@ public class Surface implements Parcelable { } private native void init(SurfaceSession s, - int pid, int display, int w, int h, int format, int flags) + int pid, String name, int display, int w, int h, int format, int flags) throws OutOfResourcesException; private native void init(Parcel source); diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 723205a..060ca50 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -185,7 +185,8 @@ static void setSurface(JNIEnv* env, jobject clazz, const sp<Surface>& surface) static void Surface_init( JNIEnv* env, jobject clazz, - jobject session, jint pid, jint dpy, jint w, jint h, jint format, jint flags) + jobject session, + jint pid, jstring jname, jint dpy, jint w, jint h, jint format, jint flags) { if (session == NULL) { doThrow(env, "java/lang/NullPointerException"); @@ -195,7 +196,16 @@ static void Surface_init( SurfaceComposerClient* client = (SurfaceComposerClient*)env->GetIntField(session, sso.client); - sp<SurfaceControl> surface(client->createSurface(pid, dpy, w, h, format, flags)); + sp<SurfaceControl> surface; + if (jname == NULL) { + surface = client->createSurface(pid, dpy, w, h, format, flags); + } else { + const jchar* str = env->GetStringCritical(jname, 0); + const String8 name(str, env->GetStringLength(jname)); + env->ReleaseStringCritical(jname, str); + surface = client->createSurface(pid, name, dpy, w, h, format, flags); + } + if (surface == 0) { doThrow(env, OutOfResourcesException); return; @@ -620,7 +630,7 @@ static JNINativeMethod gSurfaceSessionMethods[] = { static JNINativeMethod gSurfaceMethods[] = { {"nativeClassInit", "()V", (void*)nativeClassInit }, - {"init", "(Landroid/view/SurfaceSession;IIIIII)V", (void*)Surface_init }, + {"init", "(Landroid/view/SurfaceSession;ILjava/lang/String;IIIII)V", (void*)Surface_init }, {"init", "(Landroid/os/Parcel;)V", (void*)Surface_initParcel }, {"destroy", "()V", (void*)Surface_destroy }, {"release", "()V", (void*)Surface_release }, diff --git a/include/surfaceflinger/ISurfaceFlingerClient.h b/include/surfaceflinger/ISurfaceFlingerClient.h index 1fba162..d257645 100644 --- a/include/surfaceflinger/ISurfaceFlingerClient.h +++ b/include/surfaceflinger/ISurfaceFlingerClient.h @@ -61,6 +61,7 @@ public: virtual sp<ISurface> createSurface( surface_data_t* data, int pid, + const String8& name, DisplayID display, uint32_t w, uint32_t h, diff --git a/include/surfaceflinger/SurfaceComposerClient.h b/include/surfaceflinger/SurfaceComposerClient.h index 49e83c0..9d0f0cb 100644 --- a/include/surfaceflinger/SurfaceComposerClient.h +++ b/include/surfaceflinger/SurfaceComposerClient.h @@ -65,6 +65,7 @@ public: //! Create a surface sp<SurfaceControl> createSurface( int pid, // pid of the process the surface is for + const String8& name,// name of the surface DisplayID display, // Display to create this surface on uint32_t w, // width in pixel uint32_t h, // height in pixel @@ -72,6 +73,16 @@ public: uint32_t flags = 0 // usage flags ); + sp<SurfaceControl> createSurface( + int pid, // pid of the process the surface is for + DisplayID display, // Display to create this surface on + uint32_t w, // width in pixel + uint32_t h, // height in pixel + PixelFormat format, // pixel-format desired + uint32_t flags = 0 // usage flags + ); + + // ------------------------------------------------------------------------ // Composer parameters // All composer parameters must be changed within a transaction diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp index a3d293f..b0109ca 100644 --- a/libs/surfaceflinger/LayerBase.cpp +++ b/libs/surfaceflinger/LayerBase.cpp @@ -728,6 +728,14 @@ LayerBaseClient::~LayerBaseClient() delete lcblk; } +void LayerBaseClient::setName(const String8& name) { + mName = name; +} + +String8 LayerBaseClient::getName() const { + return mName; +} + int32_t LayerBaseClient::serverIndex() const { sp<Client> client(this->client.promote()); diff --git a/libs/surfaceflinger/LayerBase.h b/libs/surfaceflinger/LayerBase.h index 6aacd82..7ac8bc5 100644 --- a/libs/surfaceflinger/LayerBase.h +++ b/libs/surfaceflinger/LayerBase.h @@ -320,6 +320,8 @@ public: const sp<Client>& client, int32_t i); virtual ~LayerBaseClient(); virtual void onFirstRef(); + void setName(const String8& name); + String8 getName() const; const wp<Client> client; @@ -333,6 +335,7 @@ public: virtual void onRemoved(); + class Surface : public BnSurface { public: @@ -371,6 +374,7 @@ private: mutable Mutex mLock; mutable wp<Surface> mClientSurface; // only read + String8 mName; const uint32_t mIdentity; static int32_t sIdentity; }; diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp index 4555b3c..66ac4d2 100644 --- a/libs/surfaceflinger/SurfaceFlinger.cpp +++ b/libs/surfaceflinger/SurfaceFlinger.cpp @@ -1186,7 +1186,7 @@ int SurfaceFlinger::setOrientation(DisplayID dpy, } sp<ISurface> SurfaceFlinger::createSurface(ClientID clientId, int pid, - ISurfaceFlingerClient::surface_data_t* params, + const String8& name, ISurfaceFlingerClient::surface_data_t* params, DisplayID d, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags) { @@ -1232,6 +1232,7 @@ sp<ISurface> SurfaceFlinger::createSurface(ClientID clientId, int pid, } if (layer != 0) { + layer->setName(name); setTransactionFlags(eTransactionNeeded); surfaceHandle = layer->getSurface(); if (surfaceHandle != 0) { @@ -1506,8 +1507,10 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) if (lbc != 0) { sp<Client> client(lbc->client.promote()); snprintf(buffer, SIZE, - " " - "id=0x%08x, client=0x%08x, identity=%u\n", + " name=%s\n", lbc->getName().string()); + result.append(buffer); + snprintf(buffer, SIZE, + " id=0x%08x, client=0x%08x, identity=%u\n", lbc->clientIndex(), client.get() ? client->cid : 0, lbc->getIdentity()); @@ -1760,10 +1763,12 @@ sp<IMemoryHeap> BClient::getControlBlock() const { sp<ISurface> BClient::createSurface( ISurfaceFlingerClient::surface_data_t* params, int pid, + const String8& name, DisplayID display, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags) { - return mFlinger->createSurface(mId, pid, params, display, w, h, format, flags); + return mFlinger->createSurface(mId, pid, name, params, display, w, h, + format, flags); } status_t BClient::destroySurface(SurfaceID sid) diff --git a/libs/surfaceflinger/SurfaceFlinger.h b/libs/surfaceflinger/SurfaceFlinger.h index 4520c0e..d75dc15 100644 --- a/libs/surfaceflinger/SurfaceFlinger.h +++ b/libs/surfaceflinger/SurfaceFlinger.h @@ -189,7 +189,7 @@ private: friend class LayerBlur; friend class LayerDim; - sp<ISurface> createSurface(ClientID client, int pid, + sp<ISurface> createSurface(ClientID client, int pid, const String8& name, ISurfaceFlingerClient::surface_data_t* params, DisplayID display, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags); @@ -401,7 +401,7 @@ public: virtual sp<IMemoryHeap> getControlBlock() const; virtual sp<ISurface> createSurface( - surface_data_t* params, int pid, + surface_data_t* params, int pid, const String8& name, DisplayID display, uint32_t w, uint32_t h,PixelFormat format, uint32_t flags); diff --git a/libs/surfaceflinger_client/ISurfaceFlingerClient.cpp b/libs/surfaceflinger_client/ISurfaceFlingerClient.cpp index e636c52..def96d7 100644 --- a/libs/surfaceflinger_client/ISurfaceFlingerClient.cpp +++ b/libs/surfaceflinger_client/ISurfaceFlingerClient.cpp @@ -74,6 +74,7 @@ public: virtual sp<ISurface> createSurface( surface_data_t* params, int pid, + const String8& name, DisplayID display, uint32_t w, uint32_t h, @@ -83,6 +84,7 @@ public: Parcel data, reply; data.writeInterfaceToken(ISurfaceFlingerClient::getInterfaceDescriptor()); data.writeInt32(pid); + data.writeString8(name); data.writeInt32(display); data.writeInt32(w); data.writeInt32(h); @@ -154,12 +156,14 @@ status_t BnSurfaceFlingerClient::onTransact( CHECK_INTERFACE(ISurfaceFlingerClient, data, reply); surface_data_t params; int32_t pid = data.readInt32(); + String8 name = data.readString8(); DisplayID display = data.readInt32(); uint32_t w = data.readInt32(); uint32_t h = data.readInt32(); PixelFormat format = data.readInt32(); uint32_t flags = data.readInt32(); - sp<ISurface> s = createSurface(¶ms, pid, display, w, h, format, flags); + sp<ISurface> s = createSurface(¶ms, pid, name, display, w, h, + format, flags); params.writeToParcel(reply); reply->writeStrongBinder(s->asBinder()); return NO_ERROR; diff --git a/libs/surfaceflinger_client/SurfaceComposerClient.cpp b/libs/surfaceflinger_client/SurfaceComposerClient.cpp index 0b5e504..3117495 100644 --- a/libs/surfaceflinger_client/SurfaceComposerClient.cpp +++ b/libs/surfaceflinger_client/SurfaceComposerClient.cpp @@ -319,10 +319,30 @@ sp<SurfaceControl> SurfaceComposerClient::createSurface( PixelFormat format, uint32_t flags) { + String8 name; + const size_t SIZE = 128; + char buffer[SIZE]; + snprintf(buffer, SIZE, "<pid_%d>", getpid()); + name.append(buffer); + + return SurfaceComposerClient::createSurface(pid, name, display, + w, h, format, flags); + +} + +sp<SurfaceControl> SurfaceComposerClient::createSurface( + int pid, + const String8& name, + DisplayID display, + uint32_t w, + uint32_t h, + PixelFormat format, + uint32_t flags) +{ sp<SurfaceControl> result; if (mStatus == NO_ERROR) { ISurfaceFlingerClient::surface_data_t data; - sp<ISurface> surface = mClient->createSurface(&data, pid, + sp<ISurface> surface = mClient->createSurface(&data, pid, name, display, w, h, format, flags); if (surface != 0) { if (uint32_t(data.token) < NUM_LAYERS_MAX) { diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index a75e05d..ba1efb9 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -7292,6 +7292,7 @@ public class WindowManagerService extends IWindowManager.Stub try { mSurface = new Surface( mSession.mSurfaceSession, mSession.mPid, + mAttrs.getTitle().toString(), 0, w, h, mAttrs.format, flags); if (SHOW_TRANSACTIONS) Slog.i(TAG, " CREATE SURFACE " + mSurface + " IN SESSION " @@ -10248,6 +10249,7 @@ public class WindowManagerService extends IWindowManager.Stub if (mBackgroundFillerSurface == null) { try { mBackgroundFillerSurface = new Surface(mFxSession, 0, + "BackGroundFiller", 0, dw, dh, PixelFormat.OPAQUE, Surface.FX_SURFACE_NORMAL); @@ -10294,6 +10296,7 @@ public class WindowManagerService extends IWindowManager.Stub + mBlurSurface + ": CREATE"); try { mBlurSurface = new Surface(mFxSession, 0, + "BlurSurface", -1, 16, 16, PixelFormat.OPAQUE, Surface.FX_SURFACE_BLUR); @@ -11073,7 +11076,9 @@ public class WindowManagerService extends IWindowManager.Stub if (SHOW_TRANSACTIONS) Slog.i(TAG, " DIM " + mDimSurface + ": CREATE"); try { - mDimSurface = new Surface(session, 0, -1, 16, 16, PixelFormat.OPAQUE, + mDimSurface = new Surface(session, 0, + "DimSurface", + -1, 16, 16, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); } catch (Exception e) { Slog.e(TAG, "Exception creating Dim surface", e); |