PROTOCOLS
ComponentDataRegister
Defined in fuchsia.feedback/data_register.fidl
Registers data useful to attach in feedback reports (crash, user feedback or bug reports).
This can be used by components to augment the data attached to all feedback reports. By default the Feedback service attaches data exposed to the platform. This protocol is useful for data known by certain components in certain products, but that is not exposed to the platform.
The epitaph ZX_ERR_INVALID_ARGS indicates that the client is sending invalid requests. See below for each request why they might be invalid.
The epitaph ZX_ERR_NO_RESOURCES indicates that the server can no longer store additional component data and will not service new connections.
Upsert
Upserts, i.e. updates or inserts, extra component data to be included in feedback reports.
The namespace and each annotation key are used to decide whether to update or insert an annotation. If an annotation is already present for a given key within the same namespace, update the value, otherwise insert the annotation with that key under that namespace.
For instance, assuming these are the data already held by the server (from previous calls to Upsert()):
{
"bar": { # namespace
"channel": "stable",
},
"foo": { # namespace
"version": "0.2",
}
}
then:
Upsert({
"namespace": "bar",
"annotations": [
"version": "1.2.3.45",
"channel": "beta",
]
})
would result in the server now holding:
{
"bar": { # namespace
"channel": "beta", # updated
"version": "1.2.3.45" # inserted
},
"foo": { # namespace
"version": "0.2", # untouched
}
}
Note that the server will only hold at most MAX_NUM_ANNOTATIONS_PER_NAMESPACE distinct annotation keys per namespace, picking up the latest values.
Request
Name | Type |
---|---|
data |
ComponentData
|
Response
<EMPTY>
CrashReporter
Defined in fuchsia.feedback/crash_reporter.fidl
Provides the ability to file crash reports.
FileReport
Files a crash report
and gives the final result of the operation.
This could mean generating a crash report in a local crash report database or uploading the crash report to a remote crash server depending on the FIDL server's configuration.
Warning: this could potentially take up to several minutes. Calling this function in a synchronous manner is not recommended.
Request
Name | Type |
---|---|
report |
CrashReport
|
Response
Name | Type |
---|---|
payload |
CrashReporter_FileReport_Result
|
CrashReportingProductRegister
Defined in fuchsia.feedback/crash_register.fidl
Allows a component to choose a different crash reporting product to file crashes for that component under.
By default, all crashes detected by the platform are filed under a single product on the crash server. This API allows components to choose their own product while still benefiting from the platform's exception handling and crash reporting.
Upsert
Upserts, i.e. updates or inserts, a crash reporting product for a given component URL.
A subsequent call to Upsert() for the same component URL overwrites the
CrashReportingProduct
for that component.
Prefer UpsertWithAck() if the component also files crash reports itself, to avoid race conditions and mis-attribution.
Request
Name | Type |
---|---|
component_url |
string:2083
|
product |
CrashReportingProduct
|
UpsertWithAck
Upserts (see above) and notifies the client when the operation is complete.
This allows clients to prevent races between filing crash reports and calls to Upsert. Otherwise if a crash report is filed before the upsert completes, the crash report will be attributed to the wrong product, leading to potentially incorrect crash data.
Request
Name | Type |
---|---|
component_url |
string:2083
|
product |
CrashReportingProduct
|
Response
<EMPTY>
DataProvider
Defined in fuchsia.feedback/data_provider.fidl
Provides data useful to attach to feedback reports, e.g., a crash report filed by the system, a user feedback report filed by a user or a bug report filed by a developer.
GetAnnotations
Returns a set of annotations about the device's state.
annotations
may be empty if there was an issue collecting them.
These are the same annotations as provided through GetSnapshot() - some clients only want the annotations while others want both the annotations and the snapshot and generating the snapshot can take significantly more time than collecting the annotations, e.g., logs are only part of the snapshot and not part of the annotations and can take some time.
Request
Name | Type |
---|---|
params |
GetAnnotationsParameters
|
Response
Name | Type |
---|---|
annotations |
Annotations
|
GetScreenshot
Returns an image of the current view encoded in the provided encoding
.
screenshot
may be null if the encoding is not supported, the device does not have a
display, or there is not enough memory to allocate the screenshot image.
The screenshot is provided separately from the snapshot as callers might want to block on this call before changing the view while collecting a snapshot in the background is fine. There are also a lot of clients that are not interested in the screenshot.
Request
Name | Type |
---|---|
encoding |
ImageEncoding
|
Response
Name | Type |
---|---|
screenshot |
Screenshot?
|
GetSnapshot
Returns a snapshot of the device's state.
snapshot
may be empty if there was an issue generating the snapshot.
Request
Name | Type |
---|---|
params |
GetSnapshotParameters
|
Response
Name | Type |
---|---|
snapshot |
Snapshot
|
DeviceIdProvider
Defined in fuchsia.feedback/device_id_provider.fidl
Provides the device's feedback ID.
The feedback ID is a persisted UUID used to group feedback reports. The ID is not intended to be used for any reporting purposes other than feedback, e.g., not intended to be used for telemetry.
GetId
Returns the device's feedback ID.
This method follows the hanging-get pattern and won't return a value until the ID since the last call has changed.
Request
<EMPTY>
Response
Name | Type |
---|---|
feedback_id |
string:64
|
LastRebootInfoProvider
Defined in fuchsia.feedback/last_reboot_info.fidl
Get information about why a device last shutdown. The term reboot is used instead of shutdown since many developers phrase their questions about shutdowns in terms of reboots and most components are interested in knowing why the system just rebooted.
Get
Request
<EMPTY>
Response
Name | Type |
---|---|
last_reboot |
LastReboot
|
STRUCTS
Annotation
Defined in fuchsia.feedback/annotation.fidl
An annotation and its plain ASCII string key. Annotations are short strings, e.g., the board name or the build version.
Field | Type | Description | Default |
---|---|---|---|
key |
string:128
|
No default | |
value |
string:1024
|
No default |
Attachment resource
Defined in fuchsia.feedback/attachment.fidl
An attachment and its plain ASCII string key. Attachments are larger objects, e.g., log files. They may be binary or text data.
Field | Type | Description | Default |
---|---|---|---|
key |
string:128
|
No default | |
value |
fuchsia.mem/Buffer
|
No default |
CrashReporter_FileReport_Response
Defined in fuchsia.feedback/crash_reporter.fidl
Field | Type | Description | Default |
---|---|---|---|
results |
FileReportResults
|
No default |
Screenshot resource
Defined in fuchsia.feedback/data_provider.fidl
An encoded image of the screen.
Field | Type | Description | Default |
---|---|---|---|
image |
fuchsia.mem/Buffer
|
No default | |
dimensions_in_px |
fuchsia.math/Size
|
No default |
ENUMS
FilingError flexible
Type: uint32
Defined in fuchsia.feedback/crash_reporter.fidl
Name | Value | Description |
---|---|---|
UNKNOWN |
0 |
|
INVALID_ARGS_ERROR |
1 |
|
SERVER_ERROR |
2 |
|
PERSISTENCE_ERROR |
3 |
|
QUOTA_REACHED_ERROR |
4 |
FilingSuccess flexible
Type: uint32
Defined in fuchsia.feedback/crash_reporter.fidl
"Memory" refers to a non-persistent location, e.g. a memory-backed filesystem.
Name | Value | Description |
---|---|---|
UNKNOWN |
0 |
|
REPORT_UPLOADED |
1 |
|
REPORT_ON_DISK |
2 |
|
REPORT_IN_MEMORY |
3 |
|
REPORT_NOT_FILED_USER_OPTED_OUT |
4 |
ImageEncoding strict
Type: uint32
Defined in fuchsia.feedback/data_provider.fidl
The encoding used for the image.
Today, only PNG is supported, but in the future the screenshot could be returned in other encodings if need arises.
Name | Value | Description |
---|---|---|
PNG |
0 |
RebootReason flexible
Type: uint16
Defined in fuchsia.feedback/last_reboot_info.fidl
Reasons why a device last rebooted.
Name | Value | Description |
---|---|---|
UNKNOWN |
0 |
The client will get this value if the server is sending a new enum value that the client was not compiled with. Added: 9
|
COLD |
2 |
The device booted from a cold state. This is most likely the result of an extended period of time without power or a device booting with Fuchsia for the first time. |
BRIEF_POWER_LOSS |
3 |
The device rebooted due to a brief loss of power. On some hardware this could be the result of a user disconnecting, then reconnecting their device's power supply in rapid succession. |
BROWNOUT |
4 |
The device rebooted because its voltage dipped below an allowable level without going to 0. |
KERNEL_PANIC |
5 |
|
SYSTEM_OUT_OF_MEMORY |
6 |
|
HARDWARE_WATCHDOG_TIMEOUT |
7 |
|
SOFTWARE_WATCHDOG_TIMEOUT |
8 |
|
ROOT_JOB_TERMINATION |
19 |
The device rebooted because the userspace root job was terminated, most likely because one of its critical processes crashed. |
USER_REQUEST |
9 |
The device rebooted because a user of the device initiated the reboot. A user can be a human or a program that interacts with the device on behalf of a human, such as SL4F or RCS. |
SYSTEM_UPDATE |
10 |
The device rebooted because of an OTA. |
RETRY_SYSTEM_UPDATE |
17 |
The device rebooted because applying the OTA failed and we want to retry. |
HIGH_TEMPERATURE |
11 |
The device rebooted because it was determined to be too hot. |
SESSION_FAILURE |
12 |
The device rebooted because of an issue with a session or because the session manager was unable to recover from an error. |
SYSMGR_FAILURE |
15 |
The device rebooted because the system manager (sysmgr) was unable to recover from an error. |
FACTORY_DATA_RESET |
14 |
The device rebooted following a data reset to factory defaults. See fuchsia.recovery.FactoryReset. |
CRITICAL_COMPONENT_FAILURE |
16 |
The device rebooted because a critical component managed by sysmgr has failed. |
ZBI_SWAP |
18 |
The device rebooted to apply the swap of Zircon boot images. |
TABLES
Annotations
Defined in fuchsia.feedback/data_provider.fidl
Annotations about the device's state.
Clients typically upload the data straight to servers. So the data comes in the form of arbitrary key-value pairs that clients can directly forward to the servers.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
annotations |
vector<Annotation>:64
|
A vector of key-value string pairs. Keys are guaranteed to be unique. DeprecationFeedback is getting close to the limit defined by MAX_NUM_ANNOTATIONS_PROVIDED. Clients should migrate to |annotations2|, which will include all annotations included in |annotations| but has a higher limit for future growth. Deprecated: 25
|
2 |
annotations2 |
vector<Annotation>:512
|
A vector of key-value string pairs. Keys are guaranteed to be unique. Added: 25
|
ComponentData
Defined in fuchsia.feedback/data_register.fidl
Data known to a component, but not exposed to the platform, to attach to feedback reports.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
namespace |
string:32
|
The top-level namespace associated with the data:
|
2 |
annotations |
vector<Annotation>:16
|
A vector of key-value string pairs, e.g., Keys:
|
CrashReport resource
Defined in fuchsia.feedback/crash_reporter.fidl
Represents a crash report.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
program_name |
string:1024
|
The name of the program that crashed, e.g., the process or component's name. |
2 |
specific_report |
SpecificCrashReport
|
The specific report that depends on the type of crashes. This field should be set if additional information about the crashing program needs to be sent, e.g., a minidump. |
3 |
annotations |
vector<Annotation>:32
|
A vector of key-value string pairs representing arbitrary data that should be attached to a crash report. Keys should be unique as only the latest value for a given key in the vector will be considered. |
4 |
attachments |
vector<Attachment>:16
|
A vector of key-value string-to-VMO pairs representing arbitrary data that should be attached to a crash report. Keys should be unique as only the latest value for a given key in the vector will be considered. |
5 |
event_id |
string:128
|
A text ID that the crash server can use to group multiple crash reports related to the same event. Unlike the crash signature, crash reports sharing the same ID correspond to different crashes, but can be considered as belonging to the same event, e.g., a crash in a low-level server causing a crash in a high-level UI widget. |
6 |
program_uptime |
zx/Duration
|
How long the program was running before it crashed. |
7 |
crash_signature |
string:128
|
A text signature that the crash server can use to track the same crash over time, e.g., "kernel-panic" or "oom". This signature will take precedence over any automated signature derived from the rest of the data. Unlike the event ID, crash reports sharing the same signature correspond to the same crash, but happening over multiple events, e.g., a null pointer exception in a server whenever asked the same request. Must match [a-z][a-z-]* i.e. only lowercase letters and hyphens or this will result in a ZX_ERR_INVALID_ARGS epitaph. |
8 |
is_fatal |
bool
|
Indicates whether the crash report is for the atypical stop of a running process, component, or the system itself. Examples of events that result in fatal crash reports are:
Examples of events that result in non-fatal crash reports are:
This field is primarily used for grouping crashes by fatal, not fatal, and unknown, each corresponding to the field being set to true, set to false, or not set respectively. |
CrashReportingProduct
Defined in fuchsia.feedback/crash_register.fidl
Product information to report to the crash server.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
name |
string
|
The product name on the crash server.
|
2 |
version |
string
|
Optional product version of the component.
If no version is specified then none is reported to the crash server. |
3 |
channel |
string
|
Optional product release channel for the component, e.g., "canary", "beta", "stable". If no channel is specified then none is reported to the crash server. |
FileReportResults
Defined in fuchsia.feedback/crash_reporter.fidl
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
result |
FilingSuccess
|
The success type. |
2 |
report_id |
string:64
|
A non-empty value if |result| is FilingSuccess::REPORT_UPLOADED. |
GetAnnotationsParameters
Defined in fuchsia.feedback/data_provider.fidl
Parameters for the DataProvider::GetAnnotations() method.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
collection_timeout_per_annotation |
zx/Duration
|
Annotations are collected in parallel from various places in the platform, each with a timeout.
|
GetSnapshotParameters resource
Defined in fuchsia.feedback/data_provider.fidl
Parameters for the DataProvider::GetSnapshot() method.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
collection_timeout_per_data |
zx/Duration
|
A snapshot aggregates various data from the platform (device uptime, logs, Inspect data, etc.) that are collected in parallel. Internally, each data collection is done within a timeout.
Note that this does not control how much total time the snapshot generation may take,
which is by construction higher than |
2 |
response_channel |
handle<channel>
|
If set, the snapshot archive will be sent as a |fuchsia.io.File| over this channel instead of being set in the |archive| field in the |Snapshot| response. This is typically useful if the client is on the host and does not support VMOs. |
LastReboot
Defined in fuchsia.feedback/last_reboot_info.fidl
Information about why a device last rebooted.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
graceful |
bool
|
Whether the last reboot was graceful, i.e. the device didn't reboot in response to an error and rebooted in a controlled manner. This field allows clients to know whether the last reboot was graceful without having to parse the optional |reason| field. This is useful when |reason| is not set, i.e. because the system doesn't know more than the fact that the reboot was graceful, or when the API evolves to support new RebootReason values and the clients hasn't been updated yet. This field is always has a value if |reason| is provided. However, |reason| might not always have a value this field is provided. |
2 |
reason |
RebootReason
|
Why a device last rebooted. |
3 |
uptime |
zx/Duration
|
The uptime of the device before it rebooted. |
NativeCrashReport resource
Defined in fuchsia.feedback/crash_reporter.fidl
Represents a crash report for a native exception out of which the client has built a minidump.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
minidump |
fuchsia.mem/Buffer
|
The core dump in the Minidump format. |
2 |
process_name |
string:64
|
The name of the crashed process. |
3 |
process_koid |
zx/Koid
|
The kernel object id of the crashed process. |
4 |
thread_name |
string:64
|
The name of the crashed thread. |
5 |
thread_koid |
zx/Koid
|
The kernel object id of the crashed thread. |
RuntimeCrashReport resource
Defined in fuchsia.feedback/crash_reporter.fidl
Represents a crash report for a runtime exception, applicable to most languages.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
exception_type |
string:128
|
The exception type, e.g., "FileSystemException". |
2 |
exception_message |
string:4096
|
The exception message, e.g., "cannot open file". |
3 |
exception_stack_trace |
fuchsia.mem/Buffer
|
The text representation of the exception stack trace. |
Snapshot resource
Defined in fuchsia.feedback/data_provider.fidl
Snapshot about the device's state.
Clients typically upload the data straight to servers. So the data comes in the form of arbitrary key-value pairs that clients can directly forward to the servers.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
archive |
Attachment
|
A <filename, ZIP archive> pair. The ZIP archive contains several files corresponding to the various data it collected from the platform. There is typically one file for all the annotations (device uptime, build version, etc.) and one file per attachment (logs, Inspect data, etc.). Not set if |response_channel| was set in the request. |
2 |
annotations |
vector<Annotation>:64
|
A vector of key-value string pairs. Keys are guaranteed to be unique. While the annotations are included in the ZIP archive itself, some clients also want them separately to index or augment them so we provide them separately as well. DeprecationFeedback is getting close to the limit defined by MAX_NUM_ANNOTATIONS_PROVIDED. Clients should migrate to |annotations2|, which will include all annotations included in |annotations| but has a higher limit for future growth. Deprecated: 25
|
3 |
annotations2 |
vector<Annotation>:512
|
A vector of key-value string pairs. Keys are guaranteed to be unique. While the annotations are included in the ZIP archive itself, some clients also want them separately to index or augment them so we provide them separately as well. Added: 25
|
UNIONS
CrashReporter_FileReport_Result strict
Defined in fuchsia.feedback/crash_reporter.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
CrashReporter_FileReport_Response
|
|
2 |
err |
FilingError
|
SpecificCrashReport flexible resource
Defined in fuchsia.feedback/crash_reporter.fidl
Represents a specific crash report.
Add a new member when the server needs to special case how it handles certain annotations and
attachments for a given type of crashes, e.g., a RuntimeCrashReport
for Javascript.
Ordinal | Variant | Type | Description |
---|---|---|---|
2 |
native |
NativeCrashReport
|
Intended for a native exception. |
3 |
dart |
RuntimeCrashReport
|
Intended for a Dart exception. |
CONSTANTS
Name | Value | Type | Description |
---|---|---|---|
MAX_ANNOTATION_KEY_LENGTH |
128
|
uint64 |
Maximum length for an annotation's key. Added: 23
|
MAX_ANNOTATION_VALUE_LENGTH |
1024
|
uint64 |
Maximum length for an annotation's value. Added: 23
|
MAX_CRASH_SIGNATURE_LENGTH |
128
|
uint32 |
|
MAX_EVENT_ID_LENGTH |
128
|
uint32 |
|
MAX_EXCEPTION_MESSAGE_LENGTH |
4096
|
uint32 |
Added: 10
|
MAX_EXCEPTION_TYPE_LENGTH |
128
|
uint32 |
|
MAX_NAMESPACE_LENGTH |
32
|
uint32 |
|
MAX_NUM_ANNOTATIONS2_PROVIDED |
512
|
uint32 |
Added: 25
|
MAX_NUM_ANNOTATIONS_PER_CRASH_REPORT |
32
|
uint32 |
|
MAX_NUM_ANNOTATIONS_PER_NAMESPACE |
16
|
uint32 |
|
MAX_NUM_ANNOTATIONS_PROVIDED |
64
|
uint32 |
DeprecationFeedback is getting close to the limit defined by MAX_NUM_ANNOTATIONS_PROVIDED. Clients should migrate to using MAX_NUM_ANNOTATIONS2_PROVIDED with |annotations2|, which will include all annotations included in |annotations| but has a higher limit for future growth. Deprecated: 25
|
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 |
Added: 11
|
MAX_THREAD_NAME_LENGTH |
64
|
uint32 |