blob: 5142c59ab7cb5dee82739ab59b7e8a5b25234935 [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.diagnostics.stream;
using fuchsia.diagnostics;
using zx;
/// Maximum number of arguments that can be encoded per record, as specified by the tracing format:
///
/// https://fuchsia.dev/fuchsia-src/development/tracing/trace-format#arguments
const uint32 MAX_ARGS = 15;
/// A small(ish) limit on the length of argument names is used because argument names are expected
/// to be used repeatedly, many times.
const uint32 MAX_ARG_NAME_LENGTH = 256;
/// The maximum string length which we can encode into the tracing format.
const uint32 MAX_TEXT_ARG_LENGTH = 32768;
/// A record in the diagnostic stream.
[MaxHandles = "0"]
struct Record {
/// The monotonic time at which the record was generated.
zx.time timestamp;
/// Severity of the record.
fuchsia.diagnostics.Severity severity;
/// The key-value pairs which make up this record.
vector<Argument>:MAX_ARGS arguments;
};
/// A named key-value pair in the diagnostic record.
[MaxHandles = "0"]
struct Argument {
/// The name of the argument.
string:MAX_ARG_NAME_LENGTH name;
/// The value of the argument.
Value value;
};
/// An argument value which can be one of several types.
[MaxHandles = "0"]
flexible union Value {
/// A signed integral argument.
1: int64 signed_int;
/// An unsigned integral argument.
2: uint64 unsigned_int;
/// A double-precision floating-point argument.
3: float64 floating;
/// A UTF8 text argument.
4: string:MAX_TEXT_ARG_LENGTH text;
};