Loading libs/input/Android.bp +6 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,12 @@ package { cc_library_shared { name: "libinputservice", defaults: [ // Build using the same flags and configurations as inputflinger. "inputflinger_defaults", ], host_supported: false, srcs: [ "PointerController.cpp", "PointerControllerContext.cpp", Loading Loading @@ -50,12 +56,4 @@ cc_library_shared { ], include_dirs: ["frameworks/native/services"], cflags: [ "-Wall", "-Wextra", "-Werror", "-Wthread-safety", ], } libs/input/PointerController.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -103,7 +103,7 @@ PointerController::PointerController(const sp<PointerControllerPolicyInterface>& WindowListenerConsumer unregisterListener) : mContext(policy, looper, spriteController, *this), mCursorController(mContext), mDisplayInfoListener(new DisplayInfoListener(this)), mDisplayInfoListener(sp<DisplayInfoListener>::make(this)), mUnregisterWindowInfosListener(std::move(unregisterListener)) { std::scoped_lock lock(getLock()); mLocked.presentation = Presentation::SPOT; Loading libs/input/PointerControllerContext.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -36,8 +36,8 @@ PointerControllerContext::PointerControllerContext( : mPolicy(policy), mLooper(looper), mSpriteController(spriteController), mHandler(new MessageHandler()), mCallback(new LooperCallback()), mHandler(sp<MessageHandler>::make()), mCallback(sp<LooperCallback>::make()), mController(controller), mAnimator(*this) { std::scoped_lock lock(mLock); Loading libs/input/SpriteController.cpp +34 −21 Original line number Diff line number Diff line Loading @@ -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 sp<android::SpriteController>& controller) { // Initialize the weak message handler outside the constructor, because we cannot get a strong // pointer to self in the constructor as the initial ref count is only incremented after // construction. mHandler->spriteController = controller; } SpriteController::~SpriteController() { mLooper->removeMessages(mHandler); Loading @@ -47,7 +54,7 @@ SpriteController::~SpriteController() { } sp<Sprite> SpriteController::createSprite() { return new SpriteImpl(this); return sp<SpriteImpl>::make(sp<SpriteController>::fromExisting(this)); } void SpriteController::openTransaction() { Loading @@ -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)); } } Loading @@ -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)); } } } Loading @@ -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)); } } Loading Loading @@ -327,7 +323,7 @@ void SpriteController::doDisposeSurfaces() { void SpriteController::ensureSurfaceComposerClient() { if (mSurfaceComposerClient == NULL) { mSurfaceComposerClient = new SurfaceComposerClient(); mSurfaceComposerClient = sp<SurfaceComposerClient>::make(); } } Loading @@ -353,12 +349,29 @@ 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.promote(); 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(const sp<SpriteController>& controller) : mController(controller) {} SpriteController::SpriteImpl::~SpriteImpl() { AutoMutex _m(mController->mLock); Loading Loading @@ -461,7 +474,7 @@ void SpriteController::SpriteImpl::invalidateLocked(uint32_t dirty) { mLocked.state.dirty |= dirty; if (!wasDirty) { mController->invalidateSpriteLocked(this); mController->invalidateSpriteLocked(sp<SpriteImpl>::fromExisting(this)); } } Loading libs/input/SpriteController.h +12 −7 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ public: * * Clients are responsible for animating sprites by periodically updating their properties. */ class SpriteController : public MessageHandler { class SpriteController : public RefBase { protected: virtual ~SpriteController(); Loading @@ -117,6 +117,9 @@ public: using ParentSurfaceProvider = std::function<sp<SurfaceControl>(int /*displayId*/)>; SpriteController(const sp<Looper>& looper, int32_t overlayLayer, ParentSurfaceProvider parent); /* Initialize the callback for the message handler. */ void setHandlerController(const sp<SpriteController>& controller); /* Creates a new sprite, initially invisible. */ virtual sp<Sprite> createSprite(); Loading @@ -129,9 +132,12 @@ public: virtual void closeTransaction(); private: enum { MSG_UPDATE_SPRITES, MSG_DISPOSE_SURFACES, class Handler : public virtual android::MessageHandler { public: enum { MSG_UPDATE_SPRITES, MSG_DISPOSE_SURFACES }; void handleMessage(const Message& message) override; wp<SpriteController> spriteController; }; enum { Loading Loading @@ -192,7 +198,7 @@ private: virtual ~SpriteImpl(); public: explicit SpriteImpl(const sp<SpriteController> controller); explicit SpriteImpl(const sp<SpriteController>& controller); virtual void setIcon(const SpriteIcon& icon); virtual void setVisible(bool visible); Loading Loading @@ -245,7 +251,7 @@ private: sp<Looper> mLooper; const int32_t mOverlayLayer; sp<WeakMessageHandler> mHandler; sp<Handler> mHandler; ParentSurfaceProvider mParentSurfaceProvider; sp<SurfaceComposerClient> mSurfaceComposerClient; Loading @@ -260,7 +266,6 @@ private: void invalidateSpriteLocked(const sp<SpriteImpl>& sprite); void disposeSurfaceLocked(const sp<SurfaceControl>& surfaceControl); void handleMessage(const Message& message); void doUpdateSprites(); void doDisposeSurfaces(); Loading Loading
libs/input/Android.bp +6 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,12 @@ package { cc_library_shared { name: "libinputservice", defaults: [ // Build using the same flags and configurations as inputflinger. "inputflinger_defaults", ], host_supported: false, srcs: [ "PointerController.cpp", "PointerControllerContext.cpp", Loading Loading @@ -50,12 +56,4 @@ cc_library_shared { ], include_dirs: ["frameworks/native/services"], cflags: [ "-Wall", "-Wextra", "-Werror", "-Wthread-safety", ], }
libs/input/PointerController.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -103,7 +103,7 @@ PointerController::PointerController(const sp<PointerControllerPolicyInterface>& WindowListenerConsumer unregisterListener) : mContext(policy, looper, spriteController, *this), mCursorController(mContext), mDisplayInfoListener(new DisplayInfoListener(this)), mDisplayInfoListener(sp<DisplayInfoListener>::make(this)), mUnregisterWindowInfosListener(std::move(unregisterListener)) { std::scoped_lock lock(getLock()); mLocked.presentation = Presentation::SPOT; Loading
libs/input/PointerControllerContext.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -36,8 +36,8 @@ PointerControllerContext::PointerControllerContext( : mPolicy(policy), mLooper(looper), mSpriteController(spriteController), mHandler(new MessageHandler()), mCallback(new LooperCallback()), mHandler(sp<MessageHandler>::make()), mCallback(sp<LooperCallback>::make()), mController(controller), mAnimator(*this) { std::scoped_lock lock(mLock); Loading
libs/input/SpriteController.cpp +34 −21 Original line number Diff line number Diff line Loading @@ -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 sp<android::SpriteController>& controller) { // Initialize the weak message handler outside the constructor, because we cannot get a strong // pointer to self in the constructor as the initial ref count is only incremented after // construction. mHandler->spriteController = controller; } SpriteController::~SpriteController() { mLooper->removeMessages(mHandler); Loading @@ -47,7 +54,7 @@ SpriteController::~SpriteController() { } sp<Sprite> SpriteController::createSprite() { return new SpriteImpl(this); return sp<SpriteImpl>::make(sp<SpriteController>::fromExisting(this)); } void SpriteController::openTransaction() { Loading @@ -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)); } } Loading @@ -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)); } } } Loading @@ -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)); } } Loading Loading @@ -327,7 +323,7 @@ void SpriteController::doDisposeSurfaces() { void SpriteController::ensureSurfaceComposerClient() { if (mSurfaceComposerClient == NULL) { mSurfaceComposerClient = new SurfaceComposerClient(); mSurfaceComposerClient = sp<SurfaceComposerClient>::make(); } } Loading @@ -353,12 +349,29 @@ 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.promote(); 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(const sp<SpriteController>& controller) : mController(controller) {} SpriteController::SpriteImpl::~SpriteImpl() { AutoMutex _m(mController->mLock); Loading Loading @@ -461,7 +474,7 @@ void SpriteController::SpriteImpl::invalidateLocked(uint32_t dirty) { mLocked.state.dirty |= dirty; if (!wasDirty) { mController->invalidateSpriteLocked(this); mController->invalidateSpriteLocked(sp<SpriteImpl>::fromExisting(this)); } } Loading
libs/input/SpriteController.h +12 −7 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ public: * * Clients are responsible for animating sprites by periodically updating their properties. */ class SpriteController : public MessageHandler { class SpriteController : public RefBase { protected: virtual ~SpriteController(); Loading @@ -117,6 +117,9 @@ public: using ParentSurfaceProvider = std::function<sp<SurfaceControl>(int /*displayId*/)>; SpriteController(const sp<Looper>& looper, int32_t overlayLayer, ParentSurfaceProvider parent); /* Initialize the callback for the message handler. */ void setHandlerController(const sp<SpriteController>& controller); /* Creates a new sprite, initially invisible. */ virtual sp<Sprite> createSprite(); Loading @@ -129,9 +132,12 @@ public: virtual void closeTransaction(); private: enum { MSG_UPDATE_SPRITES, MSG_DISPOSE_SURFACES, class Handler : public virtual android::MessageHandler { public: enum { MSG_UPDATE_SPRITES, MSG_DISPOSE_SURFACES }; void handleMessage(const Message& message) override; wp<SpriteController> spriteController; }; enum { Loading Loading @@ -192,7 +198,7 @@ private: virtual ~SpriteImpl(); public: explicit SpriteImpl(const sp<SpriteController> controller); explicit SpriteImpl(const sp<SpriteController>& controller); virtual void setIcon(const SpriteIcon& icon); virtual void setVisible(bool visible); Loading Loading @@ -245,7 +251,7 @@ private: sp<Looper> mLooper; const int32_t mOverlayLayer; sp<WeakMessageHandler> mHandler; sp<Handler> mHandler; ParentSurfaceProvider mParentSurfaceProvider; sp<SurfaceComposerClient> mSurfaceComposerClient; Loading @@ -260,7 +266,6 @@ private: void invalidateSpriteLocked(const sp<SpriteImpl>& sprite); void disposeSurfaceLocked(const sp<SurfaceControl>& surfaceControl); void handleMessage(const Message& message); void doUpdateSprites(); void doDisposeSurfaces(); Loading