summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
author Marissa Wall <marissaw@google.com> 2019-03-29 14:03:53 -0700
committer Valerie Hau <vhau@google.com> 2019-04-16 15:39:28 -0700
commit947d34ecad84bdaf496748eeb9f6e35b33deb339 (patch)
tree29f668d1d193b97ab93d74b0d4cdc7b0bd239c3f /services/surfaceflinger/SurfaceFlinger.cpp
parent1688f5246f156e815bd7b07ba7d5c39cc821e8d6 (diff)
Change slot generation for BufferState
BufferState layers now do slot generation with buffer death considered appropriately. When a buffer dies, the slot will be pushed onto a stack of available slots to be reused at the next opportunity. This should mimic BufferQueue slot behavior and prevent Composer Resources from growing too large. Test: build, boot, manual Bug: 129351223 Change-Id: Icef9592593cacb0b5c6b12f6679fc2c4dabdcd19
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp17
1 files changed, 7 insertions, 10 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 606355549e..29441d95d6 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -75,7 +75,6 @@
#include "BufferLayer.h"
#include "BufferQueueLayer.h"
#include "BufferStateLayer.h"
-#include "BufferStateLayerCache.h"
#include "Client.h"
#include "ColorLayer.h"
#include "Colorizer.h"
@@ -3542,7 +3541,7 @@ void SurfaceFlinger::setTransactionState(const Vector<ComposerState>& states,
const sp<IBinder>& applyToken,
const InputWindowCommands& inputWindowCommands,
int64_t desiredPresentTime,
- const cached_buffer_t& uncacheBuffer,
+ const client_cache_t& uncacheBuffer,
const std::vector<ListenerCallbacks>& listenerCallbacks) {
ATRACE_CALL();
@@ -3574,7 +3573,7 @@ void SurfaceFlinger::applyTransactionState(const Vector<ComposerState>& states,
const Vector<DisplayState>& displays, uint32_t flags,
const InputWindowCommands& inputWindowCommands,
const int64_t desiredPresentTime,
- const cached_buffer_t& uncacheBuffer,
+ const client_cache_t& uncacheBuffer,
const std::vector<ListenerCallbacks>& listenerCallbacks,
const int64_t postTime, bool privileged,
bool isMainThread) {
@@ -3624,8 +3623,8 @@ void SurfaceFlinger::applyTransactionState(const Vector<ComposerState>& states,
transactionFlags |= addInputWindowCommands(inputWindowCommands);
- if (uncacheBuffer.token) {
- BufferStateLayerCache::getInstance().erase(uncacheBuffer.token, uncacheBuffer.cacheId);
+ if (uncacheBuffer.isValid()) {
+ ClientCache::getInstance().erase(uncacheBuffer);
}
// If a synchronous transaction is explicitly requested without any changes, force a transaction
@@ -3980,17 +3979,15 @@ uint32_t SurfaceFlinger::setClientStateLocked(
bool cacheIdChanged = what & layer_state_t::eCachedBufferChanged;
sp<GraphicBuffer> buffer;
if (bufferChanged && cacheIdChanged) {
- BufferStateLayerCache::getInstance().add(s.cachedBuffer.token, s.cachedBuffer.cacheId,
- s.buffer);
+ ClientCache::getInstance().add(s.cachedBuffer, s.buffer);
buffer = s.buffer;
} else if (cacheIdChanged) {
- buffer = BufferStateLayerCache::getInstance().get(s.cachedBuffer.token,
- s.cachedBuffer.cacheId);
+ buffer = ClientCache::getInstance().get(s.cachedBuffer);
} else if (bufferChanged) {
buffer = s.buffer;
}
if (buffer) {
- if (layer->setBuffer(buffer, postTime, desiredPresentTime)) {
+ if (layer->setBuffer(buffer, postTime, desiredPresentTime, s.cachedBuffer)) {
flags |= eTraversalNeeded;
}
}