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

Commit bf8f9f71 authored by Sameer's avatar Sameer
Browse files

Plumb buffer latencies and present fences out of Composer HAL (AidlComposerHal code)

Bug: 337330263
Test: build
Flag: EXEMPT HAL interface change
Change-Id: I90594b5a8a2d2b5fe039a0a4cdef69f02ef20d4b
parent b2361af7
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -686,6 +686,36 @@ Error AidlComposer::getReleaseFences(Display display, std::vector<Layer>* outLay
    return error;
}

Error AidlComposer::getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
                                          std::vector<int>* outFences,
                                          std::vector<int64_t>* outLatenciesNanos) {
    Error error = Error::NONE;
    std::vector<PresentFence::LayerPresentFence> fences;
    {
        mMutex.lock_shared();
        if (auto reader = getReader(display)) {
            fences = reader->get().takeLayerPresentFences(translate<int64_t>(display));
        } else {
            error = Error::BAD_DISPLAY;
        }
        mMutex.unlock_shared();
    }

    outLayers->reserve(fences.size());
    outFences->reserve(fences.size());
    outLatenciesNanos->reserve(fences.size());

    for (auto& fence : fences) {
        outLayers->emplace_back(translate<Layer>(fence.layer));
        // take ownership
        const int fenceOwner = fence.bufferFence.get();
        *fence.bufferFence.getR() = -1;
        outFences->emplace_back(fenceOwner);
        outLatenciesNanos->emplace_back(fence.bufferLatencyNanos);
    }
    return error;
}

Error AidlComposer::presentDisplay(Display display, int* outPresentFence) {
    const auto displayId = translate<int64_t>(display);
    SFTRACE_FORMAT("HwcPresentDisplay %" PRId64, displayId);
+4 −0
Original line number Diff line number Diff line
@@ -106,6 +106,10 @@ public:
    Error getReleaseFences(Display display, std::vector<Layer>* outLayers,
                           std::vector<int>* outReleaseFences) override;

    Error getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
                                std::vector<int>* outFences,
                                std::vector<int64_t>* outLatenciesNanos) override;

    Error presentDisplay(Display display, int* outPresentFence) override;

    Error setActiveConfig(Display display, Config config) override;
+4 −0
Original line number Diff line number Diff line
@@ -157,6 +157,10 @@ public:
    virtual Error getReleaseFences(Display display, std::vector<Layer>* outLayers,
                                   std::vector<int>* outReleaseFences) = 0;

    virtual Error getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
                                        std::vector<int>* outFences,
                                        std::vector<int64_t>* outLatenciesNanos) = 0;

    virtual Error presentDisplay(Display display, int* outPresentFence) = 0;

    virtual Error setActiveConfig(Display display, Config config) = 0;
+5 −0
Original line number Diff line number Diff line
@@ -590,6 +590,11 @@ Error HidlComposer::getReleaseFences(Display display, std::vector<Layer>* outLay
    return Error::NONE;
}

Error HidlComposer::getLayerPresentFences(Display, std::vector<Layer>*, std::vector<int>*,
                                          std::vector<int64_t>*) {
    return Error::UNSUPPORTED;
}

Error HidlComposer::presentDisplay(Display display, int* outPresentFence) {
    SFTRACE_NAME("HwcPresentDisplay");
    mWriter.selectDisplay(display);
+4 −0
Original line number Diff line number Diff line
@@ -214,6 +214,10 @@ public:
    Error getReleaseFences(Display display, std::vector<Layer>* outLayers,
                           std::vector<int>* outReleaseFences) override;

    Error getLayerPresentFences(Display display, std::vector<Layer>* outLayers,
                                std::vector<int>* outFences,
                                std::vector<int64_t>* outLatenciesNanos) override;

    Error presentDisplay(Display display, int* outPresentFence) override;

    Error setActiveConfig(Display display, Config config) override;
Loading