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

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: test/custom_results/graphics/result.proto

package graphics

import (
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type Result_ExecutionEnvironment int32

const (
	Result_UNKNOWN  Result_ExecutionEnvironment = 0
	Result_HOST     Result_ExecutionEnvironment = 1
	Result_TERMINA  Result_ExecutionEnvironment = 2
	Result_CROSTINI Result_ExecutionEnvironment = 3
	Result_STEAM    Result_ExecutionEnvironment = 4
	Result_ARC      Result_ExecutionEnvironment = 5
	Result_ARCVM    Result_ExecutionEnvironment = 6
	Result_CROUTON  Result_ExecutionEnvironment = 7
	Result_CROSVM   Result_ExecutionEnvironment = 8
)

// Enum value maps for Result_ExecutionEnvironment.
var (
	Result_ExecutionEnvironment_name = map[int32]string{
		0: "UNKNOWN",
		1: "HOST",
		2: "TERMINA",
		3: "CROSTINI",
		4: "STEAM",
		5: "ARC",
		6: "ARCVM",
		7: "CROUTON",
		8: "CROSVM",
	}
	Result_ExecutionEnvironment_value = map[string]int32{
		"UNKNOWN":  0,
		"HOST":     1,
		"TERMINA":  2,
		"CROSTINI": 3,
		"STEAM":    4,
		"ARC":      5,
		"ARCVM":    6,
		"CROUTON":  7,
		"CROSVM":   8,
	}
)

func (x Result_ExecutionEnvironment) Enum() *Result_ExecutionEnvironment {
	p := new(Result_ExecutionEnvironment)
	*p = x
	return p
}

func (x Result_ExecutionEnvironment) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Result_ExecutionEnvironment) Descriptor() protoreflect.EnumDescriptor {
	return file_test_custom_results_graphics_result_proto_enumTypes[0].Descriptor()
}

func (Result_ExecutionEnvironment) Type() protoreflect.EnumType {
	return &file_test_custom_results_graphics_result_proto_enumTypes[0]
}

func (x Result_ExecutionEnvironment) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Result_ExecutionEnvironment.Descriptor instead.
func (Result_ExecutionEnvironment) EnumDescriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_result_proto_rawDescGZIP(), []int{0, 0}
}

// Result of a single test, trace, or benchmark run.
// Next Tag: 19
type Result struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Global unique result identifier.
	Id *ResultId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// When the result started and finished being collected.
	StartTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	EndTime   *timestamp.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// Machine which generated the result.
	Machine *MachineId `protobuf:"bytes,4,opt,name=machine,proto3" json:"machine,omitempty"`
	// Installed software at the time the result was collected.
	SoftwareConfig       *SoftwareConfigId           `protobuf:"bytes,5,opt,name=software_config,json=softwareConfig,proto3" json:"software_config,omitempty"`
	ExecutionEnvironment Result_ExecutionEnvironment `protobuf:"varint,6,opt,name=execution_environment,json=executionEnvironment,proto3,enum=test.custom_results.graphics.Result_ExecutionEnvironment" json:"execution_environment,omitempty"`
	// Lab or user originating this result.
	// Format:
	// - lab/LABNAME
	// - user/USERNAME
	InvocationSource string `protobuf:"bytes,7,opt,name=invocation_source,json=invocationSource,proto3" json:"invocation_source,omitempty"`
	// Details on the invocation if it was generated as part of a test.
	// TODO(davidriley): Flesh these out better.
	// TODO(davidriley): Record test status and error messages.
	TestId    string `protobuf:"bytes,17,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
	TestName  string `protobuf:"bytes,8,opt,name=test_name,json=testName,proto3" json:"test_name,omitempty"`
	TestJobId string `protobuf:"bytes,9,opt,name=test_job_id,json=testJobId,proto3" json:"test_job_id,omitempty"`
	// Command line used invoke the test.
	CommandLine string `protobuf:"bytes,10,opt,name=command_line,json=commandLine,proto3" json:"command_line,omitempty"`
	// Thing being tested.
	Benchmark string   `protobuf:"bytes,11,opt,name=benchmark,proto3" json:"benchmark,omitempty"`
	Trace     *TraceId `protobuf:"bytes,12,opt,name=trace,proto3" json:"trace,omitempty"`
	// fps, frames, time
	// usec for frame N
	// cpu/gpu utilization/frequency
	Metrics []*Result_Metric `protobuf:"bytes,13,rep,name=metrics,proto3" json:"metrics,omitempty"`
	// Identify the most interesting metric to show by default for a given result.
	PrimaryMetricName string          `protobuf:"bytes,14,opt,name=primary_metric_name,json=primaryMetricName,proto3" json:"primary_metric_name,omitempty"`
	Labels            []*Result_Label `protobuf:"bytes,15,rep,name=labels,proto3" json:"labels,omitempty"`
	// Software that was explicitly overridden from the normal system software
	// for a given result.
	Overrides *SoftwareOverridesConfig `protobuf:"bytes,18,opt,name=overrides,proto3" json:"overrides,omitempty"`
}

func (x *Result) Reset() {
	*x = Result{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_custom_results_graphics_result_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Result) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Result) ProtoMessage() {}

func (x *Result) ProtoReflect() protoreflect.Message {
	mi := &file_test_custom_results_graphics_result_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Result.ProtoReflect.Descriptor instead.
func (*Result) Descriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_result_proto_rawDescGZIP(), []int{0}
}

func (x *Result) GetId() *ResultId {
	if x != nil {
		return x.Id
	}
	return nil
}

func (x *Result) GetStartTime() *timestamp.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *Result) GetEndTime() *timestamp.Timestamp {
	if x != nil {
		return x.EndTime
	}
	return nil
}

func (x *Result) GetMachine() *MachineId {
	if x != nil {
		return x.Machine
	}
	return nil
}

func (x *Result) GetSoftwareConfig() *SoftwareConfigId {
	if x != nil {
		return x.SoftwareConfig
	}
	return nil
}

func (x *Result) GetExecutionEnvironment() Result_ExecutionEnvironment {
	if x != nil {
		return x.ExecutionEnvironment
	}
	return Result_UNKNOWN
}

func (x *Result) GetInvocationSource() string {
	if x != nil {
		return x.InvocationSource
	}
	return ""
}

func (x *Result) GetTestId() string {
	if x != nil {
		return x.TestId
	}
	return ""
}

func (x *Result) GetTestName() string {
	if x != nil {
		return x.TestName
	}
	return ""
}

func (x *Result) GetTestJobId() string {
	if x != nil {
		return x.TestJobId
	}
	return ""
}

func (x *Result) GetCommandLine() string {
	if x != nil {
		return x.CommandLine
	}
	return ""
}

func (x *Result) GetBenchmark() string {
	if x != nil {
		return x.Benchmark
	}
	return ""
}

func (x *Result) GetTrace() *TraceId {
	if x != nil {
		return x.Trace
	}
	return nil
}

func (x *Result) GetMetrics() []*Result_Metric {
	if x != nil {
		return x.Metrics
	}
	return nil
}

func (x *Result) GetPrimaryMetricName() string {
	if x != nil {
		return x.PrimaryMetricName
	}
	return ""
}

func (x *Result) GetLabels() []*Result_Label {
	if x != nil {
		return x.Labels
	}
	return nil
}

func (x *Result) GetOverrides() *SoftwareOverridesConfig {
	if x != nil {
		return x.Overrides
	}
	return nil
}

type ResultList struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Value []*Result `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"`
}

func (x *ResultList) Reset() {
	*x = ResultList{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_custom_results_graphics_result_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ResultList) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ResultList) ProtoMessage() {}

func (x *ResultList) ProtoReflect() protoreflect.Message {
	mi := &file_test_custom_results_graphics_result_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ResultList.ProtoReflect.Descriptor instead.
func (*ResultList) Descriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_result_proto_rawDescGZIP(), []int{1}
}

func (x *ResultList) GetValue() []*Result {
	if x != nil {
		return x.Value
	}
	return nil
}

// TODO(davidriley): This unit could be made into a separate Message
// a) This stanza is directly part of TraceResult with TraceResult repeated.
// b) This stanze becomes a separate repeated Message within TraceResult.
// c) This stanza becomes a separate Message with TraceResultId link to them.
// Next Tag: 7
type Result_Metric struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name               string  `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Index              uint64  `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
	Value              float64 `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"`
	Units              string  `protobuf:"bytes,4,opt,name=units,proto3" json:"units,omitempty"`
	LargerIsBetter     bool    `protobuf:"varint,5,opt,name=larger_is_better,json=largerIsBetter,proto3" json:"larger_is_better,omitempty"`
	ExternallyGathered bool    `protobuf:"varint,6,opt,name=externally_gathered,json=externallyGathered,proto3" json:"externally_gathered,omitempty"`
}

func (x *Result_Metric) Reset() {
	*x = Result_Metric{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_custom_results_graphics_result_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Result_Metric) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Result_Metric) ProtoMessage() {}

func (x *Result_Metric) ProtoReflect() protoreflect.Message {
	mi := &file_test_custom_results_graphics_result_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Result_Metric.ProtoReflect.Descriptor instead.
func (*Result_Metric) Descriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_result_proto_rawDescGZIP(), []int{0, 0}
}

func (x *Result_Metric) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *Result_Metric) GetIndex() uint64 {
	if x != nil {
		return x.Index
	}
	return 0
}

func (x *Result_Metric) GetValue() float64 {
	if x != nil {
		return x.Value
	}
	return 0
}

func (x *Result_Metric) GetUnits() string {
	if x != nil {
		return x.Units
	}
	return ""
}

func (x *Result_Metric) GetLargerIsBetter() bool {
	if x != nil {
		return x.LargerIsBetter
	}
	return false
}

func (x *Result_Metric) GetExternallyGathered() bool {
	if x != nil {
		return x.ExternallyGathered
	}
	return false
}

// General non-numeric details collected about the environment or system
// state.  eg Interesting environment variables, glxinfo info.
// Next Tag: 4
type Result_Label struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name     string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Value    string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	Grouping string `protobuf:"bytes,3,opt,name=grouping,proto3" json:"grouping,omitempty"`
}

func (x *Result_Label) Reset() {
	*x = Result_Label{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_custom_results_graphics_result_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Result_Label) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Result_Label) ProtoMessage() {}

func (x *Result_Label) ProtoReflect() protoreflect.Message {
	mi := &file_test_custom_results_graphics_result_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Result_Label.ProtoReflect.Descriptor instead.
func (*Result_Label) Descriptor() ([]byte, []int) {
	return file_test_custom_results_graphics_result_proto_rawDescGZIP(), []int{0, 1}
}

func (x *Result_Label) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *Result_Label) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

func (x *Result_Label) GetGrouping() string {
	if x != nil {
		return x.Grouping
	}
	return ""
}

var File_test_custom_results_graphics_result_proto protoreflect.FileDescriptor

var file_test_custom_results_graphics_result_proto_rawDesc = []byte{
	0x0a, 0x29, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x72,
	0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x74, 0x65, 0x73,
	0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
	0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73,
	0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x74, 0x65, 0x73, 0x74,
	0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f,
	0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
	0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x74, 0x65, 0x73, 0x74, 0x2f,
	0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67,
	0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69,
	0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x35, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75,
	0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61,
	0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x63,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c,
	0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75,
	0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x73, 0x6f, 0x66,
	0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x5f,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, 0x74, 0x65,
	0x73, 0x74, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
	0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65,
	0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdd, 0x0a, 0x0a, 0x06, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x26, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72,
	0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e,
	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a,
	0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
	0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74,
	0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74,
	0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41,
	0x0a, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x27, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x4d,
	0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x52, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e,
	0x65, 0x12, 0x57, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x65, 0x73,
	0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
	0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
	0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x52, 0x0e, 0x73, 0x6f, 0x66, 0x74,
	0x77, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6e, 0x0a, 0x15, 0x65, 0x78,
	0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
	0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x74, 0x65, 0x73, 0x74,
	0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e,
	0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e,
	0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45,
	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e,
	0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f,
	0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64,
	0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a,
	0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x09, 0x74, 0x65, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x21, 0x0a,
	0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x0a, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4c, 0x69, 0x6e, 0x65,
	0x12, 0x1c, 0x0a, 0x09, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x0b, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x3b,
	0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e,
	0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75,
	0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x54, 0x72, 0x61,
	0x63, 0x65, 0x49, 0x64, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6d,
	0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74,
	0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
	0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x75,
	0x6c, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69,
	0x63, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x65,
	0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x11, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61,
	0x6d, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
	0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63,
	0x73, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06,
	0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x53, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69,
	0x64, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x65, 0x73, 0x74,
	0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e,
	0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72,
	0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0xb9, 0x01, 0x0a, 0x06,
	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e,
	0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78,
	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52,
	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10,
	0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x5f, 0x69, 0x73, 0x5f, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x49, 0x73,
	0x42, 0x65, 0x74, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
	0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x65, 0x64, 0x18, 0x06, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x47,
	0x61, 0x74, 0x68, 0x65, 0x72, 0x65, 0x64, 0x1a, 0x4d, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c,
	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72,
	0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x72,
	0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75,
	0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12,
	0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04,
	0x48, 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e,
	0x41, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x4f, 0x53, 0x54, 0x49, 0x4e, 0x49, 0x10,
	0x03, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x45, 0x41, 0x4d, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03,
	0x41, 0x52, 0x43, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x43, 0x56, 0x4d, 0x10, 0x06,
	0x12, 0x0b, 0x0a, 0x07, 0x43, 0x52, 0x4f, 0x55, 0x54, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x0a, 0x0a,
	0x06, 0x43, 0x52, 0x4f, 0x53, 0x56, 0x4d, 0x10, 0x08, 0x22, 0x48, 0x0a, 0x0a, 0x52, 0x65, 0x73,
	0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x75,
	0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x67, 0x72, 0x61,
	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f,
	0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73,
	0x75, 0x6c, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x62, 0x06, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_test_custom_results_graphics_result_proto_rawDescOnce sync.Once
	file_test_custom_results_graphics_result_proto_rawDescData = file_test_custom_results_graphics_result_proto_rawDesc
)

func file_test_custom_results_graphics_result_proto_rawDescGZIP() []byte {
	file_test_custom_results_graphics_result_proto_rawDescOnce.Do(func() {
		file_test_custom_results_graphics_result_proto_rawDescData = protoimpl.X.CompressGZIP(file_test_custom_results_graphics_result_proto_rawDescData)
	})
	return file_test_custom_results_graphics_result_proto_rawDescData
}

var file_test_custom_results_graphics_result_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_test_custom_results_graphics_result_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_test_custom_results_graphics_result_proto_goTypes = []interface{}{
	(Result_ExecutionEnvironment)(0), // 0: test.custom_results.graphics.Result.ExecutionEnvironment
	(*Result)(nil),                   // 1: test.custom_results.graphics.Result
	(*ResultList)(nil),               // 2: test.custom_results.graphics.ResultList
	(*Result_Metric)(nil),            // 3: test.custom_results.graphics.Result.Metric
	(*Result_Label)(nil),             // 4: test.custom_results.graphics.Result.Label
	(*ResultId)(nil),                 // 5: test.custom_results.graphics.ResultId
	(*timestamp.Timestamp)(nil),      // 6: google.protobuf.Timestamp
	(*MachineId)(nil),                // 7: test.custom_results.graphics.MachineId
	(*SoftwareConfigId)(nil),         // 8: test.custom_results.graphics.SoftwareConfigId
	(*TraceId)(nil),                  // 9: test.custom_results.graphics.TraceId
	(*SoftwareOverridesConfig)(nil),  // 10: test.custom_results.graphics.SoftwareOverridesConfig
}
var file_test_custom_results_graphics_result_proto_depIdxs = []int32{
	5,  // 0: test.custom_results.graphics.Result.id:type_name -> test.custom_results.graphics.ResultId
	6,  // 1: test.custom_results.graphics.Result.start_time:type_name -> google.protobuf.Timestamp
	6,  // 2: test.custom_results.graphics.Result.end_time:type_name -> google.protobuf.Timestamp
	7,  // 3: test.custom_results.graphics.Result.machine:type_name -> test.custom_results.graphics.MachineId
	8,  // 4: test.custom_results.graphics.Result.software_config:type_name -> test.custom_results.graphics.SoftwareConfigId
	0,  // 5: test.custom_results.graphics.Result.execution_environment:type_name -> test.custom_results.graphics.Result.ExecutionEnvironment
	9,  // 6: test.custom_results.graphics.Result.trace:type_name -> test.custom_results.graphics.TraceId
	3,  // 7: test.custom_results.graphics.Result.metrics:type_name -> test.custom_results.graphics.Result.Metric
	4,  // 8: test.custom_results.graphics.Result.labels:type_name -> test.custom_results.graphics.Result.Label
	10, // 9: test.custom_results.graphics.Result.overrides:type_name -> test.custom_results.graphics.SoftwareOverridesConfig
	1,  // 10: test.custom_results.graphics.ResultList.value:type_name -> test.custom_results.graphics.Result
	11, // [11:11] is the sub-list for method output_type
	11, // [11:11] is the sub-list for method input_type
	11, // [11:11] is the sub-list for extension type_name
	11, // [11:11] is the sub-list for extension extendee
	0,  // [0:11] is the sub-list for field type_name
}

func init() { file_test_custom_results_graphics_result_proto_init() }
func file_test_custom_results_graphics_result_proto_init() {
	if File_test_custom_results_graphics_result_proto != nil {
		return
	}
	file_test_custom_results_graphics_machine_id_proto_init()
	file_test_custom_results_graphics_result_id_proto_init()
	file_test_custom_results_graphics_software_config_id_proto_init()
	file_test_custom_results_graphics_software_overrides_config_proto_init()
	file_test_custom_results_graphics_trace_id_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_test_custom_results_graphics_result_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Result); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_custom_results_graphics_result_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ResultList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_custom_results_graphics_result_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Result_Metric); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_custom_results_graphics_result_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Result_Label); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_test_custom_results_graphics_result_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   4,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_test_custom_results_graphics_result_proto_goTypes,
		DependencyIndexes: file_test_custom_results_graphics_result_proto_depIdxs,
		EnumInfos:         file_test_custom_results_graphics_result_proto_enumTypes,
		MessageInfos:      file_test_custom_results_graphics_result_proto_msgTypes,
	}.Build()
	File_test_custom_results_graphics_result_proto = out.File
	file_test_custom_results_graphics_result_proto_rawDesc = nil
	file_test_custom_results_graphics_result_proto_goTypes = nil
	file_test_custom_results_graphics_result_proto_depIdxs = nil
}
