diff --git a/ui/status/ninja.go b/ui/status/ninja.go index fc0e21a05..fb760ac8f 100644 --- a/ui/status/ninja.go +++ b/ui/status/ninja.go @@ -174,6 +174,7 @@ func (n *NinjaReader) run() { IOOutputKB: msg.EdgeFinished.GetIoOutputKb(), VoluntaryContextSwitches: msg.EdgeFinished.GetVoluntaryContextSwitches(), InvoluntaryContextSwitches: msg.EdgeFinished.GetInvoluntaryContextSwitches(), + Tags: msg.EdgeFinished.GetTags(), }, }) } diff --git a/ui/status/ninja_frontend/frontend.pb.go b/ui/status/ninja_frontend/frontend.pb.go index bcadc67e7..d0c49533a 100644 --- a/ui/status/ninja_frontend/frontend.pb.go +++ b/ui/status/ninja_frontend/frontend.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.9.1 +// protoc-gen-go v1.28.1 +// protoc v3.21.12 // source: frontend.proto package ninja_frontend @@ -459,6 +459,9 @@ type Status_EdgeFinished struct { VoluntaryContextSwitches *uint64 `protobuf:"varint,12,opt,name=voluntary_context_switches,json=voluntaryContextSwitches" json:"voluntary_context_switches,omitempty"` // Involuntary context switches InvoluntaryContextSwitches *uint64 `protobuf:"varint,13,opt,name=involuntary_context_switches,json=involuntaryContextSwitches" json:"involuntary_context_switches,omitempty"` + // Arbitrary tags for build system profiling (module names and types, rule + // names, etc). Format of the string is implementation defined. + Tags *string `protobuf:"bytes,14,opt,name=tags" json:"tags,omitempty"` } func (x *Status_EdgeFinished) Reset() { @@ -584,6 +587,13 @@ func (x *Status_EdgeFinished) GetInvoluntaryContextSwitches() uint64 { return 0 } +func (x *Status_EdgeFinished) GetTags() string { + if x != nil && x.Tags != nil { + return *x.Tags + } + return "" +} + type Status_Message struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -650,7 +660,7 @@ var File_frontend_proto protoreflect.FileDescriptor var file_frontend_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x05, 0x6e, 0x69, 0x6e, 0x6a, 0x61, 0x22, 0xb4, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x12, 0x05, 0x6e, 0x69, 0x6e, 0x6a, 0x61, 0x22, 0xc8, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x69, 0x6e, 0x6a, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x45, 0x64, 0x67, 0x65, @@ -694,7 +704,7 @@ var file_frontend_proto_rawDesc = []byte{ 0x65, 0x73, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x1a, 0xdf, 0x03, 0x0a, 0x0c, 0x45, 0x64, 0x67, 0x65, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x1a, 0xf3, 0x03, 0x0a, 0x0c, 0x45, 0x64, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, @@ -724,19 +734,20 @@ var file_frontend_proto_rawDesc = []byte{ 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x1a, 0x92, 0x01, 0x0a, 0x07, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6e, 0x69, 0x6e, 0x6a, 0x61, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x3a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x34, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x57, - 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x42, 0x2a, - 0x48, 0x03, 0x5a, 0x26, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2f, 0x73, 0x6f, 0x6f, 0x6e, - 0x67, 0x2f, 0x75, 0x69, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x6e, 0x69, 0x6e, 0x6a, - 0x61, 0x5f, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, + 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, + 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x92, 0x01, + 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6e, 0x69, 0x6e, 0x6a, 0x61, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x05, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x34, 0x0a, 0x05, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, + 0x10, 0x03, 0x42, 0x2a, 0x48, 0x03, 0x5a, 0x26, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2f, + 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x2f, 0x75, 0x69, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, + 0x6e, 0x69, 0x6e, 0x6a, 0x61, 0x5f, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, } var ( diff --git a/ui/status/ninja_frontend/frontend.proto b/ui/status/ninja_frontend/frontend.proto index 57303889e..6cb4a0d02 100644 --- a/ui/status/ninja_frontend/frontend.proto +++ b/ui/status/ninja_frontend/frontend.proto @@ -79,6 +79,9 @@ message Status { optional uint64 voluntary_context_switches = 12; // Involuntary context switches optional uint64 involuntary_context_switches = 13; + // Arbitrary tags for build system profiling (module names and types, rule + // names, etc). Format of the string is implementation defined. + optional string tags = 14; } message Message { diff --git a/ui/status/status.go b/ui/status/status.go index a5b4a2867..f3e58b660 100644 --- a/ui/status/status.go +++ b/ui/status/status.go @@ -85,6 +85,8 @@ type ActionResultStats struct { // Involuntary context switches InvoluntaryContextSwitches uint64 + + Tags string } // Counts describes the number of actions in each state diff --git a/ui/tracer/status.go b/ui/tracer/status.go index a8b4e62f4..f973613d4 100644 --- a/ui/tracer/status.go +++ b/ui/tracer/status.go @@ -16,6 +16,7 @@ package tracer import ( "android/soong/ui/status" + "strings" "time" ) @@ -60,6 +61,24 @@ func (s *statusOutput) StartAction(action *status.Action, counts status.Counts) } } +func (s *statusOutput) parseTags(rawTags string) map[string]string { + if rawTags == "" { + return nil + } + + tags := map[string]string{} + for _, pair := range strings.Split(rawTags, ";") { + if pair == "" { + // Ignore empty tag pairs. It's hard to generate these cleanly from + // make so some tag strings might be something like ";key=value". + continue + } + parts := strings.SplitN(pair, "=", 2) + tags[parts[0]] = parts[1] + } + return tags +} + func (s *statusOutput) FinishAction(result status.ActionResult, counts status.Counts) { start, ok := s.running[result.Action] if !ok { @@ -90,20 +109,22 @@ func (s *statusOutput) FinishAction(result status.ActionResult, counts status.Co IOOutputKB: result.Stats.IOOutputKB, VoluntaryContextSwitches: result.Stats.VoluntaryContextSwitches, InvoluntaryContextSwitches: result.Stats.InvoluntaryContextSwitches, + Tags: s.parseTags(result.Stats.Tags), }, }) } type statsArg struct { - UserTime uint32 `json:"user_time"` - SystemTime uint32 `json:"system_time_ms"` - MaxRssKB uint64 `json:"max_rss_kb"` - MinorPageFaults uint64 `json:"minor_page_faults"` - MajorPageFaults uint64 `json:"major_page_faults"` - IOInputKB uint64 `json:"io_input_kb"` - IOOutputKB uint64 `json:"io_output_kb"` - VoluntaryContextSwitches uint64 `json:"voluntary_context_switches"` - InvoluntaryContextSwitches uint64 `json:"involuntary_context_switches"` + UserTime uint32 `json:"user_time"` + SystemTime uint32 `json:"system_time_ms"` + MaxRssKB uint64 `json:"max_rss_kb"` + MinorPageFaults uint64 `json:"minor_page_faults"` + MajorPageFaults uint64 `json:"major_page_faults"` + IOInputKB uint64 `json:"io_input_kb"` + IOOutputKB uint64 `json:"io_output_kb"` + VoluntaryContextSwitches uint64 `json:"voluntary_context_switches"` + InvoluntaryContextSwitches uint64 `json:"involuntary_context_switches"` + Tags map[string]string `json:"tags"` } func (s *statusOutput) Flush() {}