diff options
-rw-r--r-- | include/surfaceflinger/ISurfaceComposer.h | 1 | ||||
-rw-r--r-- | services/surfaceflinger/Android.mk | 1 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 36 | ||||
-rw-r--r-- | services/surfaceflinger/LayerBase.cpp | 14 | ||||
-rw-r--r-- | services/surfaceflinger/LayerDim.cpp | 11 | ||||
-rw-r--r-- | services/surfaceflinger/LayerScreenshot.cpp | 114 | ||||
-rw-r--r-- | services/surfaceflinger/LayerScreenshot.h | 56 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 71 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 33 |
9 files changed, 267 insertions, 70 deletions
diff --git a/include/surfaceflinger/ISurfaceComposer.h b/include/surfaceflinger/ISurfaceComposer.h index ea022a6..e7a33f1 100644 --- a/include/surfaceflinger/ISurfaceComposer.h +++ b/include/surfaceflinger/ISurfaceComposer.h @@ -53,6 +53,7 @@ public: eFXSurfaceNormal = 0x00000000, eFXSurfaceBlur = 0x00010000, eFXSurfaceDim = 0x00020000, + eFXSurfaceScreenshot= 0x00030000, eFXSurfaceMask = 0x000F0000, }; diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk index dab0705..61a8358 100644 --- a/services/surfaceflinger/Android.mk +++ b/services/surfaceflinger/Android.mk @@ -5,6 +5,7 @@ LOCAL_SRC_FILES:= \ Layer.cpp \ LayerBase.cpp \ LayerDim.cpp \ + LayerScreenshot.cpp \ DdmConnection.cpp \ DisplayHardware/DisplayHardware.cpp \ DisplayHardware/DisplayHardwareBase.cpp \ diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index feb2c52..f885fc7 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -88,16 +88,8 @@ void Layer::onFirstRef() Layer::~Layer() { - class MessageDestroyGLState : public MessageBase { - GLuint texture; - public: - MessageDestroyGLState(GLuint texture) : texture(texture) { } - virtual bool handler() { - glDeleteTextures(1, &texture); - return true; - } - }; - mFlinger->postMessageAsync( new MessageDestroyGLState(mTextureName) ); + mFlinger->postMessageAsync( + new SurfaceFlinger::MessageDestroyGLTexture(mTextureName) ); } void Layer::onFrameQueued() { @@ -280,33 +272,33 @@ void Layer::onDraw(const Region& clip) const return; } - GLenum target = GL_TEXTURE_EXTERNAL_OES; if (!isProtected()) { - glBindTexture(target, mTextureName); + glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureName); + GLenum filter = GL_NEAREST; if (getFiltering() || needsFiltering() || isFixedSize() || isCropped()) { // TODO: we could be more subtle with isFixedSize() - glTexParameterx(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterx(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - } else { - glTexParameterx(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterx(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + filter = GL_LINEAR; } - glEnable(target); + glTexParameterx(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, filter); + glTexParameterx(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, filter); glMatrixMode(GL_TEXTURE); glLoadMatrixf(mTextureMatrix); glMatrixMode(GL_MODELVIEW); + glEnable(GL_TEXTURE_EXTERNAL_OES); + glDisable(GL_TEXTURE_2D); } else { - target = GL_TEXTURE_2D; - glBindTexture(target, mFlinger->getProtectedTexName()); - glEnable(target); + glBindTexture(GL_TEXTURE_2D, mFlinger->getProtectedTexName()); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); + glDisable(GL_TEXTURE_EXTERNAL_OES); + glEnable(GL_TEXTURE_2D); } drawWithOpenGL(clip); - glDisable(target); + glDisable(GL_TEXTURE_EXTERNAL_OES); + glDisable(GL_TEXTURE_2D); } // As documented in libhardware header, formats in the range diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp index 7a47f62..f04add1 100644 --- a/services/surfaceflinger/LayerBase.cpp +++ b/services/surfaceflinger/LayerBase.cpp @@ -388,14 +388,9 @@ void LayerBase::clearWithOpenGL(const Region& clip, GLclampf red, const uint32_t fbHeight = hw.getHeight(); glColor4f(red,green,blue,alpha); -#if defined(GL_OES_EGL_image_external) - if (GLExtensions::getInstance().haveTextureExternal()) { - glDisable(GL_TEXTURE_EXTERNAL_OES); - } -#endif + glDisable(GL_TEXTURE_EXTERNAL_OES); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); - glDisable(GL_DITHER); Region::const_iterator it = clip.begin(); Region::const_iterator const end = clip.end(); @@ -457,12 +452,6 @@ void LayerBase::drawWithOpenGL(const Region& clip) const texCoords[3].u = 1; texCoords[3].v = 1; - if (needsDithering()) { - glEnable(GL_DITHER); - } else { - glDisable(GL_DITHER); - } - glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, mVertices); glTexCoordPointer(2, GL_FLOAT, 0, texCoords); @@ -476,6 +465,7 @@ void LayerBase::drawWithOpenGL(const Region& clip) const glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisable(GL_BLEND); } void LayerBase::dump(String8& result, char* buffer, size_t SIZE) const diff --git a/services/surfaceflinger/LayerDim.cpp b/services/surfaceflinger/LayerDim.cpp index 654817d..e665d7a 100644 --- a/services/surfaceflinger/LayerDim.cpp +++ b/services/surfaceflinger/LayerDim.cpp @@ -49,7 +49,8 @@ void LayerDim::onDraw(const Region& clip) const const DisplayHardware& hw(graphicPlane(0).displayHardware()); const GLfloat alpha = s.alpha/255.0f; const uint32_t fbHeight = hw.getHeight(); - glDisable(GL_DITHER); + glDisable(GL_TEXTURE_EXTERNAL_OES); + glDisable(GL_TEXTURE_2D); if (s.alpha == 0xFF) { glDisable(GL_BLEND); @@ -60,11 +61,6 @@ void LayerDim::onDraw(const Region& clip) const glColor4f(0, 0, 0, alpha); -#if defined(GL_OES_EGL_image_external) - if (GLExtensions::getInstance().haveTextureExternal()) { - glDisable(GL_TEXTURE_EXTERNAL_OES); - } -#endif glVertexPointer(2, GL_FLOAT, 0, mVertices); while (it != end) { @@ -73,8 +69,9 @@ void LayerDim::onDraw(const Region& clip) const glScissor(r.left, sy, r.width(), r.height()); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } + glDisable(GL_BLEND); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); } - glDisableClientState(GL_TEXTURE_COORD_ARRAY); } // --------------------------------------------------------------------------- diff --git a/services/surfaceflinger/LayerScreenshot.cpp b/services/surfaceflinger/LayerScreenshot.cpp new file mode 100644 index 0000000..e30ccbf --- /dev/null +++ b/services/surfaceflinger/LayerScreenshot.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdlib.h> +#include <stdint.h> +#include <sys/types.h> + +#include <utils/Errors.h> +#include <utils/Log.h> + +#include <ui/GraphicBuffer.h> + +#include "LayerScreenshot.h" +#include "SurfaceFlinger.h" +#include "DisplayHardware/DisplayHardware.h" + +namespace android { +// --------------------------------------------------------------------------- + +LayerScreenshot::LayerScreenshot(SurfaceFlinger* flinger, DisplayID display, + const sp<Client>& client) + : LayerBaseClient(flinger, display, client), + mTextureName(0), mFlinger(flinger) +{ +} + +LayerScreenshot::~LayerScreenshot() +{ + if (mTextureName) { + mFlinger->postMessageAsync( + new SurfaceFlinger::MessageDestroyGLTexture(mTextureName) ); + } +} + +status_t LayerScreenshot::capture() { + GLfloat u, v; + status_t result = mFlinger->renderScreenToTexture(0, &mTextureName, &u, &v); + if (result != NO_ERROR) { + return result; + } + + glBindTexture(GL_TEXTURE_2D, mTextureName); + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + mTexCoords[0] = 0; mTexCoords[1] = v; + mTexCoords[2] = 0; mTexCoords[3] = 0; + mTexCoords[4] = u; mTexCoords[5] = 0; + mTexCoords[6] = u; mTexCoords[7] = v; + + return NO_ERROR; +} + +void LayerScreenshot::onDraw(const Region& clip) const +{ + const State& s(drawingState()); + Region::const_iterator it = clip.begin(); + Region::const_iterator const end = clip.end(); + if (s.alpha>0 && (it != end)) { + const DisplayHardware& hw(graphicPlane(0).displayHardware()); + const GLfloat alpha = s.alpha/255.0f; + const uint32_t fbHeight = hw.getHeight(); + + if (s.alpha == 0xFF) { + glDisable(GL_BLEND); + } else { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + + glColor4f(0, 0, 0, alpha); + + glDisable(GL_TEXTURE_EXTERNAL_OES); + glEnable(GL_TEXTURE_2D); + + glBindTexture(GL_TEXTURE_2D, mTextureName); + glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(2, GL_FLOAT, 0, mTexCoords); + glVertexPointer(2, GL_FLOAT, 0, mVertices); + + while (it != end) { + const Rect& r = *it++; + const GLint sy = fbHeight - (r.top + r.height()); + glScissor(r.left, sy, r.width(), r.height()); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + } + + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2D); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + } +} + +// --------------------------------------------------------------------------- + +}; // namespace android diff --git a/services/surfaceflinger/LayerScreenshot.h b/services/surfaceflinger/LayerScreenshot.h new file mode 100644 index 0000000..e3a2b19 --- /dev/null +++ b/services/surfaceflinger/LayerScreenshot.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_LAYER_SCREENSHOT_H +#define ANDROID_LAYER_SCREENSHOT_H + +#include <stdint.h> +#include <sys/types.h> + +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#include "LayerBase.h" + +// --------------------------------------------------------------------------- + +namespace android { + +class LayerScreenshot : public LayerBaseClient +{ + GLuint mTextureName; + GLfloat mTexCoords[8]; + sp<SurfaceFlinger> mFlinger; +public: + LayerScreenshot(SurfaceFlinger* flinger, DisplayID display, + const sp<Client>& client); + virtual ~LayerScreenshot(); + + status_t capture(); + + virtual void onDraw(const Region& clip) const; + virtual bool isOpaque() const { return false; } + virtual bool isSecure() const { return false; } + virtual bool isProtectedByApp() const { return false; } + virtual bool isProtectedByDRM() const { return false; } + virtual const char* getTypeId() const { return "LayerScreenshot"; } +}; + +// --------------------------------------------------------------------------- + +}; // namespace android + +#endif // ANDROID_LAYER_SCREENSHOT_H diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 7c0cd9b..ad1995d 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -50,6 +50,7 @@ #include "DdmConnection.h" #include "Layer.h" #include "LayerDim.h" +#include "LayerScreenshot.h" #include "SurfaceFlinger.h" #include "DisplayHardware/DisplayHardware.h" @@ -445,6 +446,11 @@ bool SurfaceFlinger::threadLoop() // post surfaces (if needed) handlePageFlip(); + if (mDirtyRegion.isEmpty()) { + // nothing new to do. + return true; + } + if (UNLIKELY(mHwWorkListDirty)) { // build the h/w work list handleWorkList(); @@ -478,6 +484,9 @@ bool SurfaceFlinger::threadLoop() void SurfaceFlinger::postFramebuffer() { + // this should never happen. we do the flip anyways so we don't + // risk to cause a deadlock with hwc + LOGW_IF(mSwapRegion.isEmpty(), "mSwapRegion is empty"); const DisplayHardware& hw(graphicPlane(0).displayHardware()); const nsecs_t now = systemTime(); mDebugInSwapBuffers = now; @@ -938,7 +947,7 @@ void SurfaceFlinger::setupHardwareComposer(Region& dirtyInOut) // data. // // Also we want to make sure to not clear areas that belong to - // layers above that won't redraw (we would just erasing them), + // layers above that won't redraw (we would just be erasing them), // that is, we can't erase anything outside the dirty region. Region transparent; @@ -1029,8 +1038,9 @@ void SurfaceFlinger::debugFlashRegions() composeSurfaces(repaint); } + glDisable(GL_TEXTURE_EXTERNAL_OES); + glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); - glDisable(GL_DITHER); glDisable(GL_SCISSOR_TEST); static int toggle = 0; @@ -1073,9 +1083,6 @@ void SurfaceFlinger::drawWormhole() const const int32_t width = hw.getWidth(); const int32_t height = hw.getHeight(); - glDisable(GL_BLEND); - glDisable(GL_DITHER); - if (LIKELY(!mDebugBackground)) { glClearColor(0,0,0,0); Region::const_iterator it = region.begin(); @@ -1090,19 +1097,20 @@ void SurfaceFlinger::drawWormhole() const const GLshort vertices[][2] = { { 0, 0 }, { width, 0 }, { width, height }, { 0, height } }; const GLshort tcoords[][2] = { { 0, 0 }, { 1, 0 }, { 1, 1 }, { 0, 1 } }; + glVertexPointer(2, GL_SHORT, 0, vertices); glTexCoordPointer(2, GL_SHORT, 0, tcoords); glEnableClientState(GL_TEXTURE_COORD_ARRAY); -#if defined(GL_OES_EGL_image_external) - if (GLExtensions::getInstance().haveTextureExternal()) { - glDisable(GL_TEXTURE_EXTERNAL_OES); - } -#endif + + glDisable(GL_TEXTURE_EXTERNAL_OES); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, mWormholeTexName); glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glMatrixMode(GL_TEXTURE); glLoadIdentity(); + + glDisable(GL_BLEND); + glScalef(width*(1.0f/32.0f), height*(1.0f/32.0f), 1); Region::const_iterator it = region.begin(); Region::const_iterator const end = region.end(); @@ -1351,6 +1359,9 @@ sp<ISurface> SurfaceFlinger::createSurface( case eFXSurfaceDim: layer = createDimSurface(client, d, w, h, flags); break; + case eFXSurfaceScreenshot: + layer = createScreenshotSurface(client, d, w, h, flags); + break; } if (layer != 0) { @@ -1413,7 +1424,19 @@ sp<LayerDim> SurfaceFlinger::createDimSurface( uint32_t w, uint32_t h, uint32_t flags) { sp<LayerDim> layer = new LayerDim(this, display, client); - layer->initStates(w, h, flags); + return layer; +} + +sp<LayerScreenshot> SurfaceFlinger::createScreenshotSurface( + const sp<Client>& client, DisplayID display, + uint32_t w, uint32_t h, uint32_t flags) +{ + sp<LayerScreenshot> layer = new LayerScreenshot(this, display, client); + status_t err = layer->capture(); + if (err != NO_ERROR) { + layer.clear(); + LOGW("createScreenshotSurface failed (%s)", strerror(-err)); + } return layer; } @@ -1770,12 +1793,19 @@ status_t SurfaceFlinger::onTransact( void SurfaceFlinger::repaintEverything() { Mutex::Autolock _l(mStateLock); const DisplayHardware& hw(graphicPlane(0).displayHardware()); - mDirtyRegion.set(hw.bounds()); // careful that's not thread-safe + mDirtyRegion.set(hw.bounds()); signalEvent(); } // --------------------------------------------------------------------------- +status_t SurfaceFlinger::renderScreenToTexture(DisplayID dpy, + GLuint* textureName, GLfloat* uOut, GLfloat* vOut) +{ + Mutex::Autolock _l(mStateLock); + return renderScreenToTextureLocked(dpy, textureName, uOut, vOut); +} + status_t SurfaceFlinger::renderScreenToTextureLocked(DisplayID dpy, GLuint* textureName, GLfloat* uOut, GLfloat* vOut) { @@ -1813,6 +1843,8 @@ status_t SurfaceFlinger::renderScreenToTextureLocked(DisplayID dpy, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, tname, 0); // redraw the screen entirely... + glDisable(GL_TEXTURE_EXTERNAL_OES); + glDisable(GL_TEXTURE_2D); glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); @@ -1824,6 +1856,8 @@ status_t SurfaceFlinger::renderScreenToTextureLocked(DisplayID dpy, layer->drawForSreenShot(); } + hw.compositionComplete(); + // back to main framebuffer glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); glDisable(GL_SCISSOR_TEST); @@ -1839,11 +1873,6 @@ status_t SurfaceFlinger::renderScreenToTextureLocked(DisplayID dpy, status_t SurfaceFlinger::electronBeamOffAnimationImplLocked() { - status_t result = PERMISSION_DENIED; - - if (!GLExtensions::getInstance().haveFramebufferObject()) - return INVALID_OPERATION; - // get screen geometry const DisplayHardware& hw(graphicPlane(0).displayHardware()); const uint32_t hw_w = hw.getWidth(); @@ -1852,7 +1881,7 @@ status_t SurfaceFlinger::electronBeamOffAnimationImplLocked() GLfloat u, v; GLuint tname; - result = renderScreenToTextureLocked(0, &tname, &u, &v); + status_t result = renderScreenToTextureLocked(0, &tname, &u, &v); if (result != NO_ERROR) { return result; } @@ -2004,6 +2033,7 @@ status_t SurfaceFlinger::electronBeamOffAnimationImplLocked() glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDeleteTextures(1, &tname); glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); return NO_ERROR; } @@ -2028,10 +2058,6 @@ status_t SurfaceFlinger::electronBeamOnAnimationImplLocked() return result; } - // back to main framebuffer - glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); - glDisable(GL_SCISSOR_TEST); - GLfloat vtx[8]; const GLfloat texCoords[4][2] = { {0,v}, {0,0}, {u,0}, {u,v} }; glBindTexture(GL_TEXTURE_2D, tname); @@ -2148,6 +2174,7 @@ status_t SurfaceFlinger::electronBeamOnAnimationImplLocked() glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDeleteTextures(1, &tname); glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); return NO_ERROR; } diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 0e642c1..3c8f4e5 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -49,6 +49,7 @@ class DisplayHardware; class FreezeLock; class Layer; class LayerDim; +class LayerScreenshot; struct surface_flinger_cblk_t; #define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) @@ -186,6 +187,15 @@ public: void screenReleased(DisplayID dpy); void screenAcquired(DisplayID dpy); + status_t renderScreenToTexture(DisplayID dpy, + GLuint* textureName, GLfloat* uOut, GLfloat* vOut); + + status_t postMessageAsync(const sp<MessageBase>& msg, + nsecs_t reltime=0, uint32_t flags = 0); + + status_t postMessageSync(const sp<MessageBase>& msg, + nsecs_t reltime=0, uint32_t flags = 0); + status_t removeLayer(const sp<LayerBase>& layer); status_t addLayer(const sp<LayerBase>& layer); status_t invalidateLayerVisibility(const sp<LayerBase>& layer); @@ -195,6 +205,18 @@ public: GLuint getProtectedTexName() const { return mProtectedTexName; } + + class MessageDestroyGLTexture : public MessageBase { + GLuint texture; + public: + MessageDestroyGLTexture(GLuint texture) : texture(texture) { } + virtual bool handler() { + glDeleteTextures(1, &texture); + return true; + } + }; + + private: // DeathRecipient interface virtual void binderDied(const wp<IBinder>& who); @@ -204,7 +226,6 @@ private: friend class LayerBase; friend class LayerBaseClient; friend class Layer; - friend class LayerDim; sp<ISurface> createSurface( ISurfaceComposerClient::surface_data_t* params, @@ -222,6 +243,10 @@ private: const sp<Client>& client, DisplayID display, uint32_t w, uint32_t h, uint32_t flags); + sp<LayerScreenshot> createScreenshotSurface( + const sp<Client>& client, DisplayID display, + uint32_t w, uint32_t h, uint32_t flags); + status_t removeSurface(const sp<Client>& client, SurfaceID sid); status_t destroySurface(const wp<LayerBaseClient>& layer); uint32_t setClientStateLocked(const sp<Client>& client, const layer_state_t& s); @@ -329,12 +354,6 @@ private: mutable MessageQueue mEventQueue; - status_t postMessageAsync(const sp<MessageBase>& msg, - nsecs_t reltime=0, uint32_t flags = 0); - - status_t postMessageSync(const sp<MessageBase>& msg, - nsecs_t reltime=0, uint32_t flags = 0); - // access must be protected by mStateLock mutable Mutex mStateLock; State mCurrentState; |