| // Copyright 2020 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.fuzzer; |
| |
| using zx; |
| |
| /// Details about an instrumented process. |
| /// |
| /// See also: |
| /// |
| /// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_stats |
| /// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_runtime |
| type ProcessStats = struct { |
| /// The kernel object identifier of the task. |
| koid uint64; |
| |
| /// The total size of mapped memory ranges in this process. |
| mem_mapped_bytes uint64; |
| |
| /// Committed memory that is only mapped into this process. |
| mem_private_bytes uint64; |
| |
| /// Committed memory that is mapped into this and at least one other |
| /// process. |
| mem_shared_bytes uint64; |
| |
| /// Estimate of how much of |mem_shared_bytes| that this process owns. |
| mem_scaled_shared_bytes uint64; |
| |
| /// The total amount of time this process was running on a CPU and not |
| /// blocked. |
| cpu_time zx.Duration; |
| |
| /// The total amount of time this process was ready but not actually using a |
| /// CPU. |
| queue_time zx.Duration; |
| |
| /// The total amount of time this process spent handling page faults. |
| page_fault_time zx.Duration; |
| |
| /// The total amount of time this process spent waiting on contended kernel |
| /// locks. |
| lock_contention_time zx.Duration; |
| }; |
| |
| /// See `Controller.Monitor`. Used to indicate why an update was sent. |
| type UpdateReason = flexible enum : uint8 { |
| /// Represents an otherwise unspecified update. Useful when integrating |
| /// other engines as runners, e.g. libFuzzer. |
| MISC = 1; |
| |
| /// A fuzzing action is starting. See, e.g. `Controller.Fuzz`, |
| /// `Controller.Merge`, etc. |
| INIT = 2; |
| |
| /// An input produced new feedback. |
| NEW = 3; |
| |
| /// Periodic status update, configured with `Options.pulse_interval`. |
| PULSE = 4; |
| |
| /// A shorter input for some particular feedback has been found. |
| REDUCE = 5; |
| |
| /// A fuzzing action is complete. |
| DONE = 6; |
| }; |
| |
| /// The maximum number of processes for which stats will be returned via |
| /// `Status`. |
| const MAX_PROCESS_STATS uint16 = 256; |
| |
| /// See `Controller.GetStatus`. |
| // |
| // TODO(https://fxbug.dev/42074956): Include workflow enum. |
| type Status = table { |
| /// True if the fuzzer is working on a commands, e.g. it is fuzzing. |
| 1: running bool; |
| |
| /// Number of runs performed so far. |
| 2: runs uint32; |
| |
| /// Time spent so far. |
| 3: elapsed zx.Duration; |
| |
| /// Number of program edges covered so far. |
| 4: covered_pcs uint64; |
| |
| /// Number of opaque features encountered so far. |
| 5: covered_features uint64; |
| |
| /// Number of inputs in the "live" corpus. |
| 6: corpus_num_inputs uint64; |
| |
| /// Total size of the inputs in the "live" corpus. |
| 7: corpus_total_size uint64; |
| |
| /// Information about the instrumented processes attached to the engine. |
| 8: process_stats vector<ProcessStats>:MAX_PROCESS_STATS; |
| }; |
| |
| /// See `Status`. This protocol is used to push status from the `Controller` to |
| /// callers. |
| closed protocol Monitor { |
| /// Sends the current status. |
| /// |
| /// + request `reason` the cause of a status change. |
| /// + status `status` the reported fuzzing metrics. |
| strict Update(struct { |
| reason UpdateReason; |
| status Status; |
| }) -> (); |
| }; |