Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5107dd3 authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Android (Google) Code Review
Browse files

Merge "Provide function to mirror display for screenrecord."

parents 988b9ba0 7043a7df
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -59,4 +59,6 @@ interface ISurfaceComposerClient {
    FrameStats getLayerFrameStats(IBinder handle);

    MirrorSurfaceResult mirrorSurface(IBinder mirrorFromHandle);

    MirrorSurfaceResult mirrorDisplay(long displayId);
}
+3 −0
Original line number Diff line number Diff line
@@ -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 {
+2 −0
Original line number Diff line number Diff line
@@ -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);

+15 −0
Original line number Diff line number Diff line
@@ -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