diff --git a/README.md b/README.md index d4f9b1c..19f2d89 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,18 @@ autoPriority.exe -dry-run Триггер игрового режима не дублируется в PROMOTE: его исход уже вписан в строку `GAME MODE ON` (`NORMAL -> HIGH`, `уже HIGH` или `в блоклисте`). Выключение режима — секция `GAME MODE OFF — восстановление`, восстановленные процессы идут в PROMOTE/DEMOTE как обычно. +Запуск программы оформлен отдельным боксом START: + +```text +┌─ 04.10.2026 19:58:36 ───────────────────────────── +├ START +│ ├ started (mem=512MB, game-mem=2.0GB, interval=1m0s, dry-run=false) +│ └ own priority set to IDLE +└─────────────────────────────────────────────────── +``` + +Боксы разделены пустой строкой. + Режим `-dry-run` помечает строки `(план)`. ## Ограничения diff --git a/main.go b/main.go index 916bd35..5521691 100644 --- a/main.go +++ b/main.go @@ -701,20 +701,12 @@ func (a *app) emitChange(hasGame bool, target uint32, detail string) { // flushScan выводит события одного скана одним боксом. // Порядок групп строгий: PROMOTE -> DEMOTE -> SKIP -> BLOCK. -func (a *app) flushScan() { - a.buffering = false - groups := []struct { - name string - rows []string - }{ - {"PROMOTE", a.bufPromote}, - {"DEMOTE", a.bufDemote}, - {"SKIP", a.bufSkip}, - {"BLOCK", a.bufBlock}, - } - head := a.gameHead - a.gameHead = "" - a.bufPromote, a.bufDemote, a.bufSkip, a.bufBlock = nil, nil, nil, nil +type logGroup struct { + name string + rows []string +} + +func renderBox(head string, groups []logGroup) { var lines []string if head != "" { lines = append(lines, "├ "+head) @@ -756,6 +748,21 @@ func (a *app) flushScan() { logRaw(line) } logRaw("└" + strings.Repeat("─", width-1)) + logRaw("") +} + +func (a *app) flushScan() { + a.buffering = false + head := a.gameHead + a.gameHead = "" + groups := []logGroup{ + {"PROMOTE", a.bufPromote}, + {"DEMOTE", a.bufDemote}, + {"SKIP", a.bufSkip}, + {"BLOCK", a.bufBlock}, + } + a.bufPromote, a.bufDemote, a.bufSkip, a.bufBlock = nil, nil, nil, nil + renderBox(head, groups) } // handleTrigger проводит триггер через смену приоритета, но вместо @@ -1088,8 +1095,8 @@ func main() { fmt.Fprintln(logFile, s) } - logf("autoPriority started (mem=%s, game-mem=%s, interval=%s, dry-run=%v)", - formatMemSize(mem), formatMemSize(gameMem), *interval, *dryRun) + startRows := []string{fmt.Sprintf("started (mem=%s, game-mem=%s, interval=%s, dry-run=%v)", + formatMemSize(mem), formatMemSize(gameMem), *interval, *dryRun)} if !*dryRun { pid := uint32(os.Getpid()) @@ -1099,11 +1106,12 @@ func main() { closeH(h) } if err != nil { - logf("warning: could not set own priority to IDLE: %v", err) + startRows = append(startRows, fmt.Sprintf("warning: could not set own priority to IDLE: %v", err)) } else { - logf("own priority set to IDLE") + startRows = append(startRows, "own priority set to IDLE") } } + renderBox("", []logGroup{{"START", startRows}}) a := newApp(mem, gameMem, *dryRun)