tstest: coalesce dropped Ticker ticks when advancing the clock far ahead
Clock.Advance previously fired each Ticker once per period between the current time and the advance target, even though all but the first few sends were dropped on the Ticker's full channel. A test that advances the clock 180 days with a 5 second ticker registered did 3.1 million fires, each taking a mutex, attempting a channel send, and fixing the event heap. Under the race detector, where synchronization operations are 20-30x more expensive, this dominated test runtime. Now, when a tick is dropped because the channel is full, skip the remaining missed ticks in one step, staying aligned to the original schedule and still firing the final tick at or before the advance target. This matches time.Ticker, which drops ticks it cannot deliver, and is observably identical behavior. Ticks that fit in the channel are still all delivered. In the internal corp repo, this takes controlclient.TestExpiry under race from 6.0s to 2.2s (its no-race time is 0.5s), and the new benchmark improves from 449µs to 90ns per 24h advance: BenchmarkTickerLargeAdvance-16 100 449313 ns/op (before) BenchmarkTickerLargeAdvance-16 13311910 90.22 ns/op (after) Updates tailscale/corp#47035 Change-Id: I4826df212415eb2ea7ceb5bc46848e816f8ccde1 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
B
Brad Fitzpatrick committed
c13a1f9c5501a07c7bc47ae791031b90acedc6cf
Parent: 5428027
Committed by Brad Fitzpatrick <brad@danga.com>
on 8/24/2026, 3:32:12 PM