// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module blink.mojom;

import "third_party/blink/public/mojom/tokens/tokens.mojom";

struct PerContextV8MemoryUsage {
  // TODO(ulan): Replace this with V8ContextToken once it is hooked up in
  // PerformanceManager.
  ExecutionContextToken token;
  uint64 bytes_used = 0;
  // TODO(906991): Remove this once PlzDedicatedWorker ships. Until then
  // the browser does not know URLs of dedicated workers, so we pass them
  // together with the measurement result.
  // This field is filled only for dedicated workers and it may be empty
  // if the URL is too long.
  string? url;
};

struct PerIsolateV8MemoryUsage {
  // The number of V8 contexts not associated with an execution context,
  // likely web application leaks, and their associated byte usage.
  // Such contexts are known as detached contexts.
  uint64 num_detached_contexts;
  uint64 detached_bytes_used;

  // Bytes shared across all V8 contexts. These bytes are not attributed
  // to any particular V8 context.
  uint64 shared_bytes_used;

  // Bytes used on the Blink heap corresponding to this V8 isolate.
  uint64 blink_bytes_used;

  // The V8 memory usage by individual V8 contexts in this process.
  array<PerContextV8MemoryUsage> contexts;
};

struct PerProcessV8MemoryUsage {
  // The V8 memory usage by individual isolates in this process.
  // Each isolate has its own heap.
  array<PerIsolateV8MemoryUsage> isolates;
};

// Allows a browser to query the resource usage of sub-processes.
interface V8DetailedMemoryReporter {
  // The mode for performing memory measurement.
  enum Mode {
    DEFAULT, // Perform memory measurement on the next garbage collection
             // and force garbage collection after some timeout.

    EAGER,   // Force immediate garbage collection and memory measurement.

    LAZY,    // Perform memory measurement on the next garbage collection.
  };
  // Requests a per-frame estimate of v8 heap byte usage on the next garbage
  // collection. Note that this causes extra cost for the next garbage
  // collection, which can be on the order of 10-20%.
  GetV8MemoryUsage(Mode mode) => (PerProcessV8MemoryUsage memory_usage);
};

