Each pop is one kernel reaching its burst point. Those burst times across a batch are approximately normal, so the stream of pops is a sample from a bell curve and the gaps between pops are the inverse of its height: tiny gaps mean you are at the peak, widening gaps mean the tail.
Only the pops that already happened are observable, so the app fits a right-censored normal by maximum likelihood over μ and σ — the sufficient statistics are n, Σt and Σt², which makes a refining grid search cheap enough to redo every frame. Pull time is μ + 2.33σ, where 99% of the fitted mass is behind you. A stall rule (gap > 12× the fastest gap of this batch) fires early if the batch dies before the fit says so, because burning is worse than leaving a few kernels.