From 6890a004d2c0ca4e358e25e501f82b0437d637e3 Mon Sep 17 00:00:00 2001 From: LaMont Jones Date: Tue, 12 Nov 2024 06:29:27 -0800 Subject: find_input_delta: Add jar inspection, metrics generation This change implements: - zipfile inspection (for some file extensions) - changed files metrics generation Bug: b/376287012 Test: Manual, TH Change-Id: I18a688c8c6f462cdd7526287c61d38635a9f7709 --- ui/metrics/Android.bp | 14 ++ ui/metrics/metrics_proto/combined_metrics.pb.go | 239 ++++++++++++++++++++++ ui/metrics/metrics_proto/combined_metrics.proto | 36 ++++ ui/metrics/metrics_proto/combined_metrics_test.go | 33 +++ ui/metrics/metrics_proto/regen.sh | 2 +- 5 files changed, 323 insertions(+), 1 deletion(-) create mode 100644 ui/metrics/metrics_proto/combined_metrics.pb.go create mode 100644 ui/metrics/metrics_proto/combined_metrics.proto create mode 100644 ui/metrics/metrics_proto/combined_metrics_test.go (limited to 'ui/metrics') diff --git a/ui/metrics/Android.bp b/ui/metrics/Android.bp index 77871fc09..591e3cca6 100644 --- a/ui/metrics/Android.bp +++ b/ui/metrics/Android.bp @@ -26,6 +26,7 @@ bootstrap_go_package { "soong-ui-metrics_proto", "soong-ui-mk_metrics_proto", "soong-shared", + "soong-ui-metrics_combined_proto", ], srcs: [ "hostinfo.go", @@ -62,6 +63,19 @@ bootstrap_go_package { ], } +bootstrap_go_package { + name: "soong-ui-metrics_combined_proto", + pkgPath: "android/soong/ui/metrics/combined_metrics_proto", + deps: [ + "golang-protobuf-reflect-protoreflect", + "golang-protobuf-runtime-protoimpl", + "soong-cmd-find_input_delta-proto", + ], + srcs: [ + "metrics_proto/metrics.pb.go", + ], +} + bootstrap_go_package { name: "soong-ui-metrics_upload_proto", pkgPath: "android/soong/ui/metrics/upload_proto", diff --git a/ui/metrics/metrics_proto/combined_metrics.pb.go b/ui/metrics/metrics_proto/combined_metrics.pb.go new file mode 100644 index 000000000..f49d64d54 --- /dev/null +++ b/ui/metrics/metrics_proto/combined_metrics.pb.go @@ -0,0 +1,239 @@ +// Copyright 2018 Google Inc. 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. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.33.0 +// protoc v3.21.12 +// source: combined_metrics.proto + +package metrics_proto + +import ( + find_input_delta_proto "android/soong/cmd/find_input_delta/find_input_delta_proto" + 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) +) + +// These field numbers are also found in the inner message declarations. +// We verify that the values are the same, and that every enum value is checked +// in combined_metrics_test.go. +// Do not change this enum without also updating: +// - the submessage's .proto file +// - combined_metrics_test.go +type FieldNumbers int32 + +const ( + FieldNumbers_FIELD_NUMBERS_UNSPECIFIED FieldNumbers = 0 + FieldNumbers_FIELD_NUMBERS_FILE_LIST FieldNumbers = 1 +) + +// Enum value maps for FieldNumbers. +var ( + FieldNumbers_name = map[int32]string{ + 0: "FIELD_NUMBERS_UNSPECIFIED", + 1: "FIELD_NUMBERS_FILE_LIST", + } + FieldNumbers_value = map[string]int32{ + "FIELD_NUMBERS_UNSPECIFIED": 0, + "FIELD_NUMBERS_FILE_LIST": 1, + } +) + +func (x FieldNumbers) Enum() *FieldNumbers { + p := new(FieldNumbers) + *p = x + return p +} + +func (x FieldNumbers) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldNumbers) Descriptor() protoreflect.EnumDescriptor { + return file_combined_metrics_proto_enumTypes[0].Descriptor() +} + +func (FieldNumbers) Type() protoreflect.EnumType { + return &file_combined_metrics_proto_enumTypes[0] +} + +func (x FieldNumbers) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldNumbers) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldNumbers(num) + return nil +} + +// Deprecated: Use FieldNumbers.Descriptor instead. +func (FieldNumbers) EnumDescriptor() ([]byte, []int) { + return file_combined_metrics_proto_rawDescGZIP(), []int{0} +} + +type SoongCombinedMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // cmd/find_input_delta/find_input_delta_proto.FileList + FileList *find_input_delta_proto.FileList `protobuf:"bytes,1,opt,name=file_list,json=fileList" json:"file_list,omitempty"` +} + +func (x *SoongCombinedMetrics) Reset() { + *x = SoongCombinedMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_combined_metrics_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SoongCombinedMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SoongCombinedMetrics) ProtoMessage() {} + +func (x *SoongCombinedMetrics) ProtoReflect() protoreflect.Message { + mi := &file_combined_metrics_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 SoongCombinedMetrics.ProtoReflect.Descriptor instead. +func (*SoongCombinedMetrics) Descriptor() ([]byte, []int) { + return file_combined_metrics_proto_rawDescGZIP(), []int{0} +} + +func (x *SoongCombinedMetrics) GetFileList() *find_input_delta_proto.FileList { + if x != nil { + return x.FileList + } + return nil +} + +var File_combined_metrics_proto protoreflect.FileDescriptor + +var file_combined_metrics_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, 0x3b, 0x63, + 0x6d, 0x64, 0x2f, 0x66, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, + 0x6c, 0x74, 0x61, 0x2f, 0x66, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x64, + 0x65, 0x6c, 0x74, 0x61, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5d, 0x0a, 0x14, 0x53, 0x6f, + 0x6f, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x12, 0x45, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, + 0x66, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x4a, 0x0a, 0x0c, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x19, 0x46, 0x49, 0x45, + 0x4c, 0x44, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x49, 0x45, 0x4c, + 0x44, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4c, + 0x49, 0x53, 0x54, 0x10, 0x01, 0x42, 0x28, 0x5a, 0x26, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, + 0x2f, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x2f, 0x75, 0x69, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, +} + +var ( + file_combined_metrics_proto_rawDescOnce sync.Once + file_combined_metrics_proto_rawDescData = file_combined_metrics_proto_rawDesc +) + +func file_combined_metrics_proto_rawDescGZIP() []byte { + file_combined_metrics_proto_rawDescOnce.Do(func() { + file_combined_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(file_combined_metrics_proto_rawDescData) + }) + return file_combined_metrics_proto_rawDescData +} + +var file_combined_metrics_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_combined_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_combined_metrics_proto_goTypes = []interface{}{ + (FieldNumbers)(0), // 0: soong_build_metrics.FieldNumbers + (*SoongCombinedMetrics)(nil), // 1: soong_build_metrics.SoongCombinedMetrics + (*find_input_delta_proto.FileList)(nil), // 2: android.find_input_delta_proto.FileList +} +var file_combined_metrics_proto_depIdxs = []int32{ + 2, // 0: soong_build_metrics.SoongCombinedMetrics.file_list:type_name -> android.find_input_delta_proto.FileList + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_combined_metrics_proto_init() } +func file_combined_metrics_proto_init() { + if File_combined_metrics_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_combined_metrics_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SoongCombinedMetrics); 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_combined_metrics_proto_rawDesc, + NumEnums: 1, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_combined_metrics_proto_goTypes, + DependencyIndexes: file_combined_metrics_proto_depIdxs, + EnumInfos: file_combined_metrics_proto_enumTypes, + MessageInfos: file_combined_metrics_proto_msgTypes, + }.Build() + File_combined_metrics_proto = out.File + file_combined_metrics_proto_rawDesc = nil + file_combined_metrics_proto_goTypes = nil + file_combined_metrics_proto_depIdxs = nil +} diff --git a/ui/metrics/metrics_proto/combined_metrics.proto b/ui/metrics/metrics_proto/combined_metrics.proto new file mode 100644 index 000000000..3cd9a5313 --- /dev/null +++ b/ui/metrics/metrics_proto/combined_metrics.proto @@ -0,0 +1,36 @@ +// Copyright 2018 Google Inc. 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 soong_build_metrics; +option go_package = "android/soong/ui/metrics/metrics_proto"; + +import "cmd/find_input_delta/find_input_delta_proto/file_list.proto"; + +// These field numbers are also found in the inner message declarations. +// We verify that the values are the same, and that every enum value is checked +// in combined_metrics_test.go. +// Do not change this enum without also updating: +// - the submessage's .proto file +// - combined_metrics_test.go +enum FieldNumbers { + FIELD_NUMBERS_UNSPECIFIED = 0; + FIELD_NUMBERS_FILE_LIST = 1; +} + +message SoongCombinedMetrics { + // cmd/find_input_delta/find_input_delta_proto.FileList + optional android.find_input_delta_proto.FileList file_list = 1; +} diff --git a/ui/metrics/metrics_proto/combined_metrics_test.go b/ui/metrics/metrics_proto/combined_metrics_test.go new file mode 100644 index 000000000..eedb12a34 --- /dev/null +++ b/ui/metrics/metrics_proto/combined_metrics_test.go @@ -0,0 +1,33 @@ +package metrics_proto + +import ( + "testing" + + find_input_delta_proto "android/soong/cmd/find_input_delta/find_input_delta_proto" +) + +func TestCombinedMetricsMessageNums(t *testing.T) { + testCases := []struct { + Name string + FieldNumbers map[string]int32 + }{ + { + Name: "find_input_delta_proto", + FieldNumbers: find_input_delta_proto.FieldNumbers_value, + }, + } + verifiedMap := make(map[string]bool) + for _, tc := range testCases { + for k, v := range tc.FieldNumbers { + if FieldNumbers_value[k] != v { + t.Errorf("%s: Expected FieldNumbers.%s == %v, found %v", tc.Name, k, FieldNumbers_value[k], v) + } + verifiedMap[k] = true + } + } + for k, v := range FieldNumbers_value { + if !verifiedMap[k] { + t.Errorf("No test case verifies FieldNumbers.%s=%v", k, v) + } + } +} diff --git a/ui/metrics/metrics_proto/regen.sh b/ui/metrics/metrics_proto/regen.sh index 8eb2d747b..5e5f9b83f 100755 --- a/ui/metrics/metrics_proto/regen.sh +++ b/ui/metrics/metrics_proto/regen.sh @@ -12,6 +12,6 @@ if ! hash aprotoc &>/dev/null; then die "could not find aprotoc. ${error_msg}" fi -if ! aprotoc --go_out=paths=source_relative:. metrics.proto; then +if ! aprotoc --go_out=paths=source_relative:. -I .:../../.. metrics.proto combined_metrics.proto; then die "build failed. ${error_msg}" fi -- cgit v1.2.3-59-g8ed1b