// 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 consisely report all package metrics.
message PackageMetrics {
  // Name of the package.
  optional string name = 1;

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