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

Commit 28e5150c authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Log dispatch state when pointers overlap" into main

parents b83e1d62 59967599
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -3054,7 +3054,11 @@ void InputDispatcher::addPointerWindowTargetLocked(
                   << ", windowInfo->globalScaleFactor=" << windowInfo->globalScaleFactor;
    }

    it->addPointers(pointerIds, windowInfo->transform);
    Result<void> result = it->addPointers(pointerIds, windowInfo->transform);
    if (!result.ok()) {
        logDispatchStateLocked();
        LOG(FATAL) << result.error().message();
    }
}

void InputDispatcher::addGlobalMonitoringTargetsLocked(std::vector<InputTarget>& inputTargets,
+9 −6
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@
#include <inttypes.h>
#include <string>

using android::base::Error;
using android::base::Result;
using android::base::StringPrintf;

namespace android::inputdispatcher {
@@ -35,28 +37,29 @@ const static ui::Transform kIdentityTransform{};
InputTarget::InputTarget(const std::shared_ptr<Connection>& connection, ftl::Flags<Flags> flags)
      : connection(connection), flags(flags) {}

void InputTarget::addPointers(std::bitset<MAX_POINTER_ID + 1> newPointerIds,
Result<void> InputTarget::addPointers(std::bitset<MAX_POINTER_ID + 1> newPointerIds,
                                      const ui::Transform& transform) {
    // The pointerIds can be empty, but still a valid InputTarget. This can happen when there is no
    // valid pointer property from the input event.
    if (newPointerIds.none()) {
        setDefaultPointerTransform(transform);
        return;
        return {};
    }

    // Ensure that the new set of pointers doesn't overlap with the current set of pointers.
    if ((getPointerIds() & newPointerIds).any()) {
        LOG(FATAL) << __func__ << " - overlap with incoming pointers "
        return Error() << __func__ << " - overlap with incoming pointers "
                       << bitsetToString(newPointerIds) << " in " << *this;
    }

    for (auto& [existingTransform, existingPointers] : mPointerTransforms) {
        if (transform == existingTransform) {
            existingPointers |= newPointerIds;
            return;
            return {};
        }
    }
    mPointerTransforms.emplace_back(transform, newPointerIds);
    return {};
}

void InputTarget::setDefaultPointerTransform(const ui::Transform& transform) {
+2 −1
Original line number Diff line number Diff line
@@ -92,7 +92,8 @@ public:
    InputTarget() = default;
    InputTarget(const std::shared_ptr<Connection>&, ftl::Flags<Flags> = {});

    void addPointers(std::bitset<MAX_POINTER_ID + 1> pointerIds, const ui::Transform& transform);
    android::base::Result<void> addPointers(std::bitset<MAX_POINTER_ID + 1> pointerIds,
                                            const ui::Transform& transform);
    void setDefaultPointerTransform(const ui::Transform& transform);

    /**