syntax = "proto3";

package tensorflow;

message ProfileOptions {
  // Some default value of option are not proto3 default value. Use this version
  // to determine if we should use default option value instead of proto3
  // default value.
  uint32 version = 5;

  enum DeviceType {
    UNSPECIFIED = 0;
    CPU = 1;
    GPU = 2;
    TPU = 3;
  }

  // Device type to profile/trace: (version >= 1)
  // DeviceType::UNSPECIFIED: All registered device profiler will be enabled.
  // DeviceType::CPU: only CPU will be profiled.
  // DeviceType::GPU: only CPU/GPU will be profiled.
  // DeviceType::TPU: only CPU/TPU will be profiled.
  DeviceType device_type = 6;

  // We don't collect the dataset ops by default for better trace-viewer
  // scalability. The caller can mannually set this field to include the ops.
  bool include_dataset_ops = 1;

  // Levels of host tracing: (version >= 1)
  // - Level 0 is used to disable host traces.
  // - Level 1 enables tracing of only user instrumented (or default) TraceMe.
  // - Level 2 enables tracing of all level 1 TraceMe(s) and instrumented high
  //           level program execution details (expensive TF ops, XLA ops, etc).
  //           This is the default.
  // - Level 3 enables tracing of all level 2 TraceMe(s) and more verbose
  //           (low-level) program execution details (cheap TF ops, etc).
  uint32 host_tracer_level = 2;

  // Levels of device tracing: (version >= 1)
  // - Level 0 is used to disable device traces.
  // - Level 1 is used to enable device traces.
  // - More levels might be defined for specific device for controlling the
  //   verbosity of the trace.
  uint32 device_tracer_level = 3;

  // Whether enable python function calls tracing. Runtime overhead ensues if
  // enabled. Default off. (version >= 1)
  uint32 python_tracer_level = 4;

  // Whether serialize hlo_proto when XLA is used. (version >= 1)
  bool enable_hlo_proto = 7;

  // next-field: 8
}
