Loading libs/input/SpriteController.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -70,8 +70,8 @@ void SpriteController::closeTransaction() { } void SpriteController::invalidateSpriteLocked(const sp<SpriteImpl>& sprite) { bool wasEmpty = mLocked.invalidatedSprites.isEmpty(); mLocked.invalidatedSprites.push(sprite); bool wasEmpty = mLocked.invalidatedSprites.empty(); mLocked.invalidatedSprites.push_back(sprite); if (wasEmpty) { if (mLocked.transactionNestingCount != 0) { mLocked.deferredSpriteUpdate = true; Loading @@ -82,8 +82,8 @@ void SpriteController::invalidateSpriteLocked(const sp<SpriteImpl>& sprite) { } void SpriteController::disposeSurfaceLocked(const sp<SurfaceControl>& surfaceControl) { bool wasEmpty = mLocked.disposedSurfaces.isEmpty(); mLocked.disposedSurfaces.push(surfaceControl); bool wasEmpty = mLocked.disposedSurfaces.empty(); mLocked.disposedSurfaces.push_back(surfaceControl); if (wasEmpty) { mLooper->sendMessage(mHandler, Message(MSG_DISPOSE_SURFACES)); } Loading Loading @@ -113,7 +113,7 @@ void SpriteController::doUpdateSprites() { numSprites = mLocked.invalidatedSprites.size(); for (size_t i = 0; i < numSprites; i++) { const sp<SpriteImpl>& sprite = mLocked.invalidatedSprites.itemAt(i); const sp<SpriteImpl>& sprite = mLocked.invalidatedSprites[i]; updates.push(SpriteUpdate(sprite, sprite->getStateLocked())); sprite->resetDirtyLocked(); Loading Loading @@ -305,7 +305,7 @@ void SpriteController::doUpdateSprites() { void SpriteController::doDisposeSurfaces() { // Collect disposed surfaces. Vector<sp<SurfaceControl> > disposedSurfaces; std::vector<sp<SurfaceControl>> disposedSurfaces; { // acquire lock AutoMutex _l(mLock); Loading @@ -313,6 +313,13 @@ void SpriteController::doDisposeSurfaces() { mLocked.disposedSurfaces.clear(); } // release lock // Remove the parent from all surfaces. SurfaceComposerClient::Transaction t; for (const sp<SurfaceControl>& sc : disposedSurfaces) { t.reparent(sc, nullptr); } t.apply(); // Release the last reference to each surface outside of the lock. // We don't want the surfaces to be deleted while we are holding our lock. disposedSurfaces.clear(); Loading libs/input/SpriteController.h +2 −2 Original line number Diff line number Diff line Loading @@ -251,8 +251,8 @@ private: sp<SurfaceComposerClient> mSurfaceComposerClient; struct Locked { Vector<sp<SpriteImpl> > invalidatedSprites; Vector<sp<SurfaceControl> > disposedSurfaces; std::vector<sp<SpriteImpl>> invalidatedSprites; std::vector<sp<SurfaceControl>> disposedSurfaces; uint32_t transactionNestingCount; bool deferredSpriteUpdate; } mLocked; // guarded by mLock Loading Loading
libs/input/SpriteController.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -70,8 +70,8 @@ void SpriteController::closeTransaction() { } void SpriteController::invalidateSpriteLocked(const sp<SpriteImpl>& sprite) { bool wasEmpty = mLocked.invalidatedSprites.isEmpty(); mLocked.invalidatedSprites.push(sprite); bool wasEmpty = mLocked.invalidatedSprites.empty(); mLocked.invalidatedSprites.push_back(sprite); if (wasEmpty) { if (mLocked.transactionNestingCount != 0) { mLocked.deferredSpriteUpdate = true; Loading @@ -82,8 +82,8 @@ void SpriteController::invalidateSpriteLocked(const sp<SpriteImpl>& sprite) { } void SpriteController::disposeSurfaceLocked(const sp<SurfaceControl>& surfaceControl) { bool wasEmpty = mLocked.disposedSurfaces.isEmpty(); mLocked.disposedSurfaces.push(surfaceControl); bool wasEmpty = mLocked.disposedSurfaces.empty(); mLocked.disposedSurfaces.push_back(surfaceControl); if (wasEmpty) { mLooper->sendMessage(mHandler, Message(MSG_DISPOSE_SURFACES)); } Loading Loading @@ -113,7 +113,7 @@ void SpriteController::doUpdateSprites() { numSprites = mLocked.invalidatedSprites.size(); for (size_t i = 0; i < numSprites; i++) { const sp<SpriteImpl>& sprite = mLocked.invalidatedSprites.itemAt(i); const sp<SpriteImpl>& sprite = mLocked.invalidatedSprites[i]; updates.push(SpriteUpdate(sprite, sprite->getStateLocked())); sprite->resetDirtyLocked(); Loading Loading @@ -305,7 +305,7 @@ void SpriteController::doUpdateSprites() { void SpriteController::doDisposeSurfaces() { // Collect disposed surfaces. Vector<sp<SurfaceControl> > disposedSurfaces; std::vector<sp<SurfaceControl>> disposedSurfaces; { // acquire lock AutoMutex _l(mLock); Loading @@ -313,6 +313,13 @@ void SpriteController::doDisposeSurfaces() { mLocked.disposedSurfaces.clear(); } // release lock // Remove the parent from all surfaces. SurfaceComposerClient::Transaction t; for (const sp<SurfaceControl>& sc : disposedSurfaces) { t.reparent(sc, nullptr); } t.apply(); // Release the last reference to each surface outside of the lock. // We don't want the surfaces to be deleted while we are holding our lock. disposedSurfaces.clear(); Loading
libs/input/SpriteController.h +2 −2 Original line number Diff line number Diff line Loading @@ -251,8 +251,8 @@ private: sp<SurfaceComposerClient> mSurfaceComposerClient; struct Locked { Vector<sp<SpriteImpl> > invalidatedSprites; Vector<sp<SurfaceControl> > disposedSurfaces; std::vector<sp<SpriteImpl>> invalidatedSprites; std::vector<sp<SurfaceControl>> disposedSurfaces; uint32_t transactionNestingCount; bool deferredSpriteUpdate; } mLocked; // guarded by mLock Loading