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

Commit a170ec6a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Do not modify vector after getting references" into sc-dev

parents e173113c 57479982
Loading
Loading
Loading
Loading
+40 −39
Original line number Original line Diff line number Diff line
@@ -1412,28 +1412,29 @@ void TouchInputMapper::process(const RawEvent* rawEvent) {
}
}


void TouchInputMapper::sync(nsecs_t when, nsecs_t readTime) {
void TouchInputMapper::sync(nsecs_t when, nsecs_t readTime) {
    const RawState* last =
            mRawStatesPending.empty() ? &mCurrentRawState : &mRawStatesPending.back();

    // Push a new state.
    // Push a new state.
    mRawStatesPending.emplace_back();
    mRawStatesPending.emplace_back();


    RawState* next = &mRawStatesPending.back();
    RawState& next = mRawStatesPending.back();
    next->clear();
    next.clear();
    next->when = when;
    next.when = when;
    next->readTime = readTime;
    next.readTime = readTime;


    // Sync button state.
    // Sync button state.
    next->buttonState =
    next.buttonState =
            mTouchButtonAccumulator.getButtonState() | mCursorButtonAccumulator.getButtonState();
            mTouchButtonAccumulator.getButtonState() | mCursorButtonAccumulator.getButtonState();


    // Sync scroll
    // Sync scroll
    next->rawVScroll = mCursorScrollAccumulator.getRelativeVWheel();
    next.rawVScroll = mCursorScrollAccumulator.getRelativeVWheel();
    next->rawHScroll = mCursorScrollAccumulator.getRelativeHWheel();
    next.rawHScroll = mCursorScrollAccumulator.getRelativeHWheel();
    mCursorScrollAccumulator.finishSync();
    mCursorScrollAccumulator.finishSync();


    // Sync touch
    // Sync touch
    syncTouch(when, next);
    syncTouch(when, &next);

    // The last RawState is the actually second to last, since we just added a new state
    const RawState& last =
            mRawStatesPending.size() == 1 ? mCurrentRawState : mRawStatesPending.rbegin()[1];


    // Assign pointer ids.
    // Assign pointer ids.
    if (!mHavePointerIds) {
    if (!mHavePointerIds) {
@@ -1443,10 +1444,10 @@ void TouchInputMapper::sync(nsecs_t when, nsecs_t readTime) {
#if DEBUG_RAW_EVENTS
#if DEBUG_RAW_EVENTS
    ALOGD("syncTouch: pointerCount %d -> %d, touching ids 0x%08x -> 0x%08x, "
    ALOGD("syncTouch: pointerCount %d -> %d, touching ids 0x%08x -> 0x%08x, "
          "hovering ids 0x%08x -> 0x%08x, canceled ids 0x%08x",
          "hovering ids 0x%08x -> 0x%08x, canceled ids 0x%08x",
          last->rawPointerData.pointerCount, next->rawPointerData.pointerCount,
          last.rawPointerData.pointerCount, next.rawPointerData.pointerCount,
          last->rawPointerData.touchingIdBits.value, next->rawPointerData.touchingIdBits.value,
          last.rawPointerData.touchingIdBits.value, next.rawPointerData.touchingIdBits.value,
          last->rawPointerData.hoveringIdBits.value, next->rawPointerData.hoveringIdBits.value,
          last.rawPointerData.hoveringIdBits.value, next.rawPointerData.hoveringIdBits.value,
          next->rawPointerData.canceledIdBits.value);
          next.rawPointerData.canceledIdBits.value);
#endif
#endif


    processRawTouches(false /*timeout*/);
    processRawTouches(false /*timeout*/);
@@ -3731,11 +3732,11 @@ const TouchInputMapper::VirtualKey* TouchInputMapper::findVirtualKeyHit(int32_t
    return nullptr;
    return nullptr;
}
}


void TouchInputMapper::assignPointerIds(const RawState* last, RawState* current) {
void TouchInputMapper::assignPointerIds(const RawState& last, RawState& current) {
    uint32_t currentPointerCount = current->rawPointerData.pointerCount;
    uint32_t currentPointerCount = current.rawPointerData.pointerCount;
    uint32_t lastPointerCount = last->rawPointerData.pointerCount;
    uint32_t lastPointerCount = last.rawPointerData.pointerCount;


    current->rawPointerData.clearIdBits();
    current.rawPointerData.clearIdBits();


    if (currentPointerCount == 0) {
    if (currentPointerCount == 0) {
        // No pointers to assign.
        // No pointers to assign.
@@ -3746,20 +3747,20 @@ void TouchInputMapper::assignPointerIds(const RawState* last, RawState* current)
        // All pointers are new.
        // All pointers are new.
        for (uint32_t i = 0; i < currentPointerCount; i++) {
        for (uint32_t i = 0; i < currentPointerCount; i++) {
            uint32_t id = i;
            uint32_t id = i;
            current->rawPointerData.pointers[i].id = id;
            current.rawPointerData.pointers[i].id = id;
            current->rawPointerData.idToIndex[id] = i;
            current.rawPointerData.idToIndex[id] = i;
            current->rawPointerData.markIdBit(id, current->rawPointerData.isHovering(i));
            current.rawPointerData.markIdBit(id, current.rawPointerData.isHovering(i));
        }
        }
        return;
        return;
    }
    }


    if (currentPointerCount == 1 && lastPointerCount == 1 &&
    if (currentPointerCount == 1 && lastPointerCount == 1 &&
        current->rawPointerData.pointers[0].toolType == last->rawPointerData.pointers[0].toolType) {
        current.rawPointerData.pointers[0].toolType == last.rawPointerData.pointers[0].toolType) {
        // Only one pointer and no change in count so it must have the same id as before.
        // Only one pointer and no change in count so it must have the same id as before.
        uint32_t id = last->rawPointerData.pointers[0].id;
        uint32_t id = last.rawPointerData.pointers[0].id;
        current->rawPointerData.pointers[0].id = id;
        current.rawPointerData.pointers[0].id = id;
        current->rawPointerData.idToIndex[id] = 0;
        current.rawPointerData.idToIndex[id] = 0;
        current->rawPointerData.markIdBit(id, current->rawPointerData.isHovering(0));
        current.rawPointerData.markIdBit(id, current.rawPointerData.isHovering(0));
        return;
        return;
    }
    }


@@ -3777,9 +3778,9 @@ void TouchInputMapper::assignPointerIds(const RawState* last, RawState* current)
        for (uint32_t lastPointerIndex = 0; lastPointerIndex < lastPointerCount;
        for (uint32_t lastPointerIndex = 0; lastPointerIndex < lastPointerCount;
             lastPointerIndex++) {
             lastPointerIndex++) {
            const RawPointerData::Pointer& currentPointer =
            const RawPointerData::Pointer& currentPointer =
                    current->rawPointerData.pointers[currentPointerIndex];
                    current.rawPointerData.pointers[currentPointerIndex];
            const RawPointerData::Pointer& lastPointer =
            const RawPointerData::Pointer& lastPointer =
                    last->rawPointerData.pointers[lastPointerIndex];
                    last.rawPointerData.pointers[lastPointerIndex];
            if (currentPointer.toolType == lastPointer.toolType) {
            if (currentPointer.toolType == lastPointer.toolType) {
                int64_t deltaX = currentPointer.x - lastPointer.x;
                int64_t deltaX = currentPointer.x - lastPointer.x;
                int64_t deltaY = currentPointer.y - lastPointer.y;
                int64_t deltaY = currentPointer.y - lastPointer.y;
@@ -3883,11 +3884,11 @@ void TouchInputMapper::assignPointerIds(const RawState* last, RawState* current)
            matchedCurrentBits.markBit(currentPointerIndex);
            matchedCurrentBits.markBit(currentPointerIndex);
            matchedLastBits.markBit(lastPointerIndex);
            matchedLastBits.markBit(lastPointerIndex);


            uint32_t id = last->rawPointerData.pointers[lastPointerIndex].id;
            uint32_t id = last.rawPointerData.pointers[lastPointerIndex].id;
            current->rawPointerData.pointers[currentPointerIndex].id = id;
            current.rawPointerData.pointers[currentPointerIndex].id = id;
            current->rawPointerData.idToIndex[id] = currentPointerIndex;
            current.rawPointerData.idToIndex[id] = currentPointerIndex;
            current->rawPointerData.markIdBit(id,
            current.rawPointerData.markIdBit(id,
                                              current->rawPointerData.isHovering(
                                             current.rawPointerData.isHovering(
                                                     currentPointerIndex));
                                                     currentPointerIndex));
            usedIdBits.markBit(id);
            usedIdBits.markBit(id);


@@ -3905,10 +3906,10 @@ void TouchInputMapper::assignPointerIds(const RawState* last, RawState* current)
        uint32_t currentPointerIndex = matchedCurrentBits.markFirstUnmarkedBit();
        uint32_t currentPointerIndex = matchedCurrentBits.markFirstUnmarkedBit();
        uint32_t id = usedIdBits.markFirstUnmarkedBit();
        uint32_t id = usedIdBits.markFirstUnmarkedBit();


        current->rawPointerData.pointers[currentPointerIndex].id = id;
        current.rawPointerData.pointers[currentPointerIndex].id = id;
        current->rawPointerData.idToIndex[id] = currentPointerIndex;
        current.rawPointerData.idToIndex[id] = currentPointerIndex;
        current->rawPointerData.markIdBit(id,
        current.rawPointerData.markIdBit(id,
                                          current->rawPointerData.isHovering(currentPointerIndex));
                                         current.rawPointerData.isHovering(currentPointerIndex));


#if DEBUG_POINTER_ASSIGNMENT
#if DEBUG_POINTER_ASSIGNMENT
        ALOGD("assignPointerIds - assigned: cur=%" PRIu32 ", id=%" PRIu32, currentPointerIndex, id);
        ALOGD("assignPointerIds - assigned: cur=%" PRIu32 ", id=%" PRIu32, currentPointerIndex, id);
+1 −1
Original line number Original line Diff line number Diff line
@@ -772,7 +772,7 @@ private:
    bool isPointInsideSurface(int32_t x, int32_t y);
    bool isPointInsideSurface(int32_t x, int32_t y);
    const VirtualKey* findVirtualKeyHit(int32_t x, int32_t y);
    const VirtualKey* findVirtualKeyHit(int32_t x, int32_t y);


    static void assignPointerIds(const RawState* last, RawState* current);
    static void assignPointerIds(const RawState& last, RawState& current);


    const char* modeToString(DeviceMode deviceMode);
    const char* modeToString(DeviceMode deviceMode);
    void rotateAndScale(float& x, float& y);
    void rotateAndScale(float& x, float& y);