Loading services/inputflinger/reader/mapper/TouchInputMapper.cpp +40 −39 Original line number Original line Diff line number Diff line Loading @@ -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) { Loading @@ -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*/); Loading Loading @@ -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. Loading @@ -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; } } Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading services/inputflinger/reader/mapper/TouchInputMapper.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading
services/inputflinger/reader/mapper/TouchInputMapper.cpp +40 −39 Original line number Original line Diff line number Diff line Loading @@ -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) { Loading @@ -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*/); Loading Loading @@ -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. Loading @@ -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; } } Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading
services/inputflinger/reader/mapper/TouchInputMapper.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading