Android input 系统之一:InputReader线程

本文探讨Android输入系统中的InputReader线程,详细解析从底层触摸事件到framework层的数据读取与初步处理流程。
摘要由CSDN通过智能技术生成

Android input 系统之一 :InputReader线程

touch事件处理流程:

底层触摸事件上报至framework层,事件未分发之前的数据读取与处理流程:

"InputReader 线程"

bool InputReaderThread::threadLoop()						frameworks/native/services/inputflinger/InputReader.cpp
void InputReader::loopOnce()
    size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); //从EventHub读取事件,其中EVENT_BUFFER_SIZE = 256
    size_t EventHub::getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize)	frameworks/native/services/inputflinger/EventHub.cpp
        scanDevicesLocked();//扫描设备,会把dev/input下所有可用的输入设备打开并储存到Device结构体中
        int32_t readSize = read(device->fd, readBuffer, sizeof(struct input_event) * capacity); //从设备不断读取事件,放入到readBuffer
        //将input_event信息, 封装成"RawEvent"
            >>(event->when = nsecs_t(iev.time.tv_sec) * 1000000000LL + nsecs_t(iev.time.tv_usec) * 1000LL;
            event->deviceId = deviceId;
            event->type = iev.type;
            event->code = iev.code;
            event->value = iev.value;
            event += 1;
            capacity -= 1;)
        return event - buffer; //返回所读取的事件个数

        processEventsLocked(mEventBuffer, count);//事件处理
        void InputReader::processEventsLocked(const RawEvent* rawEvents, size_t count)
>>>>>>> "if (type < EventHubInterface::FIRST_SYNTHETIC_EVENT) {"
            processEventsForDeviceLocked(deviceId, rawEvent, batchSize);
            void InputReader::processEventsForDeviceLocked(int32_t deviceId, const RawEvent* rawEvents, size_t count)   
                device->process(rawEvents, count);
                void InputDevice::process(const RawEvent* rawEvents, size_t count)
                      mapper->process(rawEvent);//调用具体mapper来处理( 以MultiTouch为例 )
                        SwitchInputMapper::process(const RawEvent* rawEvent);
                        KeyboardInputMapper::process(const RawEvent* rawEvent);
                        CursorInputMapper::process(const RawEvent* rawEvent);
                        RotaryEncoderInputMapper::process(const RawEvent* rawEve
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值