diff --git a/include/surfaceflinger/ISurfaceComposer.h b/include/surfaceflinger/ISurfaceComposer.h index 58fd89d3b..5eb09c796 100644 --- a/include/surfaceflinger/ISurfaceComposer.h +++ b/include/surfaceflinger/ISurfaceComposer.h @@ -33,9 +33,8 @@ namespace android { // ---------------------------------------------------------------------------- -class ComposerState; -class IDisplayEventConnection; class IMemoryHeap; +class ComposerState; class ISurfaceComposer : public IInterface { @@ -125,19 +124,13 @@ public: uint32_t reqWidth, uint32_t reqHeight, uint32_t minLayerZ, uint32_t maxLayerZ) = 0; - /* triggers screen off animation */ virtual status_t turnElectronBeamOff(int32_t mode) = 0; - - /* triggers screen on animation */ virtual status_t turnElectronBeamOn(int32_t mode) = 0; /* verify that an ISurfaceTexture was created by SurfaceFlinger. */ virtual bool authenticateSurfaceTexture( const sp& surface) const = 0; - - /* return an IDisplayEventConnection */ - virtual sp createDisplayEventConnection() = 0; }; // ---------------------------------------------------------------------------- @@ -158,7 +151,6 @@ public: TURN_ELECTRON_BEAM_OFF, TURN_ELECTRON_BEAM_ON, AUTHENTICATE_SURFACE, - CREATE_DISPLAY_EVENT_CONNECTION, }; virtual status_t onTransact( uint32_t code, diff --git a/libs/gui/Android.mk b/libs/gui/Android.mk index b8be67d44..b7e3ee32c 100644 --- a/libs/gui/Android.mk +++ b/libs/gui/Android.mk @@ -3,8 +3,6 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ BitTube.cpp \ - DisplayEventReceiver.cpp \ - IDisplayEventConnection.cpp \ ISensorEventConnection.cpp \ ISensorServer.cpp \ ISurfaceTexture.cpp \ diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp index db3282781..86bc62aa2 100644 --- a/libs/gui/ISurfaceComposer.cpp +++ b/libs/gui/ISurfaceComposer.cpp @@ -29,9 +29,6 @@ #include -#include -#include - #include #include @@ -47,8 +44,6 @@ namespace android { -class IDisplayEventConnection; - class BpSurfaceComposer : public BpInterface { public: @@ -179,27 +174,6 @@ public: } return result != 0; } - - virtual sp createDisplayEventConnection() - { - Parcel data, reply; - sp result; - int err = data.writeInterfaceToken( - ISurfaceComposer::getInterfaceDescriptor()); - if (err != NO_ERROR) { - return result; - } - err = remote()->transact( - BnSurfaceComposer::CREATE_DISPLAY_EVENT_CONNECTION, - data, &reply); - if (err != NO_ERROR) { - LOGE("ISurfaceComposer::createDisplayEventConnection: error performing " - "transaction: %s (%d)", strerror(-err), -err); - return result; - } - result = interface_cast(reply.readStrongBinder()); - return result; - } }; IMPLEMENT_META_INTERFACE(SurfaceComposer, "android.ui.ISurfaceComposer"); @@ -280,12 +254,6 @@ status_t BnSurfaceComposer::onTransact( int32_t result = authenticateSurfaceTexture(surfaceTexture) ? 1 : 0; reply->writeInt32(result); } break; - case CREATE_DISPLAY_EVENT_CONNECTION: { - CHECK_INTERFACE(ISurfaceComposer, data, reply); - sp connection(createDisplayEventConnection()); - reply->writeStrongBinder(connection->asBinder()); - return NO_ERROR; - } break; default: return BBinder::onTransact(code, data, reply, flags); } diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk index 95d651acc..f63c0c12c 100644 --- a/services/surfaceflinger/Android.mk +++ b/services/surfaceflinger/Android.mk @@ -2,22 +2,19 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - EventThread.cpp \ - Layer.cpp \ - LayerBase.cpp \ - LayerDim.cpp \ - LayerScreenshot.cpp \ - DdmConnection.cpp \ - DisplayHardware/DisplayHardware.cpp \ + Layer.cpp \ + LayerBase.cpp \ + LayerDim.cpp \ + LayerScreenshot.cpp \ + DdmConnection.cpp \ + DisplayHardware/DisplayHardware.cpp \ DisplayHardware/DisplayHardwareBase.cpp \ - DisplayHardware/HWComposer.cpp \ - DisplayHardware/VSyncBarrier.cpp \ - DisplayEventConnection.cpp \ - GLExtensions.cpp \ - MessageQueue.cpp \ - SurfaceFlinger.cpp \ - SurfaceTextureLayer.cpp \ - Transform.cpp \ + DisplayHardware/HWComposer.cpp \ + GLExtensions.cpp \ + MessageQueue.cpp \ + SurfaceFlinger.cpp \ + SurfaceTextureLayer.cpp \ + Transform.cpp \ LOCAL_CFLAGS:= -DLOG_TAG=\"SurfaceFlinger\" diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp b/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp index 3bbc75e6f..f94d32149 100644 --- a/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp +++ b/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp @@ -140,7 +140,6 @@ void DisplayHardware::init(uint32_t dpy) mDpiX = mNativeWindow->xdpi; mDpiY = mNativeWindow->ydpi; mRefreshRate = fbDev->fps; - mNextFakeVSync = 0; /* FIXME: this is a temporary HACK until we are able to report the refresh rate @@ -153,8 +152,6 @@ void DisplayHardware::init(uint32_t dpy) #warning "refresh rate set via makefile to REFRESH_RATE" #endif - mRefreshPeriod = nsecs_t(1e9 / mRefreshRate); - EGLint w, h, dummy; EGLint numConfigs=0; EGLSurface surface; @@ -349,37 +346,6 @@ uint32_t DisplayHardware::getPageFlipCount() const { return mPageFlipCount; } -// this needs to be thread safe -nsecs_t DisplayHardware::waitForVSync() const { - nsecs_t timestamp; - if (mVSync.wait(×tamp) < 0) { - // vsync not supported! - usleep( getDelayToNextVSyncUs(×tamp) ); - } - return timestamp; -} - -int32_t DisplayHardware::getDelayToNextVSyncUs(nsecs_t* timestamp) const { - Mutex::Autolock _l(mFakeVSyncMutex); - const nsecs_t period = mRefreshPeriod; - const nsecs_t now = systemTime(CLOCK_MONOTONIC); - nsecs_t next_vsync = mNextFakeVSync; - nsecs_t sleep = next_vsync - now; - if (sleep < 0) { - // we missed, find where the next vsync should be - sleep = (period - ((now - next_vsync) % period)); - next_vsync = now + sleep; - } - mNextFakeVSync = next_vsync + period; - timestamp[0] = next_vsync; - - // round to next microsecond - int32_t sleep_us = (sleep + 999LL) / 1000LL; - - // guaranteed to be > 0 - return sleep_us; -} - status_t DisplayHardware::compositionComplete() const { return mNativeWindow->compositionComplete(); } diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardware.h b/services/surfaceflinger/DisplayHardware/DisplayHardware.h index 45d4b45ad..f02c95414 100644 --- a/services/surfaceflinger/DisplayHardware/DisplayHardware.h +++ b/services/surfaceflinger/DisplayHardware/DisplayHardware.h @@ -32,7 +32,6 @@ #include "GLExtensions.h" #include "DisplayHardware/DisplayHardwareBase.h" -#include "DisplayHardware/VSyncBarrier.h" namespace android { @@ -75,9 +74,6 @@ public: uint32_t getMaxTextureSize() const; uint32_t getMaxViewportDims() const; - // waits for the next vsync and returns the timestamp of when it happened - nsecs_t waitForVSync() const; - uint32_t getPageFlipCount() const; EGLDisplay getEGLDisplay() const { return mDisplay; } @@ -99,7 +95,6 @@ public: private: void init(uint32_t displayIndex) __attribute__((noinline)); void fini() __attribute__((noinline)); - int32_t getDelayToNextVSyncUs(nsecs_t* timestamp) const; sp mFlinger; EGLDisplay mDisplay; @@ -117,12 +112,7 @@ private: mutable uint32_t mPageFlipCount; GLint mMaxViewportDims[2]; GLint mMaxTextureSize; - VSyncBarrier mVSync; - - mutable Mutex mFakeVSyncMutex; - mutable nsecs_t mNextFakeVSync; - nsecs_t mRefreshPeriod; - + HWComposer* mHwc; sp mNativeWindow; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index d5a8d083e..39f0f401b 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -34,8 +34,6 @@ #include #include -#include - #include #include #include @@ -48,8 +46,6 @@ #include #include "clz.h" -#include "DisplayEventConnection.h" -#include "EventThread.h" #include "GLExtensions.h" #include "DdmConnection.h" #include "Layer.h" @@ -297,16 +293,12 @@ status_t SurfaceFlinger::readyToRun() // put the origin in the left-bottom corner glOrthof(0, w, 0, h, 0, 1); // l=0, r=w ; b=0, t=h - - // start the EventThread - mEventThread = new EventThread(this); + mReadyToRunBarrier.open(); /* * We're now ready to accept clients... */ - mReadyToRunBarrier.open(); - // start boot animation property_set("ctl.start", "bootanim"); @@ -327,22 +319,6 @@ void SurfaceFlinger::signalEvent() { mEventQueue.invalidate(); } -status_t SurfaceFlinger::postMessageAsync(const sp& msg, - nsecs_t reltime, uint32_t flags) { - return mEventQueue.postMessage(msg, reltime); -} - -status_t SurfaceFlinger::postMessageSync(const sp& msg, - nsecs_t reltime, uint32_t flags) { - status_t res = mEventQueue.postMessage(msg, reltime); - if (res == NO_ERROR) { - msg->wait(); - } - return res; -} - -// ---------------------------------------------------------------------------- - bool SurfaceFlinger::authenticateSurfaceTexture( const sp& surfaceTexture) const { Mutex::Autolock _l(mStateLock); @@ -384,17 +360,20 @@ bool SurfaceFlinger::authenticateSurfaceTexture( return false; } -// ---------------------------------------------------------------------------- - -sp SurfaceFlinger::createDisplayEventConnection() { - sp result(new DisplayEventConnection(this)); - mEventThread->registerDisplayEventConnection(result); - return result; +status_t SurfaceFlinger::postMessageAsync(const sp& msg, + nsecs_t reltime, uint32_t flags) +{ + return mEventQueue.postMessage(msg, reltime, flags); } -void SurfaceFlinger::cleanupDisplayEventConnection( - const wp& connection) { - mEventThread->unregisterDisplayEventConnection(connection); +status_t SurfaceFlinger::postMessageSync(const sp& msg, + nsecs_t reltime, uint32_t flags) +{ + status_t res = mEventQueue.postMessage(msg, reltime, flags); + if (res == NO_ERROR) { + msg->wait(); + } + return res; } // ---------------------------------------------------------------------------- @@ -453,7 +432,7 @@ bool SurfaceFlinger::threadLoop() } else { // pretend we did the post hw.compositionComplete(); - hw.waitForVSync(); + usleep(16667); // 60 fps period } return true; } @@ -1592,17 +1571,10 @@ status_t SurfaceFlinger::dump(int fd, const Vector& args) result.append(buffer); } - /* - * VSYNC state - */ - mEventThread->dump(result, buffer, SIZE); - /* * Dump HWComposer state */ HWComposer& hwc(hw.getHwComposer()); - snprintf(buffer, SIZE, "h/w composer state:\n"); - result.append(buffer); snprintf(buffer, SIZE, " h/w composer %s and %s\n", hwc.initCheck()==NO_ERROR ? "present" : "not present", (mDebugDisableHWC || mDebugRegion) ? "disabled" : "enabled"); diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 1039f471e..17028dbb6 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -46,8 +46,6 @@ namespace android { class Client; class DisplayHardware; -class DisplayEventConnection; -class EventThread; class Layer; class LayerDim; class LayerScreenshot; @@ -173,7 +171,6 @@ public: int orientation, uint32_t flags); virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags); virtual bool authenticateSurfaceTexture(const sp& surface) const; - virtual sp createDisplayEventConnection(); virtual status_t captureScreen(DisplayID dpy, sp* heap, @@ -225,7 +222,6 @@ private: private: friend class Client; - friend class DisplayEventConnection; friend class LayerBase; friend class LayerBaseClient; friend class Layer; @@ -335,9 +331,6 @@ private: status_t electronBeamOffAnimationImplLocked(); status_t electronBeamOnAnimationImplLocked(); - void cleanupDisplayEventConnection( - const wp& connection); - void debugFlashRegions(); void debugShowFPS() const; void drawWormhole() const; @@ -368,7 +361,6 @@ private: GLuint mWormholeTexName; GLuint mProtectedTexName; nsecs_t mBootTime; - sp mEventThread; // Can only accessed from the main thread, these members // don't need synchronization