Timelines
A timeline is a way of representing any entity within the software that has a finite life; that is, a start, a (possibly measurable) existence, and an end. In the RIP, they are used to observe many processing steps and to get meaningful indications of progress. For example, there are timelines that represent the interpretation and rendering of each page.
The timeline system exists in the RIP skin, providing a general purpose API. This is used both by the skin and the core to publish various timelines and react to them. The timeline system uses Events to communicate changes in timeline state to any interested parties.
Timelines naturally form a hierarchy. When a timeline is created, it can be defined with another timeline as a parent. For example, a SWTLT_RENDER_SEPARATION timeline may be a child of a SWTLT_RENDER_PAGE timeline.
A timeline can have an extent, measured in a unit. Progress along the timeline is measured as a fraction of that extent. A timeline for which there is no way of knowing its extent can have an indeterminate extent. Progress can be queried (by an event) or automatically broadcast (by an event). For example, HVD scanning will send its progress in pages on a SWTLT_SCANNING_PAGES timeline.
There's a protocol for ending a timeline whereby the interested parties can negotiate when the timeline is allowed to end (if the timeline creator allowed this).