Fuchsia.feedback

添加时间:7

PROTOCOLS

ComponentDataRegister

fuchsia.feedback/data_register.fidl 中定义

注册要在反馈报告(崩溃、用户反馈或 bug 报告)中附加的数据。

组件可以使用此 API 来增强附加到所有反馈报告的数据。默认情况下 反馈服务会附加向平台公开的数据此协议对于数据非常有用 某些产品中特定组件已知,但不向平台公开。

标题 ZX_ERR_INVALID_ARGS 表示客户端发送的请求无效。请参阅 下方分别列出了每个请求无效的原因

标题 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

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

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

请求

名称类型
component_url string[2083]
product CrashReportingProduct

响应

<空>

DataProvider

fuchsia.feedback/data_provider.fidl 中定义

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

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 无默认设置

精英

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 中定义

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

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

与数据关联的顶级命名空间:

  • 旨在将相关数据归为一组,并减少不同平台间的数据密钥冲突 命名空间
  • 可由多个客户端共享,例如,同一个同一个 或多个组件之间来公开相关数据,并且这些组件都使用 同一个命名空间
  • 将作为所有反馈报告中该命名空间内传递的每个数据键的前缀, 例如,注释“version”将显示为“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 对与以下项相关的多个崩溃报告进行分组: 事件。

与崩溃签名不同,共用相同 ID 的崩溃报告会对应不同的 但可视为属于同一事件,例如低层级中的崩溃 服务器导致高级界面 widget 崩溃。

program_uptime zx/Duration

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

crash_signature string[128]

崩溃服务器可用来跟踪一段时间内同一崩溃问题的文本签名,例如, “kernel-panic”即“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|是 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 的构造,因为客户端可以控制 总时间。

response_channel handle<channel>

如果设置,快照存档将以 |fuchsia.io.File| 的形式发送。改为观看此频道 在 |archive|字段(位于 |Snapshot|中)响应。这通常适用于 客户端位于主机上,不支持 VMO。

LastReboot

fuchsia.feedback/last_reboot_info.fidl 中定义

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

序数字段类型说明
graceful bool

上次重新启动是否正常,即设备没有因出错而重新启动 并以可控方式重新启动

此字段可让客户端了解上次重新启动是否正常, 解析可选的 |reason|字段。当 |reason|未设置,即 系统只知道重新启动很正常,或 API 何时 不断改进,以支持新的 RebootReason 值,并且客户端尚未更新。

如果 |reason|,则此字段始终包含值。但是,|原因|可能不会 始终具有此字段提供的值。

reason RebootReason

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

uptime zx/Duration

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

NativeCrashReport 资源

fuchsia.feedback/crash_reporter.fidl 中定义

表示客户端已针对其构建迷你转储的原生异常的崩溃报告。

序数字段类型说明
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

一个 <filename, ZIParchive>配对。

该 ZIP 归档文件包含多个文件,这些文件与从该归档文件收集的各种数据相对应 平台。通常,所有注解(设备正常运行时间、版本 版本等),每个附件各有一个文件(日志、检查数据等)。

如果 |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_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