Android4 1Input子系統插點演算法分析

2021-06-12 23:29:58 字數 1730 閱讀 1045

android4.1

和android4.0

相比,中間層**

input

訊息的流程有了較大的變化。

android4.0

採用共享記憶體的方法將

input

訊息由系統程序向應用程序傳送,應用程序接收到

input

訊息後按照

fifo

的方式,順序的將

input

訊息向上分發。

android4.1

採用非阻塞的套接字方式,將

input

訊息由系統程序向應用程序傳送,應用程序在接收到

input

訊息後進行了批處理。應用程序收到若干個點後,會依次存入緩衝區裡面,等待乙個合適的時候,再按批次將這些點封裝成乙個

motionevent

,並將封裝過的點從緩衝區裡面清掉。封裝後如果緩衝區裡面還有剩餘點,會在本批次和下一批次之間插入乙個估算的點;如果緩衝區裡面暫時沒有剩餘點,但本批次的點數在

2個以上,則在本批次的最後

2個點之間插入乙個估算點。插點完成以後,上傳給

viewroot

,這樣應用層在呼叫相關介面獲取點數時就會多乙個點。

插點演算法是

android4.1

針對劃線的優化處理,只要開啟了插點的功能,不論報點率高低都會發生插點。那麼,為什麼在報點率高的時候沒有出現劃線曲折,而報點率低的時候出現了劃線曲折呢?原因在於差點的預估演算法和兩點之間的時間間隔差有關係。

請看下面分析:

插點演算法的相關公式

delta

因子delta = future.eventtime -current->eventtime

其中,future

為下一批次的第乙個點,

current

為當前批次的最後乙個點

或者,future

為當前批次的最後乙個點,

current

為當前批次的倒數第二個點

alpha因子

alpha =float(current->eventtime - sampletime) / delta

其中,sampletime = frametime -resample_latency

frametime

為下一幀刷圖的時間,

resample_latency

為預估的從收到點到刷下一

幀影象時的延時大小,因此

sampletime

為該批次收到最後乙個點的時間。

     插點計算公式

value.x

=current.x

+ alpha * (

furrent.x

-current.x

)value.y

=current.y

+ alpha * (

furrent.y

-current.y

)從上面的

alpha

因子可知,

future.eventtime

- current->

eventtime

會影響插點算

法的結果,即兩個點之間的時間間隔影響插點演算法的準確性。而兩個點之間的時間間隔和

報點率相關,因此報點率的高低會影響插點演算法的準確性。

從除錯的結果來看,報點率越高劃線越圓滑,當報點率低於

90hz

時,會出現劃線曲折

、不圓滑的現象。

android檢視input裝置

如何檢視有哪些input裝置?命令 getevent lp 如何確認驅動上報事件?命令 getevent lt dev input event1 問題3 tp key無法使用如何解鎖螢幕?解法1 用input工具模擬tp key輸入 按電源鍵亮屏 input keyevent power 按menu...

Android4 1強制橫豎屏

由於做的是車機,所以有些應用是豎屏時要強制轉換一下,以下是強制轉換橫豎屏的方法 方法一 方法二 android4.0 frameworks base services su ceflinger su ceflinger.cpp void graphicplane setdisplayhardware...

4 1 被3整除的子串行

給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除 答案對1e9 7取模 輸入乙個字串,由數字構成,長度小於等於50 輸出乙個整數 132931 因為被3取餘只可能是 0 1 2 所以每次提取乙個數字把它現有的可能和之前的可能性相結合就可以得到每次的被3整除的總數。dp i j d...