2013-07-31 63 views
1

在這個Google IO video中,我觀察到「performTraversals」在它的應用程序線程(ndroid.slowlist)上。在我的report中,「performTraversals」在線程PID 530(android.systemui)上。並且只有表示活動和dlgs的行,沒有線程明確地表示我的應用程序在這個systrace中,像這樣one(表示應用程序線程的最後一行(10440:m.jv.falcon.pro))我在網上找到。但是,如果我使用設置來執行systrace。我可以觀察到代表「android.setting」的線程。任何人都可以告訴我爲什麼我無法爲自己的應用程序獲取應用程序線程?非常感謝!Systrace |在應用程序線程或沒有應用程序線程上沒有「performTraversals」

+0

啓用「view」標記後,您應該會看到任何行使視圖層次的線程的蹤跡。它看起來像你已經得到了surfaceflinger(pid 126)和各種緩衝區隊列的行,再加上一點for systemui,但沒有應用程序數據。你能確認應用程序在跟蹤過程中被積極使用嗎?你不會得到任何行不通的線程的行。 – fadden

+0

嗨! Fadden,該應用程序在追蹤期間處於活動狀態。你可以從我的報告中觀察到我已經完成了幾個活動,甚至打開了一個對話框(AtchDlg專欄)。我想這將需要遍歷視圖樹? –

回答

2

究竟發生了什麼問題取決於您正在運行的Android版本以及您如何啓用跟蹤代碼。

每個進程都有自己的已啓用跟蹤標記副本。如果某個進程不認爲啓用了任何標記,則不會向該跟蹤提供任何數據。更新標籤時,您需要將廣播發送到所有進程(如果您通過該接口更新開發人員設置,開發人員設置將執行此操作),或者在更新標籤後使用adb shell stop; adb shell start重新啓動框架。 systrace documentation中的示例使用後一種方法。

因此,它看起來像systemui進程看到更新的標籤(「gfx」和「視圖」),但不知何故你的應用程序進程沒有。我期望,如果你經歷了systrace文檔中的所有步驟(使用python腳本設置標籤,重新啓動框架,啓動應用程序,捕獲跟蹤),它就可以工作。

+0

嗨!法登。感謝您指出廣播標記更改,我認爲這就是應用程序線程消失的原因。我無法使用python腳本解決我在[this]遇到的問題(http://stackoverflow.com/questions/17851191/android-systrace-no-such-file-or-directory/17860895)線程。我現在在使用Nexus 7,所以我可以在DDMS上使用systrace工具。但是,選擇標籤並單擊確定後,它似乎沒有嚮應用程序進程廣播。 (我認爲這是DDMS中的一個錯誤?)在開發人員選項中手動選擇這些標籤將解決此問題。 –

+0

我向另一個線程添加了一個註釋 - systrace-legacy.py腳本現在包含在SDK工具中,但它已移至其他目錄。您的設備上運行的是哪種Android版本?與舊版本相比,Android 4.3應該更容易處理。 – fadden