Loading libs/gui/SurfaceComposerClient.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -2177,6 +2177,16 @@ sp<SurfaceControl> SurfaceComposerClient::mirrorSurface(SurfaceControl* mirrorFr return nullptr; } sp<SurfaceControl> SurfaceComposerClient::mirrorDisplay(DisplayId displayId) { gui::MirrorSurfaceResult result; const binder::Status status = mClient->mirrorDisplay(displayId.value, &result); const status_t err = statusTFromBinderStatus(status); if (err == NO_ERROR) { return new SurfaceControl(this, result.handle, result.layerId); } return nullptr; } status_t SurfaceComposerClient::clearLayerFrameStats(const sp<IBinder>& token) const { if (mStatus != NO_ERROR) { return mStatus; Loading libs/gui/aidl/android/gui/ISurfaceComposerClient.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -59,4 +59,6 @@ interface ISurfaceComposerClient { FrameStats getLayerFrameStats(IBinder handle); MirrorSurfaceResult mirrorSurface(IBinder mirrorFromHandle); MirrorSurfaceResult mirrorDisplay(long displayId); } libs/gui/fuzzer/libgui_fuzzer_utils.h +3 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,9 @@ public: MOCK_METHOD(binder::Status, mirrorSurface, (const sp<IBinder>& mirrorFromHandle, gui::MirrorSurfaceResult* outResult), (override)); MOCK_METHOD(binder::Status, mirrorDisplay, (int64_t displayId, gui::MirrorSurfaceResult* outResult), (override)); }; class FakeDisplayEventDispatcher : public DisplayEventDispatcher { Loading libs/gui/include/gui/SurfaceComposerClient.h +2 −0 Original line number Diff line number Diff line Loading @@ -341,6 +341,8 @@ public: // B B' sp<SurfaceControl> mirrorSurface(SurfaceControl* mirrorFromSurface); sp<SurfaceControl> mirrorDisplay(DisplayId displayId); //! Create a virtual display static sp<IBinder> createDisplay(const String8& displayName, bool secure); Loading services/surfaceflinger/Client.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -147,5 +147,20 @@ binder::Status Client::mirrorSurface(const sp<IBinder>& mirrorFromHandle, return binderStatusFromStatusT(status); } binder::Status Client::mirrorDisplay(int64_t displayId, gui::MirrorSurfaceResult* outResult) { sp<IBinder> handle; int32_t layerId; LayerCreationArgs args(mFlinger.get(), sp<Client>::fromExisting(this), "MirrorRoot-" + std::to_string(displayId), 0 /* flags */, gui::LayerMetadata()); std::optional<DisplayId> id = DisplayId::fromValue(static_cast<uint64_t>(displayId)); status_t status = mFlinger->mirrorDisplay(*id, args, &handle, &layerId); if (status == NO_ERROR) { outResult->handle = handle; outResult->layerId = layerId; } return binderStatusFromStatusT(status); } // --------------------------------------------------------------------------- }; // namespace android Loading
libs/gui/SurfaceComposerClient.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -2177,6 +2177,16 @@ sp<SurfaceControl> SurfaceComposerClient::mirrorSurface(SurfaceControl* mirrorFr return nullptr; } sp<SurfaceControl> SurfaceComposerClient::mirrorDisplay(DisplayId displayId) { gui::MirrorSurfaceResult result; const binder::Status status = mClient->mirrorDisplay(displayId.value, &result); const status_t err = statusTFromBinderStatus(status); if (err == NO_ERROR) { return new SurfaceControl(this, result.handle, result.layerId); } return nullptr; } status_t SurfaceComposerClient::clearLayerFrameStats(const sp<IBinder>& token) const { if (mStatus != NO_ERROR) { return mStatus; Loading
libs/gui/aidl/android/gui/ISurfaceComposerClient.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -59,4 +59,6 @@ interface ISurfaceComposerClient { FrameStats getLayerFrameStats(IBinder handle); MirrorSurfaceResult mirrorSurface(IBinder mirrorFromHandle); MirrorSurfaceResult mirrorDisplay(long displayId); }
libs/gui/fuzzer/libgui_fuzzer_utils.h +3 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,9 @@ public: MOCK_METHOD(binder::Status, mirrorSurface, (const sp<IBinder>& mirrorFromHandle, gui::MirrorSurfaceResult* outResult), (override)); MOCK_METHOD(binder::Status, mirrorDisplay, (int64_t displayId, gui::MirrorSurfaceResult* outResult), (override)); }; class FakeDisplayEventDispatcher : public DisplayEventDispatcher { Loading
libs/gui/include/gui/SurfaceComposerClient.h +2 −0 Original line number Diff line number Diff line Loading @@ -341,6 +341,8 @@ public: // B B' sp<SurfaceControl> mirrorSurface(SurfaceControl* mirrorFromSurface); sp<SurfaceControl> mirrorDisplay(DisplayId displayId); //! Create a virtual display static sp<IBinder> createDisplay(const String8& displayName, bool secure); Loading
services/surfaceflinger/Client.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -147,5 +147,20 @@ binder::Status Client::mirrorSurface(const sp<IBinder>& mirrorFromHandle, return binderStatusFromStatusT(status); } binder::Status Client::mirrorDisplay(int64_t displayId, gui::MirrorSurfaceResult* outResult) { sp<IBinder> handle; int32_t layerId; LayerCreationArgs args(mFlinger.get(), sp<Client>::fromExisting(this), "MirrorRoot-" + std::to_string(displayId), 0 /* flags */, gui::LayerMetadata()); std::optional<DisplayId> id = DisplayId::fromValue(static_cast<uint64_t>(displayId)); status_t status = mFlinger->mirrorDisplay(*id, args, &handle, &layerId); if (status == NO_ERROR) { outResult->handle = handle; outResult->layerId = layerId; } return binderStatusFromStatusT(status); } // --------------------------------------------------------------------------- }; // namespace android