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

Commit 5bfedbb8 authored by Sameer Kale's avatar Sameer Kale Committed by Android (Google) Code Review
Browse files

Merge "Plumb buffer latencies and present fences out of Composer HAL...

Merge "Plumb buffer latencies and present fences out of Composer HAL (AidlComposerHal code)" into main
parents 8c94bdb8 bf8f9f71
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