surfaceflinger: remove BufferLayerConsumer::releaseTexImage
releaseTexImage and the related debug tex image are unused.
Test: builds
Change-Id: I6bc8bdcf69acbf7a822cc2c8dfc58ae29b006193
diff --git a/services/surfaceflinger/BufferLayerConsumer.cpp b/services/surfaceflinger/BufferLayerConsumer.cpp
index 585d403..b9930d1 100644
--- a/services/surfaceflinger/BufferLayerConsumer.cpp
+++ b/services/surfaceflinger/BufferLayerConsumer.cpp
@@ -59,28 +59,8 @@
#define BLC_LOGW(x, ...) ALOGW("[%s] " x, mName.string(), ##__VA_ARGS__)
#define BLC_LOGE(x, ...) ALOGE("[%s] " x, mName.string(), ##__VA_ARGS__)
-static const struct {
- uint32_t width, height;
- char const* bits;
-} kDebugData = {15, 12,
- "_______________"
- "_______________"
- "_____XX_XX_____"
- "__X_X_____X_X__"
- "__X_XXXXXXX_X__"
- "__XXXXXXXXXXX__"
- "___XX_XXX_XX___"
- "____XXXXXXX____"
- "_____X___X_____"
- "____X_____X____"
- "_______________"
- "_______________"};
-
static const mat4 mtxIdentity;
-Mutex BufferLayerConsumer::sStaticInitLock;
-sp<GraphicBuffer> BufferLayerConsumer::sReleasedTexImageBuffer;
-
static bool hasEglAndroidImageCropImpl() {
EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
const char* exts = eglQueryStringImplementationANDROID(dpy, EGL_EXTENSIONS);
@@ -237,106 +217,6 @@
return bindTextureImageLocked();
}
-status_t BufferLayerConsumer::releaseTexImage() {
- ATRACE_CALL();
- BLC_LOGV("releaseTexImage");
- Mutex::Autolock lock(mMutex);
-
- if (mAbandoned) {
- BLC_LOGE("releaseTexImage: BufferLayerConsumer is abandoned!");
- return NO_INIT;
- }
-
- // Make sure the EGL state is the same as in previous calls.
- status_t err = NO_ERROR;
-
- if (mAttached) {
- err = checkAndUpdateEglStateLocked(true);
- if (err != NO_ERROR) {
- return err;
- }
- } else {
- // if we're detached, no need to validate EGL's state -- we won't use it.
- }
-
- // Update the BufferLayerConsumer state.
- int buf = mCurrentTexture;
- if (buf != BufferQueue::INVALID_BUFFER_SLOT) {
- BLC_LOGV("releaseTexImage: (slot=%d, mAttached=%d)", buf, mAttached);
-
- if (mAttached) {
- // Do whatever sync ops we need to do before releasing the slot.
- err = syncForReleaseLocked(mEglDisplay);
- if (err != NO_ERROR) {
- BLC_LOGE("syncForReleaseLocked failed (slot=%d), err=%d", buf, err);
- return err;
- }
- } else {
- // if we're detached, we just use the fence that was created in detachFromContext()
- // so... basically, nothing more to do here.
- }
-
- err = releaseBufferLocked(buf, mSlots[buf].mGraphicBuffer, mEglDisplay, EGL_NO_SYNC_KHR);
- if (err < NO_ERROR) {
- BLC_LOGE("releaseTexImage: failed to release buffer: %s (%d)", strerror(-err), err);
- return err;
- }
-
- if (mReleasedTexImage == NULL) {
- mReleasedTexImage = new EglImage(getDebugTexImageBuffer());
- }
-
- mCurrentTexture = BufferQueue::INVALID_BUFFER_SLOT;
- mCurrentTextureImage = mReleasedTexImage;
- mCurrentCrop.makeInvalid();
- mCurrentTransform = 0;
- mCurrentTimestamp = 0;
- mCurrentDataSpace = HAL_DATASPACE_UNKNOWN;
- mCurrentFence = Fence::NO_FENCE;
- mCurrentFenceTime = FenceTime::NO_FENCE;
-
- if (mAttached) {
- // This binds a dummy buffer (mReleasedTexImage).
- status_t result = bindTextureImageLocked();
- if (result != NO_ERROR) {
- return result;
- }
- } else {
- // detached, don't touch the texture (and we may not even have an
- // EGLDisplay here.
- }
- }
-
- return NO_ERROR;
-}
-
-sp<GraphicBuffer> BufferLayerConsumer::getDebugTexImageBuffer() {
- Mutex::Autolock _l(sStaticInitLock);
- if (CC_UNLIKELY(sReleasedTexImageBuffer == NULL)) {
- // The first time, create the debug texture in case the application
- // continues to use it.
- sp<GraphicBuffer> buffer =
- new GraphicBuffer(kDebugData.width, kDebugData.height, PIXEL_FORMAT_RGBA_8888,
- GraphicBuffer::USAGE_SW_WRITE_RARELY,
- "[BufferLayerConsumer debug texture]");
- uint32_t* bits;
- buffer->lock(GraphicBuffer::USAGE_SW_WRITE_RARELY, reinterpret_cast<void**>(&bits));
- uint32_t stride = buffer->getStride();
- uint32_t height = buffer->getHeight();
- memset(bits, 0, stride * height * 4);
- for (uint32_t y = 0; y < kDebugData.height; y++) {
- for (uint32_t x = 0; x < kDebugData.width; x++) {
- bits[x] = (kDebugData.bits[y + kDebugData.width + x] == 'X') ? 0xFF000000
- : 0xFFFFFFFF;
- }
- bits += stride;
- }
- buffer->unlock();
- sReleasedTexImageBuffer = buffer;
- }
- return sReleasedTexImageBuffer;
-}
-
status_t BufferLayerConsumer::acquireBufferLocked(BufferItem* item, nsecs_t presentWhen,
uint64_t maxFrameNumber) {
status_t err = ConsumerBase::acquireBufferLocked(item, presentWhen, maxFrameNumber);
diff --git a/services/surfaceflinger/BufferLayerConsumer.h b/services/surfaceflinger/BufferLayerConsumer.h
index 2b7c2a3..931b84c 100644
--- a/services/surfaceflinger/BufferLayerConsumer.h
+++ b/services/surfaceflinger/BufferLayerConsumer.h
@@ -96,13 +96,6 @@
// This calls doGLFenceWait to ensure proper synchronization.
status_t updateTexImage();
- // releaseTexImage releases the texture acquired in updateTexImage().
- // This is intended to be used in single buffer mode.
- //
- // This call may only be made while the OpenGL ES context to which the
- // target texture belongs is bound to the calling thread.
- status_t releaseTexImage();
-
// setReleaseFence stores a fence that will signal when the current buffer
// is no longer being read. This fence will be returned to the producer
// when the current buffer is released by updateTexImage(). Multiple
@@ -293,7 +286,6 @@
private:
// EglImage is a utility class for tracking and creating EGLImageKHRs. There
// is primarily just one image per slot, but there is also special cases:
- // - For releaseTexImage, we use a debug image (mReleasedTexImage)
// - After freeBuffer, we must still keep the current image/buffer
// Reference counting EGLImages lets us handle all these cases easily while
// also only creating new EGLImages from buffers when required.
@@ -365,9 +357,6 @@
// before the outstanding accesses have completed.
status_t syncForReleaseLocked(EGLDisplay dpy);
- // returns a graphic buffer used when the texture image has been released
- static sp<GraphicBuffer> getDebugTexImageBuffer();
-
// The default consumer usage flags that BufferLayerConsumer always sets on its
// BufferQueue instance; these will be OR:d with any additional flags passed
// from the BufferLayerConsumer user. In particular, BufferLayerConsumer will always
@@ -492,14 +481,6 @@
// It is set to false by detachFromContext, and then set to true again by
// attachToContext.
bool mAttached;
-
- // protects static initialization
- static Mutex sStaticInitLock;
-
- // mReleasedTexImageBuffer is a dummy buffer used when in single buffer
- // mode and releaseTexImage() has been called
- static sp<GraphicBuffer> sReleasedTexImageBuffer;
- sp<EglImage> mReleasedTexImage;
};
// ----------------------------------------------------------------------------