Fuchsia.feedback

添加次数:7

协议

ComponentDataRegister

fuchsia.feedback/data_register.fidl 中定义

注册可以附加到反馈报告(崩溃、用户反馈或错误报告)中的数据。

组件可以使用此数据来扩充所有反馈报告中附加的数据。默认情况下,反馈服务会附加向平台公开的数据。此协议适用于某些产品中某些组件已知但未提供给平台的数据。

epitaph ZX_ERR_INVALID_ARGS 表示客户端发送的请求无效。请参阅下文,了解每项请求可能无效的可能原因。

epitaph ZX_ERR_NO_RESOURCES 表示服务器不能再存储其他组件数据,并且不再为新连接提供服务。

更新/插入

更新/插入(即更新或插入)和要包含在反馈报告中的额外组件数据。

命名空间和每个注解键用于决定是更新还是插入注解。如果同一命名空间中给定键的注解已存在,请更新该值,否则在该命名空间下插入具有该键的注解。

例如,假设这些数据是服务器已经保存的数据(来自之前对 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_EmailAddressS_PER_NAMESPACE 个不同的注释键,并提取最新的值。

请求

名称类型
data ComponentData

响应

<EMPTY>

CrashReporter

fuchsia.feedback/crash_reporter.fidl 中定义

提供提交崩溃报告的功能。

FileReport

提交崩溃 report 并提供操作的最终结果。

这可能意味着在本地崩溃报告数据库中生成崩溃报告或将崩溃报告上传到远程崩溃服务器,具体取决于 FIDL 服务器的配置。

警告:这可能需要几分钟的时间。不建议以同步方式调用此函数。

添加:11

请求

名称类型
report CrashReport

响应

名称类型
payload CrashReporter_FileReport_Result

CrashReportingProductRegister

fuchsia.feedback/crash_register.fidl 中定义

允许组件选择其他崩溃报告产品,以便在其下提交该组件的崩溃信息。

默认情况下,平台检测到的所有崩溃问题都会归档到崩溃服务器上的单个产品下。借助此 API,组件可以选择自己的产品,同时仍能从平台的异常处理和崩溃报告中获益。

更新/插入

针对给定组件网址更新/插入崩溃报告产品。

对同一组件网址的后续调用 Upsert() 会覆盖该组件的 CrashReportingProduct

如果组件也提交崩溃报告,则首选 UpsertWithAck(),以避免竞态条件和错误归因。

请求

名称类型
component_url string[2083]
product CrashReportingProduct

UpsertWithAck

更新/插入(见上文),并在操作完成时通知客户端。

这样,客户端可以防止在提交崩溃报告与调用 Upsert 之间的争用之间发生争用。否则,如果在更新/插入操作完成之前提交崩溃报告,系统会将崩溃报告归因于错误的产品,从而导致崩溃数据可能不正确。

请求

名称类型
component_url string[2083]
product CrashReportingProduct

响应

<EMPTY>

DataProvider

fuchsia.feedback/data_provider.fidl 中定义

提供可用于附加到反馈报告中的数据,例如,系统提交的崩溃报告、用户提交的用户反馈报告或开发者提交的 bug 报告。

GetAnnotations

返回一组关于设备状态的注解。

如果收集这些商品时出现问题,annotations 可能为空。

这些注释与通过 GetSnapshot() 提供的注释相同。有些客户端只想要注释,而另一些客户端则同时需要注释和快照,而生成快照所花费的时间可能比收集注释所花的时间要长得多。例如,日志只是快照的一部分,不是注释的一部分,可能需要一些时间。

请求

名称类型
params GetAnnotationsParameters

响应

名称类型
annotations Annotations

GetScreenshot

返回以提供的 encoding 编码的当前视图的图像。

如果编码不受支持、设备没有显示屏或内存不足,无法分配屏幕截图图片,则 screenshot 可能为 null。

屏幕截图与快照是分开提供的,因为调用方可能希望在更改视图之前阻止此调用,但可以在后台收集快照。还有许多客户对屏幕截图不感兴趣。

请求

名称类型
encoding ImageEncoding

响应

名称类型
screenshot Screenshot?

GetSnapshot

返回设备状态的快照。

如果生成快照时出现问题,snapshot 可能为空。

请求

名称类型
params GetSnapshotParameters

响应

名称类型
snapshot Snapshot

DeviceIdProvider

fuchsia.feedback/device_id_provider.fidl 中定义

提供设备的反馈 ID。

反馈 ID 是用于对反馈报告进行分组的持久 UUID。该 ID 不能用于反馈以外的任何报告目的,例如不能用于遥测。

GetId

返回设备的反馈 ID。

此方法遵循挂起模式,自上次调用更改以来,直到 ID 发生变化时才会返回任何值。

请求

<EMPTY>

响应

名称类型
feedback_id string[64]

LastRebootInfoProvider

fuchsia.feedback/last_reboot_info.fidl 中定义

了解设备上次关机的原因。使用术语重新启动而不是关闭,因为许多开发者将有关关闭的问题表述为重新启动,并且大多数组件都有兴趣了解系统为什么会刚刚重新启动。

获取

请求

<EMPTY>

响应

名称类型
last_reboot LastReboot

结构

注解

fuchsia.feedback/annotation.fidl 中定义

注解及其纯 ASCII 字符串键。 注解是简短的字符串,例如板级名称或 build 号。

野战类型说明默认
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 无默认取景方式

枚举

FilingError灵活

类型:uint32

fuchsia.feedback/crash_reporter.fidl 中定义

添加:11

名称说明
0
1
2
3
4

FilingSuccess 灵活

类型: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 中定义

上次重新启动设备的原因。

添加次数:9

名称说明
0

如果服务器发送未使用客户端编译的新枚举值,则客户端将获取此值。

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.version”。
  • 必须与 [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”,以便在按字典顺序排序时,相关注解可以归为一组(这里与“build”相关)。

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 的崩溃报告对应于不同的崩溃,但也可以被视为属于同一事件,例如,低级服务器中的崩溃会导致高级界面 widget 中出现崩溃。

program_uptime zx/Duration

程序在崩溃前运行了多长时间。

crash_signature string[128]

崩溃服务器可用于跟踪一段时间内同一崩溃的文本签名,例如: “kernel-panic”或“oom”。此签名将优先于从其他数据派生的任何自动签名。

与事件 ID 不同,共用相同签名的崩溃报告对应于同一个崩溃,但这些崩溃发生在多个事件上,例如,每当服务器发出相同的请求时,就会出现 null 指针异常。

必须与 [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| 为 FilingSuccess::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| 通过此渠道发送,而不是在 |Snapshot| 响应的 |archive| 字段中设置。如果客户端位于主机上并且不支持 VMO,这通常很有用。

LastReboot

fuchsia.feedback/last_reboot_info.fidl 中定义

有关设备上次重新启动的原因的信息。

序数野战类型说明
graceful bool

上次重新启动是否正常,即设备没有因错误而重新启动,而是以受控方式重新启动。

此字段可让客户端知道上次重新启动是否正常,而无需解析可选的 |reason| 字段。这在未设置 |reason|(即,因为系统不知道重新启动是否正常,或 API 发展以支持新的 RebootReason 值且客户端尚未更新)这一事实时非常有用。

如果提供了 |reason|,则此字段始终具有值。但是,|reason| 不一定始终具有此字段提供的值。

reason RebootReason

设备上次重新启动的原因。

uptime zx/Duration

设备重新启动前的正常运行时间。

NativeCrashReport 资源

fuchsia.feedback/crash_reporter.fidl 中定义

表示客户端已为其构建小型转储的原生异常的崩溃报告。

序数野战类型说明
minidump fuchsia.mem/Buffer

采用迷你转储格式的核心转储。

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 归档文件包含若干文件,分别对应从平台收集的各种数据。通常,所有注解(设备正常运行时间、build 版本等)都有一个文件,每个附件(日志、检查数据等)也有一个文件。

如果请求中设置了 |response_channel|,则不会设置此参数。

annotations vector<Annotation>[64]

键值对字符串对的矢量。键必须唯一。

虽然这些注释包含在 ZIP 归档文件中,但有些客户还希望它们单独编入索引或扩充它们,因此我们也要单独提供它们。

联合

CrashReporter_FileReport_Result 严格

fuchsia.feedback/crash_reporter.fidl 中定义

序数变体类型说明
response CrashReporter_FileReport_Response
err FilingError

SpecificCrashReport 灵活 资源

fuchsia.feedback/crash_reporter.fidl 中定义

表示特定的崩溃报告。

当服务器需要以特殊方式处理给定类型崩溃的特定注解和附件时,添加一个新成员。例如,在 JavaScript 代码中添加 RuntimeCrashReport

序数变体类型说明
native NativeCrashReport

适用于原生异常。

dart RuntimeCrashReport

适用于 Dart 异常。

常量

名称类型说明
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