|  | // 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; | 
|  | }; |