// Copyright 2020 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto2";

package devtools.build.lib.packages.metrics;

import "google/protobuf/duration.proto";

option java_package = "com.google.devtools.build.lib.packages.metrics";
option java_multiple_files = true;

// Message used to concisely report all package metrics.
message PackageLoadMetrics {
  // Name of the package.
  optional string name = 1;

  // Wall-time duration it took to construct the package.
  optional google.protobuf.Duration load_duration = 2;

  // Number of targets created in the package.
  optional uint64 num_targets = 3;

  // Number of Starlark computation steps required to create the package.
  optional uint64 computation_steps = 4;

  // Number of transitive Starlark load()s required to create the package.
  optional uint64 num_transitive_loads = 5;

  // Numeric value given to the memory and general accounting costs associated
  // with a loaded package. Values are an approximate but reasonable proxy for
  // the real storage costs of a package.
  optional uint64 package_overhead = 6;
}
