為驅動程式庫新增追蹤記錄

本文說明如何在 Fuchsia 系統中為驅動程式庫新增追蹤功能。

總覽

如要瞭解追蹤功能,請參閱「Fuchsia 追蹤系統」。不過,驅動程式不需要指定追蹤供應商。驅動程式代管程序為其驅動程式提供一個。

如需追蹤記錄教學課程,請參閱「在程式碼中新增追蹤記錄」。 如需追蹤 API 參考資料,請參閱「追蹤:C 和 C++ 巨集」。

新增追蹤記錄

如要新增追蹤驅動程式庫,您需要更新驅動程式庫的原始碼和 BUILD.gn 檔案。

更新原始碼

如要在驅動程式庫程式元件中新增追蹤記錄,請更新原始碼以從 lib/trace/event.h 叫用 TRACE_*() 巨集,例如:

#include <lib/trace/event.h>

void DoSomething(int a, std::string b) {
  TRACE_DURATION("example", "DoSomething", "a", a, "b", b);

  // Do something
}

大多數巨集的前兩個引數都是追蹤類別和事件名稱。在本例中,這兩個值分別是 exampleDoSomething

追蹤類別可讓您指定追蹤系統要收集的資料類型。如果未要求特定類別,系統就不會收集任何資料。類別不必在驅動程式庫中保持不重複。通常會將多個事件歸入同一類別。

追蹤記錄中會包含事件名稱,用來描述事件。通常每個活動都有專屬的 ID。

更新 BUILD.gn

如要取得追蹤支援,請將下列目標新增至驅動程式的 BUILD.gn

fuchsia_cc_driver("my_driver") {
  deps = [
    ...
    "//zircon/system/ulib/trace",
  ]
}

使用追蹤功能

使用 ffx trace 記錄追蹤記錄,並透過 Perfetto 檢視器查看結果。

以下範例指令使用上述「更新原始碼」一節所述的 example 類別:

$ ffx trace start --categories "example,kernel:sched,kernel:meta"

如要將結果視覺化,必須提供 kernel:sched,kernel:meta 類別。視覺化工具想要將追蹤資料與執行緒和程序建立關聯,因此需要核心透過這些類別提供的資料。

如需更多詳細資料,以及如何在沒有 ffx 的情況下直接在 Fuchsia 裝置上追蹤,請參閱「記錄追蹤記錄以進行效能分析」。

其他資訊

詳情請參閱 Fuchsia 追蹤指南