diff options
author | 2023-11-27 11:00:52 +0900 | |
---|---|---|
committer | 2023-11-29 09:57:35 +0900 | |
commit | 3622b3464b4c23e39548c82ba88c23f2cc934482 (patch) | |
tree | cdcd72254d0166176ae8d93e18b915d7a8d310d1 /ui/terminal | |
parent | a4291d572a97f886e34b527cd5325c8d05b5e6c9 (diff) |
Show estimated build end time during build
Ninja delivers estimated total build time and critical path time from
previous ninja log.
Bug: 292304818
Test: check if ETA shows
Change-Id: I014caaa3e8222a53c8822616b2ae31b88a3b0310
Diffstat (limited to 'ui/terminal')
-rw-r--r-- | ui/terminal/format.go | 22 | ||||
-rw-r--r-- | ui/terminal/smart_status.go | 5 |
2 files changed, 24 insertions, 3 deletions
diff --git a/ui/terminal/format.go b/ui/terminal/format.go index 4205bdc22..241a1ddf7 100644 --- a/ui/terminal/format.go +++ b/ui/terminal/format.go @@ -51,9 +51,22 @@ func (s formatter) message(level status.MsgLevel, message string) string { return "" } +func remainingTimeString(t time.Time) string { + now := time.Now() + if t.After(now) { + return t.Sub(now).Round(time.Duration(time.Second)).String() + } + return time.Duration(0).Round(time.Duration(time.Second)).String() +} func (s formatter) progress(counts status.Counts) string { if s.format == "" { - return fmt.Sprintf("[%3d%% %d/%d] ", 100*counts.FinishedActions/counts.TotalActions, counts.FinishedActions, counts.TotalActions) + output := fmt.Sprintf("[%3d%% %d/%d", 100*counts.FinishedActions/counts.TotalActions, counts.FinishedActions, counts.TotalActions) + + if !counts.EstimatedTime.IsZero() { + output += fmt.Sprintf(" %s remaining", remainingTimeString(counts.EstimatedTime)) + } + output += "] " + return output } buf := &strings.Builder{} @@ -93,6 +106,13 @@ func (s formatter) progress(counts status.Counts) string { fmt.Fprintf(buf, "%3d%%", 100*counts.FinishedActions/counts.TotalActions) case 'e': fmt.Fprintf(buf, "%.3f", time.Since(s.start).Seconds()) + case 'l': + if counts.EstimatedTime.IsZero() { + // No esitimated data + buf.WriteRune('?') + } else { + fmt.Fprintf(buf, "%s", remainingTimeString(counts.EstimatedTime)) + } default: buf.WriteString("unknown placeholder '") buf.WriteByte(c) diff --git a/ui/terminal/smart_status.go b/ui/terminal/smart_status.go index 3880b04a8..4575ccfdd 100644 --- a/ui/terminal/smart_status.go +++ b/ui/terminal/smart_status.go @@ -31,8 +31,9 @@ import ( const tableHeightEnVar = "SOONG_UI_TABLE_HEIGHT" type actionTableEntry struct { - action *status.Action - startTime time.Time + action *status.Action + startTime time.Time + estimatedEndTime time.Time } type smartStatusOutput struct { |