diff options
author | Dan Stoza | 2015-01-27 12:32:10 -0600 |
---|---|---|
committer | Dan Stoza | 2015-01-27 13:03:50 -0600 |
commit | 1665c8e1012e535743683d9812bf28c35ee2f10a (patch) | |
tree | 32321d8a1ac4f81bb8c0143f00a8fc72e790c22c /services | |
parent | ef1c17ae9417abc1e21e49dbc629e448efc947dc (diff) | |
download | frameworks-native-1665c8e1012e535743683d9812bf28c35ee2f10a.tar.gz frameworks-native-1665c8e1012e535743683d9812bf28c35ee2f10a.tar.xz frameworks-native-1665c8e1012e535743683d9812bf28c35ee2f10a.zip |
Revert "SurfaceFlinger: Attempt to attribute fds to layers"
This reverts commit 03eccb6616744c3789b6018680de7bf5a18f71ce.
Change-Id: I4f0da7bb62bf77bb3d399aee601beae5e03928fe
Diffstat (limited to 'services')
-rw-r--r-- | services/surfaceflinger/Android.mk | 4 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 95 |
2 files changed, 1 insertions, 98 deletions
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk index af271b22c..eade2e221 100644 --- a/services/surfaceflinger/Android.mk +++ b/services/surfaceflinger/Android.mk | |||
@@ -90,7 +90,7 @@ else | |||
90 | endif | 90 | endif |
91 | 91 | ||
92 | LOCAL_CFLAGS += -fvisibility=hidden -Werror=format | 92 | LOCAL_CFLAGS += -fvisibility=hidden -Werror=format |
93 | LOCAL_CFLAGS += -std=c++1y | 93 | LOCAL_CFLAGS += -std=c++11 |
94 | 94 | ||
95 | LOCAL_SHARED_LIBRARIES := \ | 95 | LOCAL_SHARED_LIBRARIES := \ |
96 | libcutils \ | 96 | libcutils \ |
@@ -108,8 +108,6 @@ LOCAL_SHARED_LIBRARIES := \ | |||
108 | 108 | ||
109 | LOCAL_MODULE:= libsurfaceflinger | 109 | LOCAL_MODULE:= libsurfaceflinger |
110 | 110 | ||
111 | include external/libcxx/libcxx.mk | ||
112 | |||
113 | include $(BUILD_SHARED_LIBRARY) | 111 | include $(BUILD_SHARED_LIBRARY) |
114 | 112 | ||
115 | ############################################################### | 113 | ############################################################### |
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 6013ddb53..80d3cc2c3 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp | |||
@@ -78,12 +78,6 @@ | |||
78 | #include "RenderEngine/RenderEngine.h" | 78 | #include "RenderEngine/RenderEngine.h" |
79 | #include <cutils/compiler.h> | 79 | #include <cutils/compiler.h> |
80 | 80 | ||
81 | #include <map> | ||
82 | #include <set> | ||
83 | #include <string> | ||
84 | #include <unordered_map> | ||
85 | #include <vector> | ||
86 | |||
87 | #define DISPLAY_COUNT 1 | 81 | #define DISPLAY_COUNT 1 |
88 | 82 | ||
89 | /* | 83 | /* |
@@ -1812,17 +1806,6 @@ void SurfaceFlinger::doDisplayComposition(const sp<const DisplayDevice>& hw, | |||
1812 | hw->swapBuffers(getHwComposer()); | 1806 | hw->swapBuffers(getHwComposer()); |
1813 | } | 1807 | } |
1814 | 1808 | ||
1815 | static std::set<int> getOpenFds() | ||
1816 | { | ||
1817 | std::set<int> fds; | ||
1818 | for (int fd = 0; fd < 1024; ++fd) { | ||
1819 | if (fcntl(fd, F_GETFD) != -1 || errno != EBADF) { | ||
1820 | fds.insert(fd); | ||
1821 | } | ||
1822 | } | ||
1823 | return fds; | ||
1824 | } | ||
1825 | |||
1826 | bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty) | 1809 | bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty) |
1827 | { | 1810 | { |
1828 | RenderEngine& engine(getRenderEngine()); | 1811 | RenderEngine& engine(getRenderEngine()); |
@@ -1897,8 +1880,6 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const | |||
1897 | * and then, render the layers targeted at the framebuffer | 1880 | * and then, render the layers targeted at the framebuffer |
1898 | */ | 1881 | */ |
1899 | 1882 | ||
1900 | static std::set<std::string> previousLayers; | ||
1901 | std::set<std::string> currentLayers; | ||
1902 | const Vector< sp<Layer> >& layers(hw->getVisibleLayersSortedByZ()); | 1883 | const Vector< sp<Layer> >& layers(hw->getVisibleLayersSortedByZ()); |
1903 | const size_t count = layers.size(); | 1884 | const size_t count = layers.size(); |
1904 | const Transform& tr = hw->getTransform(); | 1885 | const Transform& tr = hw->getTransform(); |
@@ -1908,7 +1889,6 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const | |||
1908 | const sp<Layer>& layer(layers[i]); | 1889 | const sp<Layer>& layer(layers[i]); |
1909 | const Region clip(dirty.intersect(tr.transform(layer->visibleRegion))); | 1890 | const Region clip(dirty.intersect(tr.transform(layer->visibleRegion))); |
1910 | if (!clip.isEmpty()) { | 1891 | if (!clip.isEmpty()) { |
1911 | currentLayers.insert(layer->getName().string()); | ||
1912 | switch (cur->getCompositionType()) { | 1892 | switch (cur->getCompositionType()) { |
1913 | case HWC_CURSOR_OVERLAY: | 1893 | case HWC_CURSOR_OVERLAY: |
1914 | case HWC_OVERLAY: { | 1894 | case HWC_OVERLAY: { |
@@ -1944,86 +1924,11 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const | |||
1944 | const Region clip(dirty.intersect( | 1924 | const Region clip(dirty.intersect( |
1945 | tr.transform(layer->visibleRegion))); | 1925 | tr.transform(layer->visibleRegion))); |
1946 | if (!clip.isEmpty()) { | 1926 | if (!clip.isEmpty()) { |
1947 | currentLayers.insert(layer->getName().string()); | ||
1948 | layer->draw(hw, clip); | 1927 | layer->draw(hw, clip); |
1949 | } | 1928 | } |
1950 | } | 1929 | } |
1951 | } | 1930 | } |
1952 | 1931 | ||
1953 | std::set<std::string> newLayers; | ||
1954 | for (auto layer : currentLayers) { | ||
1955 | if (previousLayers.count(layer) == 0) { | ||
1956 | newLayers.insert(layer); | ||
1957 | } | ||
1958 | } | ||
1959 | std::set<std::string> deletedLayers; | ||
1960 | for (auto layer : previousLayers) { | ||
1961 | if (currentLayers.count(layer) == 0) { | ||
1962 | deletedLayers.insert(layer); | ||
1963 | } | ||
1964 | } | ||
1965 | previousLayers = std::move(currentLayers); | ||
1966 | |||
1967 | static std::set<int> previousFds; | ||
1968 | static std::unordered_map<std::string, std::set<int>> initialFds; | ||
1969 | |||
1970 | for (auto layer : newLayers) { | ||
1971 | initialFds[layer] = previousFds; | ||
1972 | } | ||
1973 | |||
1974 | std::set<int> currentFds = getOpenFds(); | ||
1975 | |||
1976 | if (!deletedLayers.empty()) { | ||
1977 | std::unordered_map<int, std::set<std::string>> currentBlame; | ||
1978 | static std::map<int, std::set<std::string>> persistentBlame; | ||
1979 | for (auto layer : deletedLayers) { | ||
1980 | std::vector<int> newFds; | ||
1981 | auto& layerInitialFds = initialFds[layer]; | ||
1982 | std::set_difference( | ||
1983 | currentFds.cbegin(), currentFds.cend(), | ||
1984 | layerInitialFds.cbegin(), layerInitialFds.cend(), | ||
1985 | std::back_inserter(newFds)); | ||
1986 | |||
1987 | for (auto fd : newFds) { | ||
1988 | currentBlame[fd].insert(layer); | ||
1989 | } | ||
1990 | |||
1991 | initialFds.erase(layer); | ||
1992 | } | ||
1993 | |||
1994 | for (auto blame : currentBlame) { | ||
1995 | persistentBlame[blame.first] = blame.second; | ||
1996 | } | ||
1997 | |||
1998 | auto iter = persistentBlame.cbegin(); | ||
1999 | while (iter != persistentBlame.cend()) { | ||
2000 | if (currentFds.count(iter->first) == 0) { | ||
2001 | iter = persistentBlame.erase(iter); | ||
2002 | } else { | ||
2003 | ++iter; | ||
2004 | } | ||
2005 | } | ||
2006 | |||
2007 | std::map<std::set<std::string>, int> blameCounts; | ||
2008 | for (auto blame : persistentBlame) { | ||
2009 | ++blameCounts[blame.second]; | ||
2010 | } | ||
2011 | |||
2012 | ALOGI("FD Blame: %zu open fds", currentFds.size()); | ||
2013 | for (auto blame : blameCounts) { | ||
2014 | std::string layers; | ||
2015 | for (auto layer : blame.first) { | ||
2016 | if (!layers.empty()) { | ||
2017 | layers += ", "; | ||
2018 | } | ||
2019 | layers += layer; | ||
2020 | } | ||
2021 | ALOGI(" %s: %d", layers.c_str(), blame.second); | ||
2022 | } | ||
2023 | } | ||
2024 | |||
2025 | previousFds = std::move(currentFds); | ||
2026 | |||
2027 | // disable scissor at the end of the frame | 1932 | // disable scissor at the end of the frame |
2028 | engine.disableScissor(); | 1933 | engine.disableScissor(); |
2029 | return true; | 1934 | return true; |