Loading libs/gui/ISurfaceComposerClient.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ namespace { // Anonymous enum class Tag : uint32_t { CREATE_SURFACE = IBinder::FIRST_CALL_TRANSACTION, CREATE_WITH_SURFACE_PARENT, CLEAR_LAYER_FRAME_STATS, GET_LAYER_FRAME_STATS, LAST = GET_LAYER_FRAME_STATS, Loading @@ -56,6 +57,18 @@ public: handle, gbp); } status_t createWithSurfaceParent(const String8& name, uint32_t width, uint32_t height, PixelFormat format, uint32_t flags, const sp<IGraphicBufferProducer>& parent, int32_t windowType, int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) override { return callRemote<decltype( &ISurfaceComposerClient::createWithSurfaceParent)>(Tag::CREATE_WITH_SURFACE_PARENT, name, width, height, format, flags, parent, windowType, ownerUid, handle, gbp); } status_t clearLayerFrameStats(const sp<IBinder>& handle) const override { return callRemote<decltype( &ISurfaceComposerClient::clearLayerFrameStats)>(Tag::CLEAR_LAYER_FRAME_STATS, Loading Loading @@ -86,6 +99,8 @@ status_t BnSurfaceComposerClient::onTransact(uint32_t code, const Parcel& data, switch (tag) { case Tag::CREATE_SURFACE: return callLocal(data, reply, &ISurfaceComposerClient::createSurface); case Tag::CREATE_WITH_SURFACE_PARENT: return callLocal(data, reply, &ISurfaceComposerClient::createWithSurfaceParent); case Tag::CLEAR_LAYER_FRAME_STATS: return callLocal(data, reply, &ISurfaceComposerClient::clearLayerFrameStats); case Tag::GET_LAYER_FRAME_STATS: Loading libs/gui/SurfaceComposerClient.cpp +24 −0 Original line number Diff line number Diff line Loading @@ -977,6 +977,29 @@ sp<SurfaceControl> SurfaceComposerClient::createSurface( return s; } sp<SurfaceControl> SurfaceComposerClient::createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, Surface* parent, int32_t windowType, int32_t ownerUid) { sp<SurfaceControl> sur; status_t err = mStatus; if (mStatus == NO_ERROR) { sp<IBinder> handle; sp<IGraphicBufferProducer> parentGbp = parent->getIGraphicBufferProducer(); sp<IGraphicBufferProducer> gbp; err = mClient->createWithSurfaceParent(name, w, h, format, flags, parentGbp, windowType, ownerUid, &handle, &gbp); ALOGE_IF(err, "SurfaceComposerClient::createWithSurfaceParent error %s", strerror(-err)); if (err == NO_ERROR) { return new SurfaceControl(this, handle, gbp, true /* owned */); } } return nullptr; } status_t SurfaceComposerClient::createSurfaceChecked( const String8& name, uint32_t w, Loading Loading @@ -1132,6 +1155,7 @@ status_t SurfaceComposerClient::getDisplayedContentSample(const sp<IBinder>& dis return ComposerService::getComposerService()->getDisplayedContentSample(display, maxFrames, timestamp, outStats); } // ---------------------------------------------------------------------------- status_t ScreenshotClient::capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace, Loading libs/gui/include/gui/ISurfaceComposerClient.h +10 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,16 @@ public: int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) = 0; /* * Requires ACCESS_SURFACE_FLINGER permission */ virtual status_t createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, const sp<IGraphicBufferProducer>& parent, int32_t windowType, int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) = 0; /* * Requires ACCESS_SURFACE_FLINGER permission */ Loading libs/gui/include/gui/SurfaceComposerClient.h +18 −6 Original line number Diff line number Diff line Loading @@ -179,6 +179,18 @@ public: int32_t ownerUid = -1 // UID of the task ); //! Create a surface sp<SurfaceControl> createWithSurfaceParent( const String8& name, // name of the surface uint32_t w, // width in pixel uint32_t h, // height in pixel PixelFormat format, // pixel-format desired uint32_t flags = 0, // usage flags Surface* parent = nullptr, // parent int32_t windowType = -1, // from WindowManager.java (STATUS_BAR, INPUT_METHOD, etc.) int32_t ownerUid = -1 // UID of the task ); //! Create a virtual display static sp<IBinder> createDisplay(const String8& displayName, bool secure); Loading services/surfaceflinger/Client.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,26 @@ status_t Client::createSurface( ownerUid, handle, gbp, &parent); } status_t Client::createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, const sp<IGraphicBufferProducer>& parent, int32_t windowType, int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) { if (mFlinger->authenticateSurfaceTexture(parent) == false) { return BAD_VALUE; } const auto& layer = (static_cast<MonitoredProducer*>(parent.get()))->getLayer(); if (layer == nullptr) { return BAD_VALUE; } sp<IBinder> parentHandle = layer->getHandle(); return createSurface(name, w, h, format, flags, parentHandle, windowType, ownerUid, handle, gbp); } status_t Client::clearLayerFrameStats(const sp<IBinder>& handle) const { sp<Layer> layer = getLayerUser(handle); if (layer == nullptr) { Loading Loading
libs/gui/ISurfaceComposerClient.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ namespace { // Anonymous enum class Tag : uint32_t { CREATE_SURFACE = IBinder::FIRST_CALL_TRANSACTION, CREATE_WITH_SURFACE_PARENT, CLEAR_LAYER_FRAME_STATS, GET_LAYER_FRAME_STATS, LAST = GET_LAYER_FRAME_STATS, Loading @@ -56,6 +57,18 @@ public: handle, gbp); } status_t createWithSurfaceParent(const String8& name, uint32_t width, uint32_t height, PixelFormat format, uint32_t flags, const sp<IGraphicBufferProducer>& parent, int32_t windowType, int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) override { return callRemote<decltype( &ISurfaceComposerClient::createWithSurfaceParent)>(Tag::CREATE_WITH_SURFACE_PARENT, name, width, height, format, flags, parent, windowType, ownerUid, handle, gbp); } status_t clearLayerFrameStats(const sp<IBinder>& handle) const override { return callRemote<decltype( &ISurfaceComposerClient::clearLayerFrameStats)>(Tag::CLEAR_LAYER_FRAME_STATS, Loading Loading @@ -86,6 +99,8 @@ status_t BnSurfaceComposerClient::onTransact(uint32_t code, const Parcel& data, switch (tag) { case Tag::CREATE_SURFACE: return callLocal(data, reply, &ISurfaceComposerClient::createSurface); case Tag::CREATE_WITH_SURFACE_PARENT: return callLocal(data, reply, &ISurfaceComposerClient::createWithSurfaceParent); case Tag::CLEAR_LAYER_FRAME_STATS: return callLocal(data, reply, &ISurfaceComposerClient::clearLayerFrameStats); case Tag::GET_LAYER_FRAME_STATS: Loading
libs/gui/SurfaceComposerClient.cpp +24 −0 Original line number Diff line number Diff line Loading @@ -977,6 +977,29 @@ sp<SurfaceControl> SurfaceComposerClient::createSurface( return s; } sp<SurfaceControl> SurfaceComposerClient::createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, Surface* parent, int32_t windowType, int32_t ownerUid) { sp<SurfaceControl> sur; status_t err = mStatus; if (mStatus == NO_ERROR) { sp<IBinder> handle; sp<IGraphicBufferProducer> parentGbp = parent->getIGraphicBufferProducer(); sp<IGraphicBufferProducer> gbp; err = mClient->createWithSurfaceParent(name, w, h, format, flags, parentGbp, windowType, ownerUid, &handle, &gbp); ALOGE_IF(err, "SurfaceComposerClient::createWithSurfaceParent error %s", strerror(-err)); if (err == NO_ERROR) { return new SurfaceControl(this, handle, gbp, true /* owned */); } } return nullptr; } status_t SurfaceComposerClient::createSurfaceChecked( const String8& name, uint32_t w, Loading Loading @@ -1132,6 +1155,7 @@ status_t SurfaceComposerClient::getDisplayedContentSample(const sp<IBinder>& dis return ComposerService::getComposerService()->getDisplayedContentSample(display, maxFrames, timestamp, outStats); } // ---------------------------------------------------------------------------- status_t ScreenshotClient::capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace, Loading
libs/gui/include/gui/ISurfaceComposerClient.h +10 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,16 @@ public: int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) = 0; /* * Requires ACCESS_SURFACE_FLINGER permission */ virtual status_t createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, const sp<IGraphicBufferProducer>& parent, int32_t windowType, int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) = 0; /* * Requires ACCESS_SURFACE_FLINGER permission */ Loading
libs/gui/include/gui/SurfaceComposerClient.h +18 −6 Original line number Diff line number Diff line Loading @@ -179,6 +179,18 @@ public: int32_t ownerUid = -1 // UID of the task ); //! Create a surface sp<SurfaceControl> createWithSurfaceParent( const String8& name, // name of the surface uint32_t w, // width in pixel uint32_t h, // height in pixel PixelFormat format, // pixel-format desired uint32_t flags = 0, // usage flags Surface* parent = nullptr, // parent int32_t windowType = -1, // from WindowManager.java (STATUS_BAR, INPUT_METHOD, etc.) int32_t ownerUid = -1 // UID of the task ); //! Create a virtual display static sp<IBinder> createDisplay(const String8& displayName, bool secure); Loading
services/surfaceflinger/Client.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,26 @@ status_t Client::createSurface( ownerUid, handle, gbp, &parent); } status_t Client::createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, const sp<IGraphicBufferProducer>& parent, int32_t windowType, int32_t ownerUid, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) { if (mFlinger->authenticateSurfaceTexture(parent) == false) { return BAD_VALUE; } const auto& layer = (static_cast<MonitoredProducer*>(parent.get()))->getLayer(); if (layer == nullptr) { return BAD_VALUE; } sp<IBinder> parentHandle = layer->getHandle(); return createSurface(name, w, h, format, flags, parentHandle, windowType, ownerUid, handle, gbp); } status_t Client::clearLayerFrameStats(const sp<IBinder>& handle) const { sp<Layer> layer = getLayerUser(handle); if (layer == nullptr) { Loading