Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31f9670f authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Use std::thread in input code

This will allow us to get away from the Thread.h class of libutils, thus
preventing the priority from getting set explicitly.

This, in turn, will ensure that SetTaskProfiles call does not provide
conflicting information.

Bug: 378761104
Test: presubmit
Flag: EXEMPT refactor
Change-Id: Id7674339ed52f9488236673667778abcc5bb4c3d
parent ef9f0459
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -45,9 +45,9 @@ AidlKeyEvent notifyKeyArgsToKeyEvent(const NotifyKeyArgs& args) {
}

InputFilter::InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust,
                         InputFilterPolicyInterface& policy)
                         InputFilterPolicyInterface& policy, JNIEnv* env)
      : mNextListener(listener),
        mCallbacks(ndk::SharedRefBase::make<InputFilterCallbacks>(listener, policy)),
        mCallbacks(ndk::SharedRefBase::make<InputFilterCallbacks>(listener, policy, env)),
        mPolicy(policy) {
    LOG_ALWAYS_FATAL_IF(!rust.createInputFilter(mCallbacks, &mInputFilterRust).isOk());
    LOG_ALWAYS_FATAL_IF(!mInputFilterRust);
+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ public:
    using AidlDeviceInfo = aidl::com::android::server::inputflinger::DeviceInfo;

    explicit InputFilter(InputListenerInterface& listener, IInputFlingerRust& rust,
                         InputFilterPolicyInterface& policy);
                         InputFilterPolicyInterface& policy, JNIEnv* env);
    ~InputFilter() override = default;
    void notifyInputDevicesChanged(const NotifyInputDevicesChangedArgs& args) override;
    void notifyKey(const NotifyKeyArgs& args) override;
+7 −5
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <utils/StrongPointer.h>
#include <functional>
#include "InputThread.h"
#include "jni.h"

namespace android {

@@ -41,11 +42,12 @@ using namespace aidl::com::android::server::inputflinger;

class InputFilterThread : public BnInputThread {
public:
    InputFilterThread(std::shared_ptr<IInputThreadCallback> callback) : mCallback(callback) {
    InputFilterThread(std::shared_ptr<IInputThreadCallback> callback, JNIEnv* env)
          : mCallback(callback) {
        mLooper = sp<Looper>::make(/*allowNonCallbacks=*/false);
        mThread = std::make_unique<InputThread>(
                "InputFilter", [this]() { loopOnce(); }, [this]() { mLooper->wake(); },
                /*isInCriticalPath=*/false);
                /*isInCriticalPath=*/false, env);
    }

    ndk::ScopedAStatus finish() override {
@@ -79,8 +81,8 @@ private:
} // namespace

InputFilterCallbacks::InputFilterCallbacks(InputListenerInterface& listener,
                                           InputFilterPolicyInterface& policy)
      : mNextListener(listener), mPolicy(policy) {}
                                           InputFilterPolicyInterface& policy, JNIEnv* env)
      : mNextListener(listener), mPolicy(policy), mJniEnv(env) {}

ndk::ScopedAStatus InputFilterCallbacks::sendKeyEvent(const AidlKeyEvent& event) {
    mNextListener.notifyKey(keyEventToNotifyKeyArgs(event));
@@ -101,7 +103,7 @@ ndk::ScopedAStatus InputFilterCallbacks::onModifierStateChanged(int32_t modifier
ndk::ScopedAStatus InputFilterCallbacks::createInputFilterThread(
        const std::shared_ptr<IInputThreadCallback>& callback,
        std::shared_ptr<IInputThread>* aidl_return) {
    *aidl_return = ndk::SharedRefBase::make<InputFilterThread>(callback);
    *aidl_return = ndk::SharedRefBase::make<InputFilterThread>(callback, mJniEnv);
    return ndk::ScopedAStatus::ok();
}

+2 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ using IInputThreadCallback =
class InputFilterCallbacks : public IInputFilter::BnInputFilterCallbacks {
public:
    explicit InputFilterCallbacks(InputListenerInterface& listener,
                                  InputFilterPolicyInterface& policy);
                                  InputFilterPolicyInterface& policy, JNIEnv* env);
    ~InputFilterCallbacks() override = default;

    uint32_t getModifierState();
@@ -48,6 +48,7 @@ public:
private:
    InputListenerInterface& mNextListener;
    InputFilterPolicyInterface& mPolicy;
    JNIEnv* mJniEnv;
    mutable std::mutex mLock;
    struct StickyModifierState {
        uint32_t modifierState;
+4 −4
Original line number Diff line number Diff line
@@ -125,15 +125,15 @@ std::shared_ptr<IInputFlingerRust> createInputFlingerRust() {
InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy,
                           InputDispatcherPolicyInterface& dispatcherPolicy,
                           PointerChoreographerPolicyInterface& choreographerPolicy,
                           InputFilterPolicyInterface& inputFilterPolicy) {
                           InputFilterPolicyInterface& inputFilterPolicy, JNIEnv* env) {
    mInputFlingerRust = createInputFlingerRust();

    mDispatcher = createInputDispatcher(dispatcherPolicy);
    mDispatcher = createInputDispatcher(dispatcherPolicy, env);
    mTracingStages.emplace_back(
            std::make_unique<TracedInputListener>("InputDispatcher", *mDispatcher));

    mInputFilter = std::make_unique<InputFilter>(*mTracingStages.back(), *mInputFlingerRust,
                                                 inputFilterPolicy);
                                                 inputFilterPolicy, env);
    mTracingStages.emplace_back(
            std::make_unique<TracedInputListener>("InputFilter", *mInputFilter));

@@ -156,7 +156,7 @@ InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy,
    mTracingStages.emplace_back(
            std::make_unique<TracedInputListener>("UnwantedInteractionBlocker", *mBlocker));

    mReader = createInputReader(readerPolicy, *mTracingStages.back());
    mReader = createInputReader(readerPolicy, *mTracingStages.back(), env);
}

InputManager::~InputManager() {
Loading