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

Commit a9889e9e authored by Vishnu Nair's avatar Vishnu Nair
Browse files

Fix out of bounds error when updating composition summary

Change-Id: I55795eda8b41e7243698d1110d56d5a367b8ede7
Fixes: 390854619
Test: presubmit
FLAG: EXEMPT bug fix
parent 23181337
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -2978,23 +2978,22 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
    }

    int index = 0;
    std::array<char, WorkloadTracer::COMPOSITION_SUMMARY_SIZE> compositionSummary = {0};
    ftl::StaticVector<char, WorkloadTracer::COMPOSITION_SUMMARY_SIZE> compositionSummary;
    auto lastLayerStack = ui::INVALID_LAYER_STACK;
    for (auto& [layer, layerFE] : layers) {
        CompositionResult compositionResult{layerFE->stealCompositionResult()};
        if (index < compositionSummary.size()) {
            if (lastLayerStack != ui::INVALID_LAYER_STACK &&
                lastLayerStack != layerFE->mSnapshot->outputFilter.layerStack) {
        if (lastLayerStack != layerFE->mSnapshot->outputFilter.layerStack) {
            if (lastLayerStack != ui::INVALID_LAYER_STACK) {
                // add a space to separate displays
                compositionSummary[index++] = ' ';
                compositionSummary.push_back(' ');
            }
            lastLayerStack = layerFE->mSnapshot->outputFilter.layerStack;
            compositionSummary[index++] = layerFE->mSnapshot->classifyCompositionForDebug(
                    layerFE->getHwcCompositionType());
        }
        compositionSummary.push_back(
                layerFE->mSnapshot->classifyCompositionForDebug(layerFE->getHwcCompositionType()));
        if (layerFE->mSnapshot->hasEffect()) {
            compositedWorkload |= adpf::Workload::EFFECTS;
        }
        }

        if (compositionResult.lastClientCompositionFence) {
            layer->setWasClientComposed(compositionResult.lastClientCompositionFence);
@@ -3010,7 +3009,8 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
    SFTRACE_INSTANT_FOR_TRACK(WorkloadTracer::TRACK_NAME,
                              ftl::Concat("Layers: ", layers.size(), " ",
                                          ftl::truncated<WorkloadTracer::COMPOSITION_SUMMARY_SIZE>(
                                                  compositionSummary.data()))
                                                  std::string_view(compositionSummary.begin(),
                                                                   compositionSummary.size())))
                                      .c_str());

    mPowerAdvisor->setCompositedWorkload(compositedWorkload);