We can at least do the subtraction on the GPU by setting up the
transformation instead of on every data point.
It would be nice to do the rect as well but it looks like we might get
culled do to the rect width.
If we have two nodes that collide for address space, we need to keep the
one we already have in the symbol cache. The other node cannot be cached
and will be dropped instead.
This fixes a leak when collisions occur.
This allows snapshoting the motion highlight separate from the rest of the
layer so that we can have better render tree diffs. Otherwise we risk
having to snapshot a large dataset from the chart layer itself rather than
just the hightlight areas that changed.
We only want to move to float for the internal 0..1 positions which are
used to draw to the screen (to reduce how much data we hold on to). But for
the data we need to calculate those 0..1 positions, we want better
precision for large numbers. Use double for all of those.
We are already walking through all the frames so we can guess this better
than what is in the capture file. This helps ensure that loading older
captures still has the end clamped to the last event we'll see.
The goal here is to be able to connect data series such as
SysprofTimeSeries or SysprofXYSeries to various chart layers. Those
chart layers get stacked in a SysprofChart.
Some glue code will be necessary to go from frames into data series but
we can experiment with how to automate that later on.
This is meant to contain information about XY coordinates that we can
store in a normalized form. That allows them to be reused across different
scales without regenerating them.
It also includes a back-pointer to the model index so that we can pull out
the real object when necessary for drawing.