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

Commit 2ec1f7b9 authored by Pablo Gamito's avatar Pablo Gamito
Browse files

Provide layer id on surface creation

Allows for the layer state to be dumped on the client side with the layer's id so that they can then be associated with the respective layer dumped on the server side

Test: Check that the layer ID is provided on the client side when createSurface is called
Change-Id: I7ea851942c43fc48326bb8558a605ba6877600da
parent 7eb7ee7e
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -49,13 +49,13 @@ public:

    status_t createSurface(const String8& name, uint32_t width, uint32_t height, PixelFormat format,
                           uint32_t flags, const sp<IBinder>& parent, LayerMetadata metadata,
                           sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp,
                           sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                           uint32_t* outTransformHint) override {
        return callRemote<decltype(&ISurfaceComposerClient::createSurface)>(Tag::CREATE_SURFACE,
                                                                            name, width, height,
                                                                            format, flags, parent,
                                                                            std::move(metadata),
                                                                            handle, gbp,
                                                                            handle, gbp, outId,
                                                                            outTransformHint);
    }

@@ -63,14 +63,14 @@ public:
                                     PixelFormat format, uint32_t flags,
                                     const sp<IGraphicBufferProducer>& parent,
                                     LayerMetadata metadata, sp<IBinder>* handle,
                                     sp<IGraphicBufferProducer>* gbp,
                                     sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                                     uint32_t* outTransformHint) override {
        return callRemote<decltype(
                &ISurfaceComposerClient::createWithSurfaceParent)>(Tag::CREATE_WITH_SURFACE_PARENT,
                                                                   name, width, height, format,
                                                                   flags, parent,
                                                                   std::move(metadata), handle, gbp,
                                                                   outTransformHint);
                                                                   outId, outTransformHint);
    }

    status_t clearLayerFrameStats(const sp<IBinder>& handle) const override {
@@ -85,10 +85,11 @@ public:
                                                              outStats);
    }

    status_t mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* outHandle) override {
    status_t mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* outHandle,
                           int32_t* outId) override {
        return callRemote<decltype(&ISurfaceComposerClient::mirrorSurface)>(Tag::MIRROR_SURFACE,
                                                                            mirrorFromHandle,
                                                                            outHandle);
                                                                            outHandle, outId);
    }
};

+8 −3
Original line number Diff line number Diff line
@@ -1655,8 +1655,10 @@ sp<SurfaceControl> SurfaceComposerClient::createWithSurfaceParent(const String8&
        sp<IGraphicBufferProducer> gbp;

        uint32_t transformHint = 0;
        int32_t id = -1;
        err = mClient->createWithSurfaceParent(name, w, h, format, flags, parentGbp,
                                               std::move(metadata), &handle, &gbp, &transformHint);
                                               std::move(metadata), &handle, &gbp, &id,
                                               &transformHint);
        if (outTransformHint) {
            *outTransformHint = transformHint;
        }
@@ -1686,8 +1688,10 @@ status_t SurfaceComposerClient::createSurfaceChecked(const String8& name, uint32
        }

        uint32_t transformHint = 0;
        int32_t id = -1;
        err = mClient->createSurface(name, w, h, format, flags, parentHandle, std::move(metadata),
                                     &handle, &gbp, &transformHint);
                                     &handle, &gbp, &id, &transformHint);

        if (outTransformHint) {
            *outTransformHint = transformHint;
        }
@@ -1706,7 +1710,8 @@ sp<SurfaceControl> SurfaceComposerClient::mirrorSurface(SurfaceControl* mirrorFr

    sp<IBinder> handle;
    sp<IBinder> mirrorFromHandle = mirrorFromSurface->getHandle();
    status_t err = mClient->mirrorSurface(mirrorFromHandle, &handle);
    int32_t layer_id = -1;
    status_t err = mClient->mirrorSurface(mirrorFromHandle, &handle, &layer_id);
    if (err == NO_ERROR) {
        return new SurfaceControl(this, handle, nullptr, true /* owned */);
    }
+5 −3
Original line number Diff line number Diff line
@@ -58,7 +58,8 @@ public:
    virtual status_t createSurface(const String8& name, uint32_t w, uint32_t h, PixelFormat format,
                                   uint32_t flags, const sp<IBinder>& parent,
                                   LayerMetadata metadata, sp<IBinder>* handle,
                                   sp<IGraphicBufferProducer>* gbp, uint32_t* outTransformHint) = 0;
                                   sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                                   uint32_t* outTransformHint) = 0;

    /*
     * Requires ACCESS_SURFACE_FLINGER permission
@@ -67,7 +68,7 @@ public:
                                             PixelFormat format, uint32_t flags,
                                             const sp<IGraphicBufferProducer>& parent,
                                             LayerMetadata metadata, sp<IBinder>* handle,
                                             sp<IGraphicBufferProducer>* gbp,
                                             sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                                             uint32_t* outTransformHint) = 0;

    /*
@@ -80,7 +81,8 @@ public:
     */
    virtual status_t getLayerFrameStats(const sp<IBinder>& handle, FrameStats* outStats) const = 0;

    virtual status_t mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* outHandle) = 0;
    virtual status_t mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* outHandle,
                                   int32_t* outId) = 0;
};

class BnSurfaceComposerClient : public SafeBnInterface<ISurfaceComposerClient> {
+8 −6
Original line number Diff line number Diff line
@@ -79,17 +79,18 @@ sp<Layer> Client::getLayerUser(const sp<IBinder>& handle) const
status_t Client::createSurface(const String8& name, uint32_t w, uint32_t h, PixelFormat format,
                               uint32_t flags, const sp<IBinder>& parentHandle,
                               LayerMetadata metadata, sp<IBinder>* handle,
                               sp<IGraphicBufferProducer>* gbp, uint32_t* outTransformHint) {
                               sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                               uint32_t* outTransformHint) {
    // We rely on createLayer to check permissions.
    return mFlinger->createLayer(name, this, w, h, format, flags, std::move(metadata), handle, gbp,
                                 parentHandle, nullptr, outTransformHint);
                                 parentHandle, nullptr, outId, outTransformHint);
}

status_t Client::createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h,
                                         PixelFormat format, uint32_t flags,
                                         const sp<IGraphicBufferProducer>& parent,
                                         LayerMetadata metadata, sp<IBinder>* handle,
                                         sp<IGraphicBufferProducer>* gbp,
                                         sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                                         uint32_t* outTransformHint) {
    if (mFlinger->authenticateSurfaceTexture(parent) == false) {
        ALOGE("failed to authenticate surface texture");
@@ -103,11 +104,12 @@ status_t Client::createWithSurfaceParent(const String8& name, uint32_t w, uint32
    }

    return mFlinger->createLayer(name, this, w, h, format, flags, std::move(metadata), handle, gbp,
                                 nullptr, layer, outTransformHint);
                                 nullptr, layer, outId, outTransformHint);
}

status_t Client::mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* outHandle) {
    return mFlinger->mirrorLayer(this, mirrorFromHandle, outHandle);
status_t Client::mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* outHandle,
                               int32_t* outId) {
    return mFlinger->mirrorLayer(this, mirrorFromHandle, outHandle, outId);
}

status_t Client::clearLayerFrameStats(const sp<IBinder>& handle) const {
+4 −3
Original line number Diff line number Diff line
@@ -50,17 +50,18 @@ private:
    virtual status_t createSurface(const String8& name, uint32_t w, uint32_t h, PixelFormat format,
                                   uint32_t flags, const sp<IBinder>& parent,
                                   LayerMetadata metadata, sp<IBinder>* handle,
                                   sp<IGraphicBufferProducer>* gbp,
                                   sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                                   uint32_t* outTransformHint = nullptr);

    virtual status_t createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h,
                                             PixelFormat format, uint32_t flags,
                                             const sp<IGraphicBufferProducer>& parent,
                                             LayerMetadata metadata, sp<IBinder>* handle,
                                             sp<IGraphicBufferProducer>* gbp,
                                             sp<IGraphicBufferProducer>* gbp, int32_t* outId,
                                             uint32_t* outTransformHint = nullptr);

    status_t mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* handle);
    status_t mirrorSurface(const sp<IBinder>& mirrorFromHandle, sp<IBinder>* handle,
                           int32_t* outId);

    virtual status_t clearLayerFrameStats(const sp<IBinder>& handle) const;

Loading