fuchsia.feedback

新增:7

PROTOCOLS

ComponentDataRegister

定義於 fuchsia.feedback/data_register.fidl

註冊要在意見回饋報告中附加的實用資料 (當機、使用者意見回饋或錯誤報告)。

元件可運用這項資訊擴增所有意見回饋報告所附加的資料。預設 「意見回饋」服務會附加向平台公開的資料。這種通訊協定對資料 某些產品中的某些元件加以識別,但不會向平台公開。

epitaph ZX_ERR_INVALID_ARGS 表示用戶端正在傳送無效要求。詳情請見 指出這些請求可能無效的原因。

epitaph ZX_ERR_NO_RESOURCES 表示伺服器已無法再儲存額外的資源 元件資料,而且不會配置新的連線。

Upsert

更新或插入等要加入意見回饋報告的額外元件資料。

命名空間和每個註解鍵都可用來決定是否要更新或插入 註解。如果相同命名空間中的特定鍵已有註解, 更新值,否則請在該命名空間中,插入使用該索引鍵的註解。

例如,假設這些是伺服器已保存的資料 (來自之前的呼叫) 套用至 Upsert()):

{
  "bar": { # namespace
    "channel": "stable",
  },
  "foo": { # namespace
    "version": "0.2",
  }
}

接著:

Upsert({
  "namespace": "bar",
  "annotations": [
    "version": "1.2.3.45",
    "channel": "beta",
  ]
})

會造成伺服器現在保留:

{
  "bar": { # namespace
    "channel": "beta", # updated
    "version": "1.2.3.45" # inserted
  },
  "foo": { # namespace
    "version": "0.2", # untouched
  }
}

請注意,伺服器最多只能保留 MAX_NUM_ANNOTATIONS_PER_NAMESPACE 個不同項目 每個命名空間的註解鍵,來擷取最新的值。

要求

名稱類型
data ComponentData

回應

<空白>

CrashReporter

fuchsia.feedback/crash_reporter.fidl 中定義

提供當機報告。

FileReport

回報 report 當機,並提供作業的最終結果。

這表示如果在本機當機報告中產生當機報告, 或將當機報告上傳到遠端當機伺服器 取決於 FIDL 伺服器的設定

警告:這可能需要幾分鐘的時間。撥號中 我們不建議以同步方式使用這個函式。

新增日期:11

要求

名稱類型
report CrashReport

回應

名稱類型
payload CrashReporter_FileReport_Result

CrashReportingProductRegister

定義於 fuchsia.feedback/crash_register.fidl

允許元件選擇其他當機回報產品,以回報該產品的當機問題 元件

根據預設,平台偵測到的所有當機事件都會歸在單一產品中 伺服器這個 API 可讓元件選擇自己的產品,同時享有 處理及當機回報

Upsert

更新或插入,例如特定元件網址的當機回報產品。

對相同元件網址的後續呼叫 Upsert() 會覆寫 CrashReportingProduct

如果元件也會自行回報當機報告,則使用 UpsertWithAck(),以避免競爭 條件和歸因錯誤

要求

名稱類型
component_url string[2083]
product CrashReportingProduct

UpsertWithAck

新增/插入 (見上方說明) 並在作業完成時通知用戶端。

這可讓用戶端防止在提交當機報告和呼叫 Upsert 之間競爭。 否則,如果是在更新/插入作業完成前提交當機報告,則當機報告將 歸因於錯誤的產品,則可能產生不正確的當機資料。

要求

名稱類型
component_url string[2083]
product CrashReportingProduct

回應

<空白>

DataProvider

定義於 fuchsia.feedback/data_provider.fidl

在意見回饋報告中加入實用的資料,例如系統提交的當機報告, 使用者提交的使用者意見回饋報告或開發人員提交的錯誤報告。

GetAnnotations

傳回一組關於裝置狀態的註解。

如果收集圖像時發生問題,「annotations」可能就不會顯示任何內容。

這些註解與透過 GetSnapshot() 提供的註解相同,但有些客戶只需要 有些則需要註解和快照 相較於收集註解,快照可能需要更多的時間,例如記錄檔 只是快照的一部分,並非註解的一部分,因此可能需要一些時間。

要求

名稱類型
params GetAnnotationsParameters

回應

名稱類型
annotations Annotations

GetScreenshot

傳回以所提供 encoding 編碼的目前檢視畫面的圖片。

如果不支援編碼,screenshot 可能是空值,但裝置沒有 螢幕,或是記憶體不足,無法分配螢幕截圖。

螢幕截圖會與快照分開提供,因為呼叫端可能會想封鎖 在背景收集快照時變更檢視區塊。 還有許多用戶端對螢幕截圖不感興趣。

要求

名稱類型
encoding ImageEncoding

回應

名稱類型
screenshot Screenshot?

GetSnapshot

傳回裝置狀態的快照。

如果產生快照時發生問題,則「snapshot」可能會是空白。

要求

名稱類型
params GetSnapshotParameters

回應

名稱類型
snapshot Snapshot

DeviceIdProvider

定義於 fuchsia.feedback/device_id_provider.fidl

提供裝置的意見回饋 ID。

意見回饋 ID 是一組永久性的 UUID,用於將意見回饋報告分組。ID 不可用於回報任何目的,但意見回饋除外。 例如,不可用於遙測。

GetId

傳回裝置的意見回饋 ID。

此方法遵循等待取得模式,且在 ID 開始之前,不會傳回值 上次通話已變更。

要求

<空白>

回應

名稱類型
feedback_id string[64]

LastRebootInfoProvider

fuchsia.feedback/last_reboot_info.fidl 中定義的

瞭解裝置上次關閉的原因。使用重新啟動字詞,而非關機 因為許多開發人員針對重新啟動和大多數的連線問題 元件,想瞭解系統重新啟動的原因。

取得

要求

<空白>

回應

名稱類型
last_reboot LastReboot

結構

註解

fuchsia.feedback/annotation.fidl 中定義

註解及其純 ASCII 字串金鑰。 註解是簡短的字串,例如主面板名稱或建構版本。

新增日期:23

欄位類型說明預設
key string[128] 無預設
value string[1024] 無預設

連結資源

定義於 fuchsia.feedback/attachment.fidl

附件及其純 ASCII 字串金鑰。 附件是較大的物件,例如記錄檔。可以是二進位或文字資料。

欄位類型說明預設
key string[128] 無預設
value fuchsia.mem/Buffer 無預設

CrashReporter_FileReport_Response

fuchsia.feedback/crash_reporter.fidl 中定義

欄位類型說明預設
results FileReportResults 無預設

螢幕截圖資源

定義於 fuchsia.feedback/data_provider.fidl

畫面的編碼圖片。

欄位類型說明預設
image fuchsia.mem/Buffer 無預設
dimensions_in_px fuchsia.math/Size 無預設

ENUMS

FilingError 彈性

類型:uint32

fuchsia.feedback/crash_reporter.fidl 中定義

新增日期:11

名稱說明
0
1
2
3
4

致勝秘訣彈性

類型:uint32

fuchsia.feedback/crash_reporter.fidl 中定義

「個人化記憶」是指非永久位置,例如建立 檔案系統

新增日期:11

名稱說明
0
1
2
3
4

ImageEncoding 嚴格

類型:uint32

定義於 fuchsia.feedback/data_provider.fidl

圖片使用的編碼。

目前系統僅支援 PNG,但之後的螢幕截圖會是 其他編碼中。

名稱說明
0

RebootReason 彈性

類型:uint16

fuchsia.feedback/last_reboot_info.fidl 中定義的

裝置上次重新啟動的原因。

名稱說明
0

如果伺服器會傳送新的列舉值給用戶端,用戶端就會取得這個值 無法以編譯的方式進行編譯

新增:9
2

裝置從冷狀態啟動。

這很可能是長時間未使用電源或裝置後所造成的結果 第一次使用 Fuchsia 系列手機

3

裝置曾短暫斷電,因此已重新啟動。

在某些硬體上,這可能是使用者中斷連線後重新連線 供需快速接續運作

4

裝置因電壓低於允許的程度 (未達到 0) 而重新啟動。

5
6
7
8
19

使用者空間根工作已終止,因此裝置重新啟動,最有可能的原因是 因此關鍵程序停止運作

9

裝置使用者重新啟動,因此裝置重新啟動。使用者可以是 代表真人或與裝置互動的程式,如 SL4F 或 RCS

10

裝置因 OTA 問題而重新啟動。

17

無法執行 OTA,因此我們想重試,因此裝置已重新啟動。

11

系統判定裝置過熱,因此已重新啟動。

12

由於工作階段發生問題或工作階段管理員,因此裝置已重新啟動 無法從錯誤復原。

15

系統管理員 (sysmgr) 無法從 錯誤。

14

裝置在恢復原廠設定後重新啟動。 請參閱 fuchsia.recovery.FactoryReset

16

由 sysmgr 管理的重要元件執行失敗,因此裝置已重新啟動。

18

裝置已重新啟動,以套用 Zircon 開機映像檔替換。

資料表

註解

定義於 fuchsia.feedback/data_provider.fidl

裝置狀態的註解。

用戶端通常會將資料直接上傳至伺服器。資料則是 用戶端可直接轉送至伺服器的任意鍵/值組合。

序數欄位類型說明
annotations vector<Annotation>[64]

鍵/值字串組合的向量。金鑰保證不會重複。

ComponentData

定義於 fuchsia.feedback/data_register.fidl

會附加至意見回饋報告的元件已知元件,但不會向平台公開的資料。

序數欄位類型說明
namespace string[32]

與資料相關聯的頂層命名空間:

  • 旨在將相關資料分組,以減少資料鍵衝突。 命名空間
  • 可由多位客戶共用,例如同一個區域內可能有多位客戶 如要公開相關資料,這些元件或元件中 不在相同的命名空間中
  • 在所有意見回饋報告中,該命名空間內傳遞的每個資料鍵都會加上前置字元, 例如註解「版本」會顯示為「foo.version」都包含在所有意見回饋報表中 命名空間為「foo」
  • 必須與 [a-z-]+ 相符,意即只能使用小寫英文字母和連字號,否則會造成 ZX_ERR_INVALID_ARGS 集錦。
  • 不得與內部用於平台資料的預留命名空間相符,例如「build」 這會產生 ZX_ERR_INVALID_ARGS 的修訂內容。預留命名空間的清單如下: 可能隨時變動。
annotations vector<Annotation>[16]

鍵/值字串組合的向量,例如<"version", "1.2.3.45">

索引鍵:

  • 必須為獨一無二,因為向量中特定鍵最新的值將 考慮成形
  • 只能比對 [a-z-.]+,也就是只能使用小寫英文字母、連字號和半形句號。使用句號 子名稱間距,例如:「build.label」和「build.type」都一樣,因此相關註解 按字母順序排序時一併分組 (與「建構」相關)。

CrashReport 資源

fuchsia.feedback/crash_reporter.fidl 中定義

代表當機報告。

序數欄位類型說明
program_name string[1024]

當機的程式名稱,例如程序或元件名稱。

specific_report SpecificCrashReport

根據當機類型產生的特定報告。

如果需要與當機程式相關的額外資訊,則應設定這個欄位 像是迷你傾印

annotations vector<Annotation>[32]

鍵/值字串組合的向量,代表應附加至 當機報告

鍵不得重複,因為向量中特定鍵最新的值將 考慮成形

attachments vector<Attachment>[16]

鍵/值字串對 VMO 的組合,代表應遵循的任意資料 圖示。

鍵不得重複,因為向量中特定鍵最新的值將 考慮成形

event_id string[128]

當機伺服器可使用的文字 ID,將相關的當機報告分組, 產生的內容

與當機簽章不同,共用相同 ID 的當機報告會對應 當機,但也可能視為同一事件,例如在低階事件中發生當機 導致高階 UI 小工具當機。

program_uptime zx/Duration

程式在當機前執行的時間長度。

crash_signature string[128]

當機伺服器可用來追蹤一段時間內相同當機情形的文字簽章,例如 「核心-恐慌」或「oom」這個簽名的優先順序高於任何自動簽名

與事件 ID 不同,共用相同簽名的當機報告會對應到同一個當機事件。 但會在多個事件發生時,例如在伺服器上發生空值指標例外狀況 先前提過同一個要求

必須使用小寫 [a-z][a-z-]*,亦即只能使用小寫英文字母和連字號,否則會造成 ZX_ERR_INVALID_ARGS 集錦。

is_fatal bool

指出當機報告是否為 執行中程序、元件、 或是系統本身

以下列舉幾個會導致嚴重當機報告的事件:

  • ELF 程序異常終止
  • 因為記憶體不足,系統才會重新啟動。
  • 導致系統重新啟動
  • 裝置過熱,讓系統重新啟動。

以下列舉幾個會導致非嚴重當機報告的事件:

  • 在 Dart 程式中未捕捉到的例外狀況,其中包含許多執行背景。執行階段可能會 終止該特定執行環境並改為提交當機報告 整個程式
  • 偵測重大事件 (例如 OOM) 的元件不久後可能會發生,但無法保證 。

這個欄位主要用於按照嚴重錯誤、非嚴重錯誤及不明狀況分類當機 分別設為 True、設為 False 或未設定

CrashReportingProduct

定義於 fuchsia.feedback/crash_register.fidl

要回報給當機伺服器的產品資訊。

序數欄位類型說明
name string

當機伺服器上的產品名稱。

  • 第一個字元須為英數字元。其餘字元都必須可列印 但不能是空格,所以 ASCII 資料表中的值將為 33 到 127。任何其他 字元會得到 ZX_ERR_INVALID_ARGS 併排版。
  • 如果缺少這個必填欄位,就會產生 ZX_ERR_INVALID_ARGS 劇集。
version string

元件的選用產品版本。

  • 第一個字元須為英數字元。其餘字元都必須可列印 但不能是空格,所以 ASCII 資料表中的值將為 33 到 127。任何其他 字元會得到 ZX_ERR_INVALID_ARGS 併排版。

如未指定版本,系統就不會向當機伺服器回報任何版本。

channel string

元件產品發布頻道,例如「canary」、「beta」、「stable」。

如未指定管道,系統就不會將任何裝置回報給當機伺服器。

FileReportResults

fuchsia.feedback/crash_reporter.fidl 中定義

新增日期:11

序數欄位類型說明
result FilingSuccess

成功類型。

report_id string[64]

|result| 代表非空白的值Filing 成功:REPORT_UPLOADED。

GetAnnotationsParameters

定義於 fuchsia.feedback/data_provider.fidl

DataProvider::GetAnnotations() 方法的參數。

序數欄位類型說明
collection_timeout_per_annotation zx/Duration

系統會從平台中的多個位置同時收集註解,且每個位置都有 逾時。

collection_timeout_per_annotation 可讓用戶端控制給 每個註解珍藏內容可讓用戶端在 或在特定時間發生

GetSnapshotParameters 資源

定義於 fuchsia.feedback/data_provider.fidl

DataProvider::GetSnapshot() 方法的參數。

序數欄位類型說明
collection_timeout_per_data zx/Duration

快照匯總了來自平台的各種資料 (裝置運作時間、記錄、檢查資料、 等) 平行收集的資料。系統內部會在 逾時。

collection_timeout_per_data 可讓用戶端控制分配給各項資料的時間 集合。可讓用戶端在特定時間內取得部分尚未有效的快照。

請注意,這無法控制快照產生作業總共需要多少時間 也就是建立比 collection_timeout_per_data 更高的值,因為客戶能自行控制 在呼叫 GetSnapshot() 的呼叫使用逾時。

response_channel handle<channel>

如果設定,系統會以 |fuchsia.io.File| 格式傳送快照封存檔改為透過這個管道 放入 |封存|欄位 |快照|中的欄位回應。這個方法通常很實用 用戶端位於主機上,但不支援 VMO。

LastReboot

fuchsia.feedback/last_reboot_info.fidl 中定義的

裝置上次重新啟動原因的相關資訊。

序數欄位類型說明
graceful bool

上次重新啟動是否安全良好,例如裝置沒有因發生錯誤而重新啟動 再以受控的方式重新啟動

這個欄位可讓用戶端瞭解上次重新啟動是否安全,而不必 剖析非必要的 |原因|] 欄位。這在以下時機相當實用,|原因|:例如,由於 都不會知道重新啟動是「優雅」還是 會不斷演變以支援新的 RebootReason 值,而用戶端尚未更新。

如果 |reason|,這個欄位一律為值而不是每個 Pod 的名稱但是,|理由|可能不是 一律要有值。

reason RebootReason

裝置上次重新啟動的原因。

uptime zx/Duration

裝置重新啟動前的運作時間。

NativeCrashReport 資源

fuchsia.feedback/crash_reporter.fidl 中定義

代表原生例外狀況的當機報告,因為用戶端已建構 Minidump。

序數欄位類型說明
minidump fuchsia.mem/Buffer

以 Minidump 格式為基礎的核心傾印。

process_name string[64]

異常終止程序的名稱。

process_koid zx/Koid

當機程序的核心物件 ID。

thread_name string[64]

當機的執行緒名稱。

thread_koid zx/Koid

當機執行緒的核心物件 ID。

RuntimeCrashReport 資源

fuchsia.feedback/crash_reporter.fidl 中定義

代表執行階段例外狀況的當機報告 (適用於多數語言)。

序數欄位類型說明
exception_type string[128]

例外狀況類型,例如「FileSystemException」。

exception_message string[4096]

例外狀況訊息,例如「無法開啟檔案」。

exception_stack_trace fuchsia.mem/Buffer

例外狀況堆疊追蹤的文字表示法。

快照資源

定義於 fuchsia.feedback/data_provider.fidl

裝置狀態快照。

用戶端通常會將資料直接上傳至伺服器。資料則是 用戶端可直接轉送至伺服器的任意鍵/值組合。

序數欄位類型說明
archive Attachment

<檔案名稱,ZIP 封存檔>配對。

ZIP 封存檔包含數個檔案,檔案則對應至收集來源的各種資料 平台。所有註解通常都會有一個檔案 (裝置運作時間、版本) 版本) 以及每個附件一個檔案 (記錄、檢查資料等)。

如果 |response_channel| 未設定,就無法設定並未設定在要求中提供的資訊

annotations vector<Annotation>[64]

鍵/值字串組合的向量。金鑰保證不會重複。

雖然註解本身就包含在 ZIP 封存檔中,但有些客戶也會希望 分開索引或擴增,因此我們另外提供它們。

聯合國

CrashReporter_FileReport_Result 的嚴格

fuchsia.feedback/crash_reporter.fidl 中定義

序數Variant類型說明
response CrashReporter_FileReport_Response
err FilingError

SpecificCrashReport 彈性 資源

fuchsia.feedback/crash_reporter.fidl 中定義

代表特定當機報告。

伺服器需要以特殊方式處理特定註解及 針對特定當機類型的附件,例如 RuntimeCrashReport 代表 JavaScript。

序數Variant類型說明
native NativeCrashReport

適用於原生例外狀況。

dart RuntimeCrashReport

適用於 Dart 例外狀況。

觀測站

名稱類型說明
MAX_ANNOTATION_KEY_LENGTH 128 uint64

註解鍵的長度上限。

新增日期:23
MAX_ANNOTATION_VALUE_LENGTH 1024 uint64

註解值的長度上限。

新增日期:23
MAX_CRASH_SIGNATURE_LENGTH 128 uint32
MAX_EVENT_ID_LENGTH 128 uint32
MAX_EXCEPTION_MESSAGE_LENGTH 4096 uint32
新增:10
MAX_EXCEPTION_TYPE_LENGTH 128 uint32
MAX_NAMESPACE_LENGTH 32 uint32
MAX_NUM_ANNOTATIONS_PER_CRASH_REPORT 32 uint32
MAX_NUM_ANNOTATIONS_PER_NAMESPACE 16 uint32
MAX_NUM_ANNOTATIONS_PROVIDED 64 uint32
MAX_NUM_ATTACHMENTS_PER_CRASH_REPORT 16 uint32
MAX_PROCESS_NAME_LENGTH 64 uint32
MAX_PROGRAM_NAME_LENGTH 1024 uint32
MAX_REPORT_ID_LENGTH 64 uint32
新增日期:11
MAX_THREAD_NAME_LENGTH 64 uint32