追蹤輸入事件

追蹤工具能夠以視覺化的方式呈現輸入事件分派路徑。每個持續時間和傳出/傳入流程事件都必須彙整,以簡單明瞭的方式說明事件路徑中包含哪些元件和函式路徑。

觸控事件流程

替代文字。
第 1 級觸控驅動程式庫:Stack(FtDevice Read, HID IO Queue, InputReportInstance GetReports)。
第 2 級流程事件:InputReportInstance GetReports 至觸控繫結-程序-報表。第 3 級輸入管道:Stack(input-device-process-reports, touch-binding-process-report)。第 4 級流程事件:Touch-binding-process-report to deck_on_event。
第 5 頁輸入管道:Stack(presentation_on_event, Touch-inject- into-scenic)。第 6 級流程事件:輕觸插入以感知到插入器::插入。第 7 級風景:Stack(Injector::Inject, dispatch_event_to_client, 高峰_impl::Session::EventAndErrorReporter::EnqueueEvent, 好用_impl::Session::EventAndErrorReporter::FlushEvents)。
L8. 流程事件:dispatch_event_to_client 到 PlatformView::OnHandlePointerEvent。L9. Flutter Runner:Stack(PlatformView::OnScenicEvent, PlatformView::OnHandlePointerEvent, Shell::OnPlatformViewDispatchPointerDataPacket)。

觸控事件路徑牽涉到觸控驅動程式庫元件、輸入管道、景觀及水晶檢視元件 (在本例中為 Flutter)。每個元件都會佔用水平列,其函式呼叫堆疊的順序會依照時間順序排列。

驅動程式從裝置讀取觸控事件,並建立 fuchsia.input.report.InputReport。驅動程式庫的呼叫堆疊會以「HID IO Queue」和「InputReportInstance GetReports」表示。

在輸入管道「touch-binding-process-reports」中,有一項流程事件會將「InputReportInstance GetReports」連結到下一個時間長度。FIDL 通訊協定方法為 fuchsia.input.report.InputReportsReader.ReadInputReports()。

有一項流程事件會將「touch-binding-process-reports」連結至「presentation_on_event」,由於輸入管道實作中的工作迴圈排列方式,因此它們分別以不同的函式呼叫堆疊表示。

「presentation_on_event」命名是舊版的保留設定,可讓基於追蹤指標輸入延遲指令碼持續運作。建議擁有者根據實際意圖變更時間長度和流程的名稱,但可能也需要更新受影響的指令碼。一般來說,追蹤運算指令碼設有「煙霧測試」以避免立即中斷,因此錯誤變更應由 CQ 擷取。

有一個流程事件,會將輸入管道的「觸控插入至情境」與風景的「插入器::插入」持續時間相連結。FIDL 通訊協定方法是 fuchsia.ui.pointerinjector.Device.Inject()。「touch-inject-into-scenic」時間長度以 Inject() 呼叫做為結尾,以刻意排除回傳確認。「presentation_on_event」整體持續時間也擷取傳回結果,這涵蓋了較長時間的回傳。

風景呼叫堆疊包含「插入器:插入」、「dispatch_event_to_client」和其他一些函式。有一個流程事件會將「dispatch_event_to_client」持續時間連線至 Flutter 的「PlatformView::OnHandlePointerEvent」持續時間。在接收端,觸控事件最終已到達,並由 UI 用戶端元件進行處理。