         
syntax = "proto2";
package NV.Profiler.Messages;
// enable arenas for better allocation performance
option cc_enable_arenas = true;
message ProfileMetricValue
{
    optional string StringValue = 1;
    optional float FloatValue = 2;
    optional double DoubleValue = 3;
    optional uint32 Uint32Value = 4;
    optional uint64 Uint64Value = 5;
}
message ProfileMetricListElement
{
    optional ProfileMetricValue CorrelationId = 1;
    required ProfileMetricValue ElementValue = 2;
}
enum ProfileMetricCategory
{
    MetricCategoryPm = 0;
    MetricCategorySampler = 1;
    // ONLY ADD AT THE END OF THIS LIST. DO NOT RE-ORDER.
}
message ProfileMetricResult
{
    required uint32 NameId = 1;
    optional ProfileMetricValue MetricValue = 2;
    repeated ProfileMetricListElement MetricValueList = 3;
    optional ProfileMetricCategory Category = 4 [default = MetricCategoryPm];
}
message PbPmPcSamplingDataPerSm
{
    required uint32 VsmId = 1; // Which sm this data is associated with
    // Raw buffers corresponding to the underlying vectors
    required bytes TimestampsStorage = 2;
    required bytes PcSamplesStorage = 3;
    optional bytes DroppedPcSamplesStorage = 4; // only allocated if actual dropped pc samples were observed
}
message PbPmPcSamplingData
{
    repeated PbPmPcSamplingDataPerSm PmPcSamplingDataPerSM = 1;
}
