summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Stoza2015-01-27 12:32:10 -0600
committerDan Stoza2015-01-27 13:03:50 -0600
commit1665c8e1012e535743683d9812bf28c35ee2f10a (patch)
tree32321d8a1ac4f81bb8c0143f00a8fc72e790c22c /services
parentef1c17ae9417abc1e21e49dbc629e448efc947dc (diff)
downloadframeworks-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.mk4
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp95
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
90endif 90endif
91 91
92LOCAL_CFLAGS += -fvisibility=hidden -Werror=format 92LOCAL_CFLAGS += -fvisibility=hidden -Werror=format
93LOCAL_CFLAGS += -std=c++1y 93LOCAL_CFLAGS += -std=c++11
94 94
95LOCAL_SHARED_LIBRARIES := \ 95LOCAL_SHARED_LIBRARIES := \
96 libcutils \ 96 libcutils \
@@ -108,8 +108,6 @@ LOCAL_SHARED_LIBRARIES := \
108 108
109LOCAL_MODULE:= libsurfaceflinger 109LOCAL_MODULE:= libsurfaceflinger
110 110
111include external/libcxx/libcxx.mk
112
113include $(BUILD_SHARED_LIBRARY) 111include $(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
1815static 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
1826bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty) 1809bool 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;