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

Commit 70381d6e authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Use WindowInfo to calculate visible windows" into udc-dev am: 3144ff60

parents feef15de 3144ff60
Loading
Loading
Loading
Loading
+13 −15
Original line number Original line Diff line number Diff line
@@ -3719,10 +3719,10 @@ void SurfaceFlinger::commitTransactionsLocked(uint32_t transactionFlags) {
}
}


void SurfaceFlinger::updateInputFlinger() {
void SurfaceFlinger::updateInputFlinger() {
    ATRACE_CALL();
    if (!mInputFlinger || (!mUpdateInputInfo && mInputWindowCommands.empty())) {
    if (!mInputFlinger) {
        return;
        return;
    }
    }
    ATRACE_CALL();


    std::vector<WindowInfo> windowInfos;
    std::vector<WindowInfo> windowInfos;
    std::vector<DisplayInfo> displayInfos;
    std::vector<DisplayInfo> displayInfos;
@@ -3731,20 +3731,18 @@ void SurfaceFlinger::updateInputFlinger() {
        mUpdateInputInfo = false;
        mUpdateInputInfo = false;
        updateWindowInfo = true;
        updateWindowInfo = true;
        buildWindowInfos(windowInfos, displayInfos);
        buildWindowInfos(windowInfos, displayInfos);
    } else if (mInputWindowCommands.empty()) {
        return;
    }
    }


    std::unordered_set<Layer*> visibleLayers;
    std::unordered_set<int32_t> visibleWindowIds;
    mDrawingState.traverse([&visibleLayers](Layer* layer) {
    for (WindowInfo& windowInfo : windowInfos) {
        if (layer->isVisibleForInput()) {
        if (!windowInfo.inputConfig.test(WindowInfo::InputConfig::NOT_VISIBLE)) {
            visibleLayers.insert(layer);
            visibleWindowIds.insert(windowInfo.id);
        }
        }
    });
    }
    bool visibleLayersChanged = false;
    bool visibleWindowsChanged = false;
    if (visibleLayers != mVisibleLayers) {
    if (visibleWindowIds != mVisibleWindowIds) {
        visibleLayersChanged = true;
        visibleWindowsChanged = true;
        mVisibleLayers = std::move(visibleLayers);
        mVisibleWindowIds = std::move(visibleWindowIds);
    }
    }


    BackgroundExecutor::getInstance().sendCallbacks({[updateWindowInfo,
    BackgroundExecutor::getInstance().sendCallbacks({[updateWindowInfo,
@@ -3753,14 +3751,14 @@ void SurfaceFlinger::updateInputFlinger() {
                                                      inputWindowCommands =
                                                      inputWindowCommands =
                                                              std::move(mInputWindowCommands),
                                                              std::move(mInputWindowCommands),
                                                      inputFlinger = mInputFlinger, this,
                                                      inputFlinger = mInputFlinger, this,
                                                      visibleLayersChanged]() {
                                                      visibleWindowsChanged]() {
        ATRACE_NAME("BackgroundExecutor::updateInputFlinger");
        ATRACE_NAME("BackgroundExecutor::updateInputFlinger");
        if (updateWindowInfo) {
        if (updateWindowInfo) {
            mWindowInfosListenerInvoker
            mWindowInfosListenerInvoker
                    ->windowInfosChanged(std::move(windowInfos), std::move(displayInfos),
                    ->windowInfosChanged(std::move(windowInfos), std::move(displayInfos),
                                         std::move(
                                         std::move(
                                                 inputWindowCommands.windowInfosReportedListeners),
                                                 inputWindowCommands.windowInfosReportedListeners),
                                         /* forceImmediateCall= */ visibleLayersChanged ||
                                         /* forceImmediateCall= */ visibleWindowsChanged ||
                                                 !inputWindowCommands.focusRequests.empty());
                                                 !inputWindowCommands.focusRequests.empty());
        } else {
        } else {
            // If there are listeners but no changes to input windows, call the listeners
            // If there are listeners but no changes to input windows, call the listeners
+2 −4
Original line number Original line Diff line number Diff line
@@ -1430,10 +1430,8 @@ private:
    display::DisplayMap<ui::LayerStack, frontend::DisplayInfo> mFrontEndDisplayInfos;
    display::DisplayMap<ui::LayerStack, frontend::DisplayInfo> mFrontEndDisplayInfos;
    bool mFrontEndDisplayInfosChanged = false;
    bool mFrontEndDisplayInfosChanged = false;


    // Layers visible during the last commit. This set should only be used for testing set equality
    // WindowInfo ids visible during the last commit.
    // and membership. The pointers should not be dereferenced as it's possible the set contains
    std::unordered_set<int32_t> mVisibleWindowIds;
    // pointers to freed layers.
    std::unordered_set<Layer*> mVisibleLayers;
};
};


class SurfaceComposerAIDL : public gui::BnSurfaceComposer {
class SurfaceComposerAIDL : public gui::BnSurfaceComposer {