diff options
author | Mathias Agopian <mathias@google.com> | 2011-06-15 22:40:07 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-06-15 22:40:07 -0700 |
commit | 0887b8c2e583e682cd2c1bc909cb3fdbec704004 (patch) | |
tree | 1879c2cedf900dc65df12e6f2b8eb3c5011047ab /services | |
parent | d5244e0a88ed2f843651aa5ffdc71a45c968e0f3 (diff) | |
parent | 8e18668d14adf601cbe5973030c310ec23d88461 (diff) | |
download | frameworks_base-0887b8c2e583e682cd2c1bc909cb3fdbec704004.zip frameworks_base-0887b8c2e583e682cd2c1bc909cb3fdbec704004.tar.gz frameworks_base-0887b8c2e583e682cd2c1bc909cb3fdbec704004.tar.bz2 |
am 8e18668d: revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)
* commit '8e18668d14adf601cbe5973030c310ec23d88461':
revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)
Diffstat (limited to 'services')
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 5 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.h | 3 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 28 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 6 |
4 files changed, 1 insertions, 41 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index a35811d..731d82b 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -61,7 +61,6 @@ Layer::Layer(SurfaceFlinger* flinger, mBufferManager(mTextureManager), mWidth(0), mHeight(0), mNeedsScaling(false), mFixedSize(false) { - setDestroyer(this); } Layer::~Layer() @@ -78,10 +77,6 @@ Layer::~Layer() } } -void Layer::destroy(RefBase const* base) { - mFlinger->destroyLayer(static_cast<LayerBase const*>(base)); -} - status_t Layer::setToken(const sp<UserClient>& userClient, SharedClient* sharedClient, int32_t token) { diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 5330c08..4c92278 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -44,7 +44,7 @@ class UserClient; // --------------------------------------------------------------------------- -class Layer : public LayerBaseClient, private RefBase::Destroyer +class Layer : public LayerBaseClient { public: Layer(SurfaceFlinger* flinger, DisplayID display, @@ -92,7 +92,6 @@ public: return mFreezeLock; } protected: - virtual void destroy(RefBase const* base); virtual void dump(String8& result, char* scratch, size_t size) const; private: diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index a7b5857..33cb9a4 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -387,9 +387,6 @@ bool SurfaceFlinger::threadLoop() { waitForEvent(); - // call Layer's destructor - handleDestroyLayers(); - // check for transactions if (UNLIKELY(mConsoleSignals)) { handleConsoleEvents(); @@ -583,31 +580,6 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags) commitTransaction(); } -void SurfaceFlinger::destroyLayer(LayerBase const* layer) -{ - Mutex::Autolock _l(mDestroyedLayerLock); - mDestroyedLayers.add(layer); - signalEvent(); -} - -void SurfaceFlinger::handleDestroyLayers() -{ - Vector<LayerBase const *> destroyedLayers; - - { // scope for the lock - Mutex::Autolock _l(mDestroyedLayerLock); - destroyedLayers = mDestroyedLayers; - mDestroyedLayers.clear(); - } - - // call destructors without a lock held - const size_t count = destroyedLayers.size(); - for (size_t i=0 ; i<count ; i++) { - //LOGD("destroying %s", destroyedLayers[i]->getName().string()); - delete destroyedLayers[i]; - } -} - sp<FreezeLock> SurfaceFlinger::getFreezeLock() const { return new FreezeLock(const_cast<SurfaceFlinger *>(this)); diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index f81b074..31c20d7 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -233,7 +233,6 @@ public: status_t addLayer(const sp<LayerBase>& layer); status_t invalidateLayerVisibility(const sp<LayerBase>& layer); void invalidateHwcGeometry(); - void destroyLayer(LayerBase const* layer); sp<Layer> getLayer(const sp<ISurface>& sur) const; @@ -307,7 +306,6 @@ private: void handleConsoleEvents(); void handleTransaction(uint32_t transactionFlags); void handleTransactionLocked(uint32_t transactionFlags); - void handleDestroyLayers(); void computeVisibleRegions( LayerVector& currentLayers, @@ -430,10 +428,6 @@ private: mutable Barrier mReadyToRunBarrier; - // protected by mDestroyedLayerLock; - mutable Mutex mDestroyedLayerLock; - Vector<LayerBase const *> mDestroyedLayers; - // atomic variables enum { eConsoleReleased = 1, |