blob: 9e517be310b546486eef9f141fe88001a1a79f60 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.feedback;
using fuchsia.mem;
using zx;
/// Provides the ability to file crash reports.
[Discoverable]
protocol CrashReporter {
/// Files a crash `report`.
///
/// 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.
File(CrashReport report) -> () error zx.status;
};
const uint32 MAX_PROGRAM_NAME_LENGTH = 1024;
const uint32 MAX_NUM_ANNOTATIONS_PER_CRASH_REPORT = 32;
const uint32 MAX_NUM_ATTACHMENTS_PER_CRASH_REPORT = 16;
const uint32 MAX_EVENT_ID_LENGTH = 128;
/// Represents a crash report.
table CrashReport {
/// The name of the program that crashed, e.g., the process or component's name.
1: string:MAX_PROGRAM_NAME_LENGTH program_name;
/// How long the program was running before it crashed.
6: zx.duration program_uptime;
/// The specific report that depends on the type of crashes.
2: SpecificCrashReport specific_report;
/// 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.
3: vector<Annotation>:MAX_NUM_ANNOTATIONS_PER_CRASH_REPORT annotations;
/// 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.
4: vector<Attachment>:MAX_NUM_ATTACHMENTS_PER_CRASH_REPORT attachments;
/// 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.
5: string:MAX_EVENT_ID_LENGTH event_id;
};
/// 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.
flexible union SpecificCrashReport {
/// Intended for arbitrary crashes, e.g., OOM, out-of-disk.
1: GenericCrashReport generic;
/// Intended for a native exception.
2: NativeCrashReport native;
/// Intended for a Dart exception.
3: RuntimeCrashReport dart;
};
const uint32 MAX_CRASH_SIGNATURE_LENGTH = 128;
/// Represents a generic crash report.
table GenericCrashReport {
/// A text signature that the crash server can use to track the same crash over time, e.g.,
/// "kernel-panic" or "oom".
///
/// 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.
1: string:MAX_CRASH_SIGNATURE_LENGTH crash_signature;
};
/// Represents a crash report for a native exception out of which the client has built a minidump.
table NativeCrashReport {
/// The core dump in the Minidump format.
1: fuchsia.mem.Buffer minidump;
};
const uint32 MAX_EXCEPTION_TYPE_LENGTH = 128;
const uint32 MAX_EXCEPTION_MESSAGE_LENGTH = 2048;
/// Represents a crash report for a runtime exception, applicable to most languages.
table RuntimeCrashReport {
/// The exception type, e.g., "FileSystemException".
1: string:MAX_EXCEPTION_TYPE_LENGTH exception_type;
/// The exception message, e.g., "cannot open file".
2: string:MAX_EXCEPTION_MESSAGE_LENGTH exception_message;
/// The text representation of the exception stack trace.
3: fuchsia.mem.Buffer exception_stack_trace;
};