go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/bq/test_variant_branch_row.pb.go (about)

     1  // Copyright 2023 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by protoc-gen-go. DO NOT EDIT.
    16  // versions:
    17  // 	protoc-gen-go v1.31.0
    18  // 	protoc        v3.21.7
    19  // source: go.chromium.org/luci/analysis/proto/bq/test_variant_branch_row.proto
    20  
    21  package bqpb
    22  
    23  import (
    24  	v1 "go.chromium.org/luci/analysis/proto/v1"
    25  	_ "go.chromium.org/luci/common/bq/pb"
    26  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    27  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    28  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    29  	reflect "reflect"
    30  	sync "sync"
    31  )
    32  
    33  const (
    34  	// Verify that this generated code is sufficiently up-to-date.
    35  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    36  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    37  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    38  )
    39  
    40  // Represents analysis for a test variant on a source branch at a point in time.
    41  type TestVariantBranchRow struct {
    42  	state         protoimpl.MessageState
    43  	sizeCache     protoimpl.SizeCache
    44  	unknownFields protoimpl.UnknownFields
    45  
    46  	// The LUCI Project. E.g. "chromium".
    47  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
    48  	// The identity of the test.
    49  	TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
    50  	// Hash of the variant, as 16 lowercase hexadecimal characters.
    51  	// E.g. "96c68dc946ab4068".
    52  	VariantHash string `protobuf:"bytes,3,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"`
    53  	// Hash of the source branch, as 16 lowercase hexadecimal characters.
    54  	RefHash string `protobuf:"bytes,4,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"`
    55  	// Describes one specific way of running the test, e.g. a specific bucket,
    56  	// builder and a test suite.
    57  	//
    58  	// This will be encoded as a JSON object like
    59  	// {"builder":"linux-rel","os":"Ubuntu-18.04",...}
    60  	// to take advantage of BigQuery's JSON support, so that the query will only
    61  	// be billed for the variant keys it reads.
    62  	//
    63  	// In the protocol buffer, it must be a string as per
    64  	// https://cloud.google.com/bigquery/docs/write-api#data_type_conversions
    65  	Variant string `protobuf:"bytes,5,opt,name=variant,proto3" json:"variant,omitempty"`
    66  	// The branch in source control.
    67  	Ref *v1.SourceRef `protobuf:"bytes,6,opt,name=ref,proto3" json:"ref,omitempty"`
    68  	// The test history represented as a set of [start commit position,
    69  	// end commit position] segments, where segments have statistically
    70  	// different failure and/or flake rates. The segments are ordered so that
    71  	// the most recent segment appears first.
    72  	// If a client is only interested in the current failure/flake rate, they
    73  	// can just query the first segment.
    74  	Segments []*Segment `protobuf:"bytes,7,rep,name=segments,proto3" json:"segments,omitempty"`
    75  	// This field has value = 1 if the test variant has any unexpected
    76  	// test results in the last 90 days (excluding presubmit runs that do not
    77  	// results  in CL submission). It has value = 0 otherwise.
    78  	// It is int value instead of bool because we use it as partitioning key
    79  	// (BigQuery does not support bool as partitioning key).
    80  	HasRecentUnexpectedResults int64 `protobuf:"varint,8,opt,name=has_recent_unexpected_results,json=hasRecentUnexpectedResults,proto3" json:"has_recent_unexpected_results,omitempty"`
    81  	// The Spanner commit timestamp that reflects the version of data that was
    82  	// exported. Rows with later timestamps are strictly newer.
    83  	// In the test_variant_segments table, only one version of analysis
    84  	// will be present for a given (project, test_id, variant_hash, ref_hash).
    85  	Version *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=version,proto3" json:"version,omitempty"`
    86  }
    87  
    88  func (x *TestVariantBranchRow) Reset() {
    89  	*x = TestVariantBranchRow{}
    90  	if protoimpl.UnsafeEnabled {
    91  		mi := &file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[0]
    92  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    93  		ms.StoreMessageInfo(mi)
    94  	}
    95  }
    96  
    97  func (x *TestVariantBranchRow) String() string {
    98  	return protoimpl.X.MessageStringOf(x)
    99  }
   100  
   101  func (*TestVariantBranchRow) ProtoMessage() {}
   102  
   103  func (x *TestVariantBranchRow) ProtoReflect() protoreflect.Message {
   104  	mi := &file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[0]
   105  	if protoimpl.UnsafeEnabled && x != nil {
   106  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   107  		if ms.LoadMessageInfo() == nil {
   108  			ms.StoreMessageInfo(mi)
   109  		}
   110  		return ms
   111  	}
   112  	return mi.MessageOf(x)
   113  }
   114  
   115  // Deprecated: Use TestVariantBranchRow.ProtoReflect.Descriptor instead.
   116  func (*TestVariantBranchRow) Descriptor() ([]byte, []int) {
   117  	return file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescGZIP(), []int{0}
   118  }
   119  
   120  func (x *TestVariantBranchRow) GetProject() string {
   121  	if x != nil {
   122  		return x.Project
   123  	}
   124  	return ""
   125  }
   126  
   127  func (x *TestVariantBranchRow) GetTestId() string {
   128  	if x != nil {
   129  		return x.TestId
   130  	}
   131  	return ""
   132  }
   133  
   134  func (x *TestVariantBranchRow) GetVariantHash() string {
   135  	if x != nil {
   136  		return x.VariantHash
   137  	}
   138  	return ""
   139  }
   140  
   141  func (x *TestVariantBranchRow) GetRefHash() string {
   142  	if x != nil {
   143  		return x.RefHash
   144  	}
   145  	return ""
   146  }
   147  
   148  func (x *TestVariantBranchRow) GetVariant() string {
   149  	if x != nil {
   150  		return x.Variant
   151  	}
   152  	return ""
   153  }
   154  
   155  func (x *TestVariantBranchRow) GetRef() *v1.SourceRef {
   156  	if x != nil {
   157  		return x.Ref
   158  	}
   159  	return nil
   160  }
   161  
   162  func (x *TestVariantBranchRow) GetSegments() []*Segment {
   163  	if x != nil {
   164  		return x.Segments
   165  	}
   166  	return nil
   167  }
   168  
   169  func (x *TestVariantBranchRow) GetHasRecentUnexpectedResults() int64 {
   170  	if x != nil {
   171  		return x.HasRecentUnexpectedResults
   172  	}
   173  	return 0
   174  }
   175  
   176  func (x *TestVariantBranchRow) GetVersion() *timestamppb.Timestamp {
   177  	if x != nil {
   178  		return x.Version
   179  	}
   180  	return nil
   181  }
   182  
   183  // Represents a period in history where the test had a consistent failure and
   184  // flake rate. Segments are separated by changepoints. Each segment captures
   185  // information about the changepoint which started it.
   186  type Segment struct {
   187  	state         protoimpl.MessageState
   188  	sizeCache     protoimpl.SizeCache
   189  	unknownFields protoimpl.UnknownFields
   190  
   191  	// If set, means the segment commenced with a changepoint.
   192  	// If unset, means the segment began with the beginning of recorded
   193  	// history for the segment. (All recorded history for a test variant branch
   194  	// is deleted after 90 days of no results, so this means there were
   195  	// no results for at least 90 days before the segment.)
   196  	HasStartChangepoint bool `protobuf:"varint,1,opt,name=has_start_changepoint,json=hasStartChangepoint,proto3" json:"has_start_changepoint,omitempty"`
   197  	// The nominal commit position at which the segment starts (inclusive).
   198  	// Guaranteed to be strictly greater than the end_position of the
   199  	// chronologically previous segment (if any).
   200  	// If this segment has a starting changepoint, this is the nominal position
   201  	// of the changepoint (when the new test behaviour started).
   202  	// If this segment does not have a starting changepoint, this is the
   203  	// simply the first commit position in the known history of the test.
   204  	StartPosition int64 `protobuf:"varint,2,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"`
   205  	// The lower bound of the starting changepoint position in a 99% two-tailed
   206  	// confidence interval. Inclusive.
   207  	// Only set if has_start_changepoint is set.
   208  	StartPositionLowerBound_99Th int64 `protobuf:"varint,3,opt,name=start_position_lower_bound_99th,json=startPositionLowerBound99th,proto3" json:"start_position_lower_bound_99th,omitempty"`
   209  	// The upper bound of the starting changepoint position in a 99% two-tailed
   210  	// confidence interval. Inclusive.
   211  	// Only set if has_start_changepoint is set.
   212  	// When has_start_changepoint is set, the following invariant holds:
   213  	// previous_segment.start_position <= start_position_lower_bound_99th <= start_position <= start_position_upper_bound_99th
   214  	// where previous_segment refers to the chronologically previous segment.
   215  	StartPositionUpperBound_99Th int64 `protobuf:"varint,4,opt,name=start_position_upper_bound_99th,json=startPositionUpperBound99th,proto3" json:"start_position_upper_bound_99th,omitempty"`
   216  	// The earliest hour a test verdict at the indicated start_position
   217  	// was recorded. Gives an approximate upper bound on the timestamp the
   218  	// changepoint occurred, for systems which need to filter by date.
   219  	StartHour *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"`
   220  	// The nominal commit position at which the segment ends (inclusive).
   221  	// This is either the last recorded commit position in the test history
   222  	// (for this test variant branch), or the position of the last verdict
   223  	// seen before the next detected changepoint.
   224  	EndPosition int64 `protobuf:"varint,6,opt,name=end_position,json=endPosition,proto3" json:"end_position,omitempty"`
   225  	// The earliest hour a test verdict at the indicated end_position
   226  	// was recorded. Gives an approximate lower bound on the  timestamp
   227  	// the changepoint occurred, for systems which need to filter by date.
   228  	EndHour *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=end_hour,json=endHour,proto3" json:"end_hour,omitempty"`
   229  	// Total number of test results/runs/verdicts in the segment.
   230  	Counts *Segment_Counts `protobuf:"bytes,8,opt,name=counts,proto3" json:"counts,omitempty"`
   231  }
   232  
   233  func (x *Segment) Reset() {
   234  	*x = Segment{}
   235  	if protoimpl.UnsafeEnabled {
   236  		mi := &file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[1]
   237  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   238  		ms.StoreMessageInfo(mi)
   239  	}
   240  }
   241  
   242  func (x *Segment) String() string {
   243  	return protoimpl.X.MessageStringOf(x)
   244  }
   245  
   246  func (*Segment) ProtoMessage() {}
   247  
   248  func (x *Segment) ProtoReflect() protoreflect.Message {
   249  	mi := &file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[1]
   250  	if protoimpl.UnsafeEnabled && x != nil {
   251  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   252  		if ms.LoadMessageInfo() == nil {
   253  			ms.StoreMessageInfo(mi)
   254  		}
   255  		return ms
   256  	}
   257  	return mi.MessageOf(x)
   258  }
   259  
   260  // Deprecated: Use Segment.ProtoReflect.Descriptor instead.
   261  func (*Segment) Descriptor() ([]byte, []int) {
   262  	return file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescGZIP(), []int{1}
   263  }
   264  
   265  func (x *Segment) GetHasStartChangepoint() bool {
   266  	if x != nil {
   267  		return x.HasStartChangepoint
   268  	}
   269  	return false
   270  }
   271  
   272  func (x *Segment) GetStartPosition() int64 {
   273  	if x != nil {
   274  		return x.StartPosition
   275  	}
   276  	return 0
   277  }
   278  
   279  func (x *Segment) GetStartPositionLowerBound_99Th() int64 {
   280  	if x != nil {
   281  		return x.StartPositionLowerBound_99Th
   282  	}
   283  	return 0
   284  }
   285  
   286  func (x *Segment) GetStartPositionUpperBound_99Th() int64 {
   287  	if x != nil {
   288  		return x.StartPositionUpperBound_99Th
   289  	}
   290  	return 0
   291  }
   292  
   293  func (x *Segment) GetStartHour() *timestamppb.Timestamp {
   294  	if x != nil {
   295  		return x.StartHour
   296  	}
   297  	return nil
   298  }
   299  
   300  func (x *Segment) GetEndPosition() int64 {
   301  	if x != nil {
   302  		return x.EndPosition
   303  	}
   304  	return 0
   305  }
   306  
   307  func (x *Segment) GetEndHour() *timestamppb.Timestamp {
   308  	if x != nil {
   309  		return x.EndHour
   310  	}
   311  	return nil
   312  }
   313  
   314  func (x *Segment) GetCounts() *Segment_Counts {
   315  	if x != nil {
   316  		return x.Counts
   317  	}
   318  	return nil
   319  }
   320  
   321  // Counts of test results, runs and verdicts over a time period. Includes only
   322  // test results for submitted code changes. This is defined as:
   323  // (1) where the code under test was already submitted when the test ran
   324  //
   325  //	(e.g. postsubmit builders)
   326  //
   327  // (2) where the code under test was not submitted at the time the test ran,
   328  //
   329  //	but was submitted immediately after (e.g. because the tests ran as part
   330  //	of a tryjob, the presubmit run the tryjob was triggered by succeeded,
   331  //	and submitted code as a result).
   332  //	Currently, when test results lead to CL submission via recycled CQ runs,
   333  //	they are not counted.
   334  //
   335  // Next ID: 18
   336  type Segment_Counts struct {
   337  	state         protoimpl.MessageState
   338  	sizeCache     protoimpl.SizeCache
   339  	unknownFields protoimpl.UnknownFields
   340  
   341  	// The number of unexpected non-skipped test results.
   342  	UnexpectedResults int64 `protobuf:"varint,1,opt,name=unexpected_results,json=unexpectedResults,proto3" json:"unexpected_results,omitempty"`
   343  	// The total number of non-skipped test results.
   344  	TotalResults int64 `protobuf:"varint,2,opt,name=total_results,json=totalResults,proto3" json:"total_results,omitempty"`
   345  	// The number of expected passed test results.
   346  	ExpectedPassedResults int64 `protobuf:"varint,10,opt,name=expected_passed_results,json=expectedPassedResults,proto3" json:"expected_passed_results,omitempty"`
   347  	// The number of expected failed test results.
   348  	ExpectedFailedResults int64 `protobuf:"varint,11,opt,name=expected_failed_results,json=expectedFailedResults,proto3" json:"expected_failed_results,omitempty"`
   349  	// The number of expected crashed test results.
   350  	ExpectedCrashedResults int64 `protobuf:"varint,12,opt,name=expected_crashed_results,json=expectedCrashedResults,proto3" json:"expected_crashed_results,omitempty"`
   351  	// The number of expected aborted test results.
   352  	ExpectedAbortedResults int64 `protobuf:"varint,13,opt,name=expected_aborted_results,json=expectedAbortedResults,proto3" json:"expected_aborted_results,omitempty"`
   353  	// The number of unexpected passed test results.
   354  	UnexpectedPassedResults int64 `protobuf:"varint,14,opt,name=unexpected_passed_results,json=unexpectedPassedResults,proto3" json:"unexpected_passed_results,omitempty"`
   355  	// The number of unexpected failed test results.
   356  	UnexpectedFailedResults int64 `protobuf:"varint,15,opt,name=unexpected_failed_results,json=unexpectedFailedResults,proto3" json:"unexpected_failed_results,omitempty"`
   357  	// The number of unexpected crashed test results.
   358  	UnexpectedCrashedResults int64 `protobuf:"varint,16,opt,name=unexpected_crashed_results,json=unexpectedCrashedResults,proto3" json:"unexpected_crashed_results,omitempty"`
   359  	// The number of unexpected aborted test results.
   360  	UnexpectedAbortedResults int64 `protobuf:"varint,17,opt,name=unexpected_aborted_results,json=unexpectedAbortedResults,proto3" json:"unexpected_aborted_results,omitempty"`
   361  	// The number of test runs which had an unexpected test result but were
   362  	// not retried.
   363  	UnexpectedUnretriedRuns int64 `protobuf:"varint,3,opt,name=unexpected_unretried_runs,json=unexpectedUnretriedRuns,proto3" json:"unexpected_unretried_runs,omitempty"`
   364  	// The number of test run which had an unexpected test result, were
   365  	// retried, and still contained only unexpected test results.
   366  	UnexpectedAfterRetryRuns int64 `protobuf:"varint,4,opt,name=unexpected_after_retry_runs,json=unexpectedAfterRetryRuns,proto3" json:"unexpected_after_retry_runs,omitempty"`
   367  	// The number of test runs which had an unexpected test result, were
   368  	// retried, and eventually recorded an expected test result.
   369  	FlakyRuns int64 `protobuf:"varint,5,opt,name=flaky_runs,json=flakyRuns,proto3" json:"flaky_runs,omitempty"`
   370  	// The total number of test runs.
   371  	TotalRuns int64 `protobuf:"varint,6,opt,name=total_runs,json=totalRuns,proto3" json:"total_runs,omitempty"`
   372  	// The number of verdicts with only unexpected test results.
   373  	UnexpectedVerdicts int64 `protobuf:"varint,7,opt,name=unexpected_verdicts,json=unexpectedVerdicts,proto3" json:"unexpected_verdicts,omitempty"`
   374  	// The number of verdicts with a mix of expected and unexpected test results.
   375  	FlakyVerdicts int64 `protobuf:"varint,8,opt,name=flaky_verdicts,json=flakyVerdicts,proto3" json:"flaky_verdicts,omitempty"`
   376  	// The total number of verdicts.
   377  	TotalVerdicts int64 `protobuf:"varint,9,opt,name=total_verdicts,json=totalVerdicts,proto3" json:"total_verdicts,omitempty"`
   378  }
   379  
   380  func (x *Segment_Counts) Reset() {
   381  	*x = Segment_Counts{}
   382  	if protoimpl.UnsafeEnabled {
   383  		mi := &file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[2]
   384  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   385  		ms.StoreMessageInfo(mi)
   386  	}
   387  }
   388  
   389  func (x *Segment_Counts) String() string {
   390  	return protoimpl.X.MessageStringOf(x)
   391  }
   392  
   393  func (*Segment_Counts) ProtoMessage() {}
   394  
   395  func (x *Segment_Counts) ProtoReflect() protoreflect.Message {
   396  	mi := &file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[2]
   397  	if protoimpl.UnsafeEnabled && x != nil {
   398  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   399  		if ms.LoadMessageInfo() == nil {
   400  			ms.StoreMessageInfo(mi)
   401  		}
   402  		return ms
   403  	}
   404  	return mi.MessageOf(x)
   405  }
   406  
   407  // Deprecated: Use Segment_Counts.ProtoReflect.Descriptor instead.
   408  func (*Segment_Counts) Descriptor() ([]byte, []int) {
   409  	return file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescGZIP(), []int{1, 0}
   410  }
   411  
   412  func (x *Segment_Counts) GetUnexpectedResults() int64 {
   413  	if x != nil {
   414  		return x.UnexpectedResults
   415  	}
   416  	return 0
   417  }
   418  
   419  func (x *Segment_Counts) GetTotalResults() int64 {
   420  	if x != nil {
   421  		return x.TotalResults
   422  	}
   423  	return 0
   424  }
   425  
   426  func (x *Segment_Counts) GetExpectedPassedResults() int64 {
   427  	if x != nil {
   428  		return x.ExpectedPassedResults
   429  	}
   430  	return 0
   431  }
   432  
   433  func (x *Segment_Counts) GetExpectedFailedResults() int64 {
   434  	if x != nil {
   435  		return x.ExpectedFailedResults
   436  	}
   437  	return 0
   438  }
   439  
   440  func (x *Segment_Counts) GetExpectedCrashedResults() int64 {
   441  	if x != nil {
   442  		return x.ExpectedCrashedResults
   443  	}
   444  	return 0
   445  }
   446  
   447  func (x *Segment_Counts) GetExpectedAbortedResults() int64 {
   448  	if x != nil {
   449  		return x.ExpectedAbortedResults
   450  	}
   451  	return 0
   452  }
   453  
   454  func (x *Segment_Counts) GetUnexpectedPassedResults() int64 {
   455  	if x != nil {
   456  		return x.UnexpectedPassedResults
   457  	}
   458  	return 0
   459  }
   460  
   461  func (x *Segment_Counts) GetUnexpectedFailedResults() int64 {
   462  	if x != nil {
   463  		return x.UnexpectedFailedResults
   464  	}
   465  	return 0
   466  }
   467  
   468  func (x *Segment_Counts) GetUnexpectedCrashedResults() int64 {
   469  	if x != nil {
   470  		return x.UnexpectedCrashedResults
   471  	}
   472  	return 0
   473  }
   474  
   475  func (x *Segment_Counts) GetUnexpectedAbortedResults() int64 {
   476  	if x != nil {
   477  		return x.UnexpectedAbortedResults
   478  	}
   479  	return 0
   480  }
   481  
   482  func (x *Segment_Counts) GetUnexpectedUnretriedRuns() int64 {
   483  	if x != nil {
   484  		return x.UnexpectedUnretriedRuns
   485  	}
   486  	return 0
   487  }
   488  
   489  func (x *Segment_Counts) GetUnexpectedAfterRetryRuns() int64 {
   490  	if x != nil {
   491  		return x.UnexpectedAfterRetryRuns
   492  	}
   493  	return 0
   494  }
   495  
   496  func (x *Segment_Counts) GetFlakyRuns() int64 {
   497  	if x != nil {
   498  		return x.FlakyRuns
   499  	}
   500  	return 0
   501  }
   502  
   503  func (x *Segment_Counts) GetTotalRuns() int64 {
   504  	if x != nil {
   505  		return x.TotalRuns
   506  	}
   507  	return 0
   508  }
   509  
   510  func (x *Segment_Counts) GetUnexpectedVerdicts() int64 {
   511  	if x != nil {
   512  		return x.UnexpectedVerdicts
   513  	}
   514  	return 0
   515  }
   516  
   517  func (x *Segment_Counts) GetFlakyVerdicts() int64 {
   518  	if x != nil {
   519  		return x.FlakyVerdicts
   520  	}
   521  	return 0
   522  }
   523  
   524  func (x *Segment_Counts) GetTotalVerdicts() int64 {
   525  	if x != nil {
   526  		return x.TotalVerdicts
   527  	}
   528  	return 0
   529  }
   530  
   531  var File_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto protoreflect.FileDescriptor
   532  
   533  var file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDesc = []byte{
   534  	0x0a, 0x44, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
   535  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f,
   536  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x71, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61,
   537  	0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x77,
   538  	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
   539  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
   540  	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
   541  	0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68,
   542  	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f,
   543  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76,
   544  	0x31, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
   545  	0x2f, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67,
   546  	0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x62, 0x71, 0x2f,
   547  	0x70, 0x62, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
   548  	0x22, 0x8c, 0x03, 0x0a, 0x14, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
   549  	0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x6f, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f,
   550  	0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a,
   551  	0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02,
   552  	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c,
   553  	0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01,
   554  	0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12,
   555  	0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28,
   556  	0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x48, 0x61, 0x73, 0x68, 0x12, 0x24, 0x0a, 0x07, 0x76, 0x61,
   557  	0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xe2, 0xbc, 0x24,
   558  	0x06, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
   559  	0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
   560  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31,
   561  	0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12,
   562  	0x35, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28,
   563  	0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
   564  	0x73, 0x2e, 0x62, 0x71, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65,
   565  	0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x65,
   566  	0x63, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
   567  	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, 0x68,
   568  	0x61, 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
   569  	0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x76, 0x65, 0x72,
   570  	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
   571  	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
   572  	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22,
   573  	0xae, 0x0a, 0x0a, 0x07, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x68,
   574  	0x61, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70,
   575  	0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x68, 0x61, 0x73, 0x53,
   576  	0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12,
   577  	0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
   578  	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f,
   579  	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
   580  	0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x62,
   581  	0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 0x39, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
   582  	0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f,
   583  	0x77, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x39, 0x39, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x1f,
   584  	0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75,
   585  	0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 0x39, 0x74, 0x68, 0x18,
   586  	0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69,
   587  	0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x39, 0x39,
   588  	0x74, 0x68, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72,
   589  	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
   590  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
   591  	0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x21, 0x0a,
   592  	0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20,
   593  	0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
   594  	0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x07, 0x20, 0x01,
   595  	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
   596  	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07,
   597  	0x65, 0x6e, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74,
   598  	0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
   599  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65,
   600  	0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74,
   601  	0x73, 0x1a, 0xec, 0x06, 0x0a, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x12,
   602  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
   603  	0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65,
   604  	0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74,
   605  	0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01,
   606  	0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
   607  	0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x73,
   608  	0x73, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28,
   609  	0x03, 0x52, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x65,
   610  	0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x70, 0x65,
   611  	0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75,
   612  	0x6c, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63,
   613  	0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
   614  	0x12, 0x38, 0x0a, 0x18, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x72, 0x61,
   615  	0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x01,
   616  	0x28, 0x03, 0x52, 0x16, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x72, 0x61, 0x73,
   617  	0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x65, 0x78,
   618  	0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72,
   619  	0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x65, 0x78,
   620  	0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73,
   621  	0x75, 0x6c, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
   622  	0x65, 0x64, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
   623  	0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63,
   624  	0x74, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
   625  	0x12, 0x3a, 0x0a, 0x19, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66,
   626  	0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0f, 0x20,
   627  	0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46,
   628  	0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a,
   629  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x72, 0x61, 0x73, 0x68,
   630  	0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03,
   631  	0x52, 0x18, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x72, 0x61, 0x73,
   632  	0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x75, 0x6e,
   633  	0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64,
   634  	0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18,
   635  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x65,
   636  	0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x75, 0x6e, 0x65, 0x78,
   637  	0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x64,
   638  	0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x65,
   639  	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x55, 0x6e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x64,
   640  	0x52, 0x75, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
   641  	0x65, 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x72,
   642  	0x75, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x75, 0x6e, 0x65, 0x78, 0x70,
   643  	0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52,
   644  	0x75, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x72, 0x75, 0x6e,
   645  	0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x52, 0x75,
   646  	0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x73,
   647  	0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6e,
   648  	0x73, 0x12, 0x2f, 0x0a, 0x13, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
   649  	0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12,
   650  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63,
   651  	0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x64,
   652  	0x69, 0x63, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x66, 0x6c, 0x61, 0x6b,
   653  	0x79, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74,
   654  	0x61, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28,
   655  	0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73,
   656  	0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e,
   657  	0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
   658  	0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x71, 0x3b, 0x62, 0x71, 0x70, 0x62, 0x62,
   659  	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
   660  }
   661  
   662  var (
   663  	file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescOnce sync.Once
   664  	file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDesc
   665  )
   666  
   667  func file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescGZIP() []byte {
   668  	file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescOnce.Do(func() {
   669  		file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescData)
   670  	})
   671  	return file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDescData
   672  }
   673  
   674  var file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
   675  var file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_goTypes = []interface{}{
   676  	(*TestVariantBranchRow)(nil),  // 0: luci.analysis.bq.TestVariantBranchRow
   677  	(*Segment)(nil),               // 1: luci.analysis.bq.Segment
   678  	(*Segment_Counts)(nil),        // 2: luci.analysis.bq.Segment.Counts
   679  	(*v1.SourceRef)(nil),          // 3: luci.analysis.v1.SourceRef
   680  	(*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp
   681  }
   682  var file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_depIdxs = []int32{
   683  	3, // 0: luci.analysis.bq.TestVariantBranchRow.ref:type_name -> luci.analysis.v1.SourceRef
   684  	1, // 1: luci.analysis.bq.TestVariantBranchRow.segments:type_name -> luci.analysis.bq.Segment
   685  	4, // 2: luci.analysis.bq.TestVariantBranchRow.version:type_name -> google.protobuf.Timestamp
   686  	4, // 3: luci.analysis.bq.Segment.start_hour:type_name -> google.protobuf.Timestamp
   687  	4, // 4: luci.analysis.bq.Segment.end_hour:type_name -> google.protobuf.Timestamp
   688  	2, // 5: luci.analysis.bq.Segment.counts:type_name -> luci.analysis.bq.Segment.Counts
   689  	6, // [6:6] is the sub-list for method output_type
   690  	6, // [6:6] is the sub-list for method input_type
   691  	6, // [6:6] is the sub-list for extension type_name
   692  	6, // [6:6] is the sub-list for extension extendee
   693  	0, // [0:6] is the sub-list for field type_name
   694  }
   695  
   696  func init() { file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_init() }
   697  func file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_init() {
   698  	if File_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto != nil {
   699  		return
   700  	}
   701  	if !protoimpl.UnsafeEnabled {
   702  		file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   703  			switch v := v.(*TestVariantBranchRow); i {
   704  			case 0:
   705  				return &v.state
   706  			case 1:
   707  				return &v.sizeCache
   708  			case 2:
   709  				return &v.unknownFields
   710  			default:
   711  				return nil
   712  			}
   713  		}
   714  		file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
   715  			switch v := v.(*Segment); i {
   716  			case 0:
   717  				return &v.state
   718  			case 1:
   719  				return &v.sizeCache
   720  			case 2:
   721  				return &v.unknownFields
   722  			default:
   723  				return nil
   724  			}
   725  		}
   726  		file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
   727  			switch v := v.(*Segment_Counts); i {
   728  			case 0:
   729  				return &v.state
   730  			case 1:
   731  				return &v.sizeCache
   732  			case 2:
   733  				return &v.unknownFields
   734  			default:
   735  				return nil
   736  			}
   737  		}
   738  	}
   739  	type x struct{}
   740  	out := protoimpl.TypeBuilder{
   741  		File: protoimpl.DescBuilder{
   742  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
   743  			RawDescriptor: file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDesc,
   744  			NumEnums:      0,
   745  			NumMessages:   3,
   746  			NumExtensions: 0,
   747  			NumServices:   0,
   748  		},
   749  		GoTypes:           file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_goTypes,
   750  		DependencyIndexes: file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_depIdxs,
   751  		MessageInfos:      file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_msgTypes,
   752  	}.Build()
   753  	File_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto = out.File
   754  	file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_rawDesc = nil
   755  	file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_goTypes = nil
   756  	file_go_chromium_org_luci_analysis_proto_bq_test_variant_branch_row_proto_depIdxs = nil
   757  }