From 3622b3464b4c23e39548c82ba88c23f2cc934482 Mon Sep 17 00:00:00 2001 From: Jeongik Cha Date: Mon, 27 Nov 2023 11:00:52 +0900 Subject: 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 --- ui/terminal/format.go | 22 +++++++++++++++++++++- ui/terminal/smart_status.go | 5 +++-- 2 files changed, 24 insertions(+), 3 deletions(-) (limited to 'ui/terminal') 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 { -- cgit v1.2.3-59-g8ed1b