我試圖確定(在1毫秒內)何時在Android上發生特定的屏幕翻轉。每當畫面翻轉時,編舞者都會觸發,但無法確定實際顯示的畫面。根據https://source.android.com/devices/graphics/architecture.html,在這個過程中有幾個層次:用戶登陸緩衝區,它翻轉到三重緩衝隊列,翻轉到表面拋擲,然後翻轉到硬件。這些層中的每一層都可能會丟棄一幀,但此時我只確定如何監視用戶的陸地緩衝區。有沒有辦法監視其他緩衝區/翻轉(實時,在非根源,非自定義電話上)?在Android上確定確切的屏幕翻轉時間
我在HTC M8上觀察到意外的幀延遲(每5分鐘約1次),但Nexus 7似乎沒有這個問題。我通過使用Cedrus StimTracker(http://cedrus.com/stimtracker/)和一個光傳感器和Lab Streaming Layer(https://github.com/sccn/labstreaminglayer)來測量延遲。我曾嘗試使用eglPresentationTimeANDROID來控制屏幕翻轉的時間,但這並沒有解決問題。
請注意,我使用的是ndk,但通常我可以在需要時使用JNI訪問非ndk功能。
我關心的原因是爲了使用Android進行心理和神經學實驗,其中1 ms的精度非常可取。
謝謝法登。 「使用Choregorapher和推斷....使用eglPresentationTimeANDROID()....應該讓你得到可靠的時間。」這是我做的測試。不幸的是,它沒有導致HTC M8的可靠時機。典型的延遲隨着外推值的增加而改變,所以我知道我正確地使用了該功能。不幸的是,systrace在HTC M8上不起作用。請參閱http://stackoverflow.com/questions/32185412/unable-to-systrace-on-htc-one-m8-lollipop。如果沒有更多的工具,我們可能不得不將HTC M8推薦到科學列表中。 –
每款Android設備都是特殊的雪花。根據您的要求,創建白名單可能更安全。如果你有特別的動機,你可以根植M8並安裝一個支持systrace的內核,但是有可能你會替換導致不穩定的任何組件,這對於那個設備來說很好,但是有點失敗目的。 – fadden