Loading services/surfaceflinger/SurfaceFlinger.cpp +13 −15 Original line number Diff line number Diff line Loading @@ -3719,10 +3719,10 @@ void SurfaceFlinger::commitTransactionsLocked(uint32_t transactionFlags) { } void SurfaceFlinger::updateInputFlinger() { ATRACE_CALL(); if (!mInputFlinger) { if (!mInputFlinger || (!mUpdateInputInfo && mInputWindowCommands.empty())) { return; } ATRACE_CALL(); std::vector<WindowInfo> windowInfos; std::vector<DisplayInfo> displayInfos; Loading @@ -3731,20 +3731,18 @@ void SurfaceFlinger::updateInputFlinger() { mUpdateInputInfo = false; updateWindowInfo = true; buildWindowInfos(windowInfos, displayInfos); } else if (mInputWindowCommands.empty()) { return; } std::unordered_set<Layer*> visibleLayers; mDrawingState.traverse([&visibleLayers](Layer* layer) { if (layer->isVisibleForInput()) { visibleLayers.insert(layer); std::unordered_set<int32_t> visibleWindowIds; for (WindowInfo& windowInfo : windowInfos) { if (!windowInfo.inputConfig.test(WindowInfo::InputConfig::NOT_VISIBLE)) { visibleWindowIds.insert(windowInfo.id); } }); bool visibleLayersChanged = false; if (visibleLayers != mVisibleLayers) { visibleLayersChanged = true; mVisibleLayers = std::move(visibleLayers); } bool visibleWindowsChanged = false; if (visibleWindowIds != mVisibleWindowIds) { visibleWindowsChanged = true; mVisibleWindowIds = std::move(visibleWindowIds); } BackgroundExecutor::getInstance().sendCallbacks({[updateWindowInfo, Loading @@ -3753,14 +3751,14 @@ void SurfaceFlinger::updateInputFlinger() { inputWindowCommands = std::move(mInputWindowCommands), inputFlinger = mInputFlinger, this, visibleLayersChanged]() { visibleWindowsChanged]() { ATRACE_NAME("BackgroundExecutor::updateInputFlinger"); if (updateWindowInfo) { mWindowInfosListenerInvoker ->windowInfosChanged(std::move(windowInfos), std::move(displayInfos), std::move( inputWindowCommands.windowInfosReportedListeners), /* forceImmediateCall= */ visibleLayersChanged || /* forceImmediateCall= */ visibleWindowsChanged || !inputWindowCommands.focusRequests.empty()); } else { // If there are listeners but no changes to input windows, call the listeners Loading services/surfaceflinger/SurfaceFlinger.h +2 −4 Original line number Diff line number Diff line Loading @@ -1430,10 +1430,8 @@ private: display::DisplayMap<ui::LayerStack, frontend::DisplayInfo> mFrontEndDisplayInfos; bool mFrontEndDisplayInfosChanged = false; // Layers visible during the last commit. This set should only be used for testing set equality // and membership. The pointers should not be dereferenced as it's possible the set contains // pointers to freed layers. std::unordered_set<Layer*> mVisibleLayers; // WindowInfo ids visible during the last commit. std::unordered_set<int32_t> mVisibleWindowIds; }; class SurfaceComposerAIDL : public gui::BnSurfaceComposer { Loading Loading
services/surfaceflinger/SurfaceFlinger.cpp +13 −15 Original line number Diff line number Diff line Loading @@ -3719,10 +3719,10 @@ void SurfaceFlinger::commitTransactionsLocked(uint32_t transactionFlags) { } void SurfaceFlinger::updateInputFlinger() { ATRACE_CALL(); if (!mInputFlinger) { if (!mInputFlinger || (!mUpdateInputInfo && mInputWindowCommands.empty())) { return; } ATRACE_CALL(); std::vector<WindowInfo> windowInfos; std::vector<DisplayInfo> displayInfos; Loading @@ -3731,20 +3731,18 @@ void SurfaceFlinger::updateInputFlinger() { mUpdateInputInfo = false; updateWindowInfo = true; buildWindowInfos(windowInfos, displayInfos); } else if (mInputWindowCommands.empty()) { return; } std::unordered_set<Layer*> visibleLayers; mDrawingState.traverse([&visibleLayers](Layer* layer) { if (layer->isVisibleForInput()) { visibleLayers.insert(layer); std::unordered_set<int32_t> visibleWindowIds; for (WindowInfo& windowInfo : windowInfos) { if (!windowInfo.inputConfig.test(WindowInfo::InputConfig::NOT_VISIBLE)) { visibleWindowIds.insert(windowInfo.id); } }); bool visibleLayersChanged = false; if (visibleLayers != mVisibleLayers) { visibleLayersChanged = true; mVisibleLayers = std::move(visibleLayers); } bool visibleWindowsChanged = false; if (visibleWindowIds != mVisibleWindowIds) { visibleWindowsChanged = true; mVisibleWindowIds = std::move(visibleWindowIds); } BackgroundExecutor::getInstance().sendCallbacks({[updateWindowInfo, Loading @@ -3753,14 +3751,14 @@ void SurfaceFlinger::updateInputFlinger() { inputWindowCommands = std::move(mInputWindowCommands), inputFlinger = mInputFlinger, this, visibleLayersChanged]() { visibleWindowsChanged]() { ATRACE_NAME("BackgroundExecutor::updateInputFlinger"); if (updateWindowInfo) { mWindowInfosListenerInvoker ->windowInfosChanged(std::move(windowInfos), std::move(displayInfos), std::move( inputWindowCommands.windowInfosReportedListeners), /* forceImmediateCall= */ visibleLayersChanged || /* forceImmediateCall= */ visibleWindowsChanged || !inputWindowCommands.focusRequests.empty()); } else { // If there are listeners but no changes to input windows, call the listeners Loading
services/surfaceflinger/SurfaceFlinger.h +2 −4 Original line number Diff line number Diff line Loading @@ -1430,10 +1430,8 @@ private: display::DisplayMap<ui::LayerStack, frontend::DisplayInfo> mFrontEndDisplayInfos; bool mFrontEndDisplayInfosChanged = false; // Layers visible during the last commit. This set should only be used for testing set equality // and membership. The pointers should not be dereferenced as it's possible the set contains // pointers to freed layers. std::unordered_set<Layer*> mVisibleLayers; // WindowInfo ids visible during the last commit. std::unordered_set<int32_t> mVisibleWindowIds; }; class SurfaceComposerAIDL : public gui::BnSurfaceComposer { Loading