diff options
| author | 2024-01-30 22:43:39 +0000 | |
|---|---|---|
| committer | 2024-01-30 22:43:39 +0000 | |
| commit | 9871f1a6e4ab7ea3c79afc0e5f8dcc41364d4896 (patch) | |
| tree | 2f239a90fa08137750866a98eeeeae5e23ba6c51 /libs/input/SpriteController.cpp | |
| parent | 24babf1f82a4e4cc5f06b5d32b56dac177811aa8 (diff) | |
| parent | bbc133a2ecf3654fd749388e18139f6689613253 (diff) | |
Merge changes from topic "udc_qpr2_merge" into aosp-main-future
* changes:
Fix fs-verity API for secondary users
Fix build for ag/25776653
Update @UsesReflection annotation
Merge Android 24Q1 Release (ab/11220357)
Diffstat (limited to 'libs/input/SpriteController.cpp')
| -rw-r--r-- | libs/input/SpriteController.cpp | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/libs/input/SpriteController.cpp b/libs/input/SpriteController.cpp index 130b204954b4..6dc45a6aebec 100644 --- a/libs/input/SpriteController.cpp +++ b/libs/input/SpriteController.cpp @@ -31,12 +31,19 @@ SpriteController::SpriteController(const sp<Looper>& looper, int32_t overlayLaye ParentSurfaceProvider parentSurfaceProvider) : mLooper(looper), mOverlayLayer(overlayLayer), + mHandler(sp<Handler>::make()), mParentSurfaceProvider(std::move(parentSurfaceProvider)) { - mHandler = new WeakMessageHandler(this); mLocked.transactionNestingCount = 0; mLocked.deferredSpriteUpdate = false; } +void SpriteController::setHandlerController( + const std::shared_ptr<android::SpriteController>& controller) { + // Initialize the weak message handler outside the constructor, because we cannot get a shared + // pointer to self in the constructor. + mHandler->spriteController = controller; +} + SpriteController::~SpriteController() { mLooper->removeMessages(mHandler); @@ -47,7 +54,7 @@ SpriteController::~SpriteController() { } sp<Sprite> SpriteController::createSprite() { - return new SpriteImpl(this); + return sp<SpriteImpl>::make(*this); } void SpriteController::openTransaction() { @@ -65,7 +72,7 @@ void SpriteController::closeTransaction() { mLocked.transactionNestingCount -= 1; if (mLocked.transactionNestingCount == 0 && mLocked.deferredSpriteUpdate) { mLocked.deferredSpriteUpdate = false; - mLooper->sendMessage(mHandler, Message(MSG_UPDATE_SPRITES)); + mLooper->sendMessage(mHandler, Message(Handler::MSG_UPDATE_SPRITES)); } } @@ -76,7 +83,7 @@ void SpriteController::invalidateSpriteLocked(const sp<SpriteImpl>& sprite) { if (mLocked.transactionNestingCount != 0) { mLocked.deferredSpriteUpdate = true; } else { - mLooper->sendMessage(mHandler, Message(MSG_UPDATE_SPRITES)); + mLooper->sendMessage(mHandler, Message(Handler::MSG_UPDATE_SPRITES)); } } } @@ -85,18 +92,7 @@ void SpriteController::disposeSurfaceLocked(const sp<SurfaceControl>& surfaceCon bool wasEmpty = mLocked.disposedSurfaces.empty(); mLocked.disposedSurfaces.push_back(surfaceControl); if (wasEmpty) { - mLooper->sendMessage(mHandler, Message(MSG_DISPOSE_SURFACES)); - } -} - -void SpriteController::handleMessage(const Message& message) { - switch (message.what) { - case MSG_UPDATE_SPRITES: - doUpdateSprites(); - break; - case MSG_DISPOSE_SURFACES: - doDisposeSurfaces(); - break; + mLooper->sendMessage(mHandler, Message(Handler::MSG_DISPOSE_SURFACES)); } } @@ -327,7 +323,7 @@ void SpriteController::doDisposeSurfaces() { void SpriteController::ensureSurfaceComposerClient() { if (mSurfaceComposerClient == NULL) { - mSurfaceComposerClient = new SurfaceComposerClient(); + mSurfaceComposerClient = sp<SurfaceComposerClient>::make(); } } @@ -353,25 +349,41 @@ sp<SurfaceControl> SpriteController::obtainSurface(int32_t width, int32_t height return surfaceControl; } -// --- SpriteController::SpriteImpl --- +// --- SpriteController::Handler --- -SpriteController::SpriteImpl::SpriteImpl(const sp<SpriteController> controller) : - mController(controller) { +void SpriteController::Handler::handleMessage(const android::Message& message) { + auto controller = spriteController.lock(); + if (!controller) { + return; + } + + switch (message.what) { + case MSG_UPDATE_SPRITES: + controller->doUpdateSprites(); + break; + case MSG_DISPOSE_SURFACES: + controller->doDisposeSurfaces(); + break; + } } +// --- SpriteController::SpriteImpl --- + +SpriteController::SpriteImpl::SpriteImpl(SpriteController& controller) : mController(controller) {} + SpriteController::SpriteImpl::~SpriteImpl() { - AutoMutex _m(mController->mLock); + AutoMutex _m(mController.mLock); // Let the controller take care of deleting the last reference to sprite // surfaces so that we do not block the caller on an IPC here. if (mLocked.state.surfaceControl != NULL) { - mController->disposeSurfaceLocked(mLocked.state.surfaceControl); + mController.disposeSurfaceLocked(mLocked.state.surfaceControl); mLocked.state.surfaceControl.clear(); } } void SpriteController::SpriteImpl::setIcon(const SpriteIcon& icon) { - AutoMutex _l(mController->mLock); + AutoMutex _l(mController.mLock); uint32_t dirty; if (icon.isValid()) { @@ -401,7 +413,7 @@ void SpriteController::SpriteImpl::setIcon(const SpriteIcon& icon) { } void SpriteController::SpriteImpl::setVisible(bool visible) { - AutoMutex _l(mController->mLock); + AutoMutex _l(mController.mLock); if (mLocked.state.visible != visible) { mLocked.state.visible = visible; @@ -410,7 +422,7 @@ void SpriteController::SpriteImpl::setVisible(bool visible) { } void SpriteController::SpriteImpl::setPosition(float x, float y) { - AutoMutex _l(mController->mLock); + AutoMutex _l(mController.mLock); if (mLocked.state.positionX != x || mLocked.state.positionY != y) { mLocked.state.positionX = x; @@ -420,7 +432,7 @@ void SpriteController::SpriteImpl::setPosition(float x, float y) { } void SpriteController::SpriteImpl::setLayer(int32_t layer) { - AutoMutex _l(mController->mLock); + AutoMutex _l(mController.mLock); if (mLocked.state.layer != layer) { mLocked.state.layer = layer; @@ -429,7 +441,7 @@ void SpriteController::SpriteImpl::setLayer(int32_t layer) { } void SpriteController::SpriteImpl::setAlpha(float alpha) { - AutoMutex _l(mController->mLock); + AutoMutex _l(mController.mLock); if (mLocked.state.alpha != alpha) { mLocked.state.alpha = alpha; @@ -439,7 +451,7 @@ void SpriteController::SpriteImpl::setAlpha(float alpha) { void SpriteController::SpriteImpl::setTransformationMatrix( const SpriteTransformationMatrix& matrix) { - AutoMutex _l(mController->mLock); + AutoMutex _l(mController.mLock); if (mLocked.state.transformationMatrix != matrix) { mLocked.state.transformationMatrix = matrix; @@ -448,7 +460,7 @@ void SpriteController::SpriteImpl::setTransformationMatrix( } void SpriteController::SpriteImpl::setDisplayId(int32_t displayId) { - AutoMutex _l(mController->mLock); + AutoMutex _l(mController.mLock); if (mLocked.state.displayId != displayId) { mLocked.state.displayId = displayId; @@ -461,7 +473,7 @@ void SpriteController::SpriteImpl::invalidateLocked(uint32_t dirty) { mLocked.state.dirty |= dirty; if (!wasDirty) { - mController->invalidateSpriteLocked(this); + mController.invalidateSpriteLocked(sp<SpriteImpl>::fromExisting(this)); } } |