Previous changes set value band end time to be the same as the next
value band's start time. However this caused the problem that there is
no way of telling during rendering where exactly within the previous
value band did the band's value go out of dead band and since t_end does
not tell us this. This means that line-rendering (not stepped sample
rendering) will get drawn invalidly if t_end > t_begin within a value
band.
The fix was to set t_end to the last timestamp where the value was still
within deadband, i.e:
```
|t0 t0_end | VALUE BAND #0 t0 < t0_end
| | |t1 | VALUE BAND #1 t1 = t1_end
| | |t1_end |
| | | |t2... VALUE BAND #2
ts0----ts1---- ts2------ts3---
v=0 v=0 v=1 v=2
```
gitlab #35
Change-Id: I073d1aed0d3ce0ffe30081937fdd7ff1c22dc107
(cherry picked from commit
b885083762a43ec97162a5f77df4fd5f85e28979)
/// Extend existing band
// Extend endTime value
- if (!i.hasEndTime) {
- i.current.setTime( time.getBinding(), time.getValue() );
- } else {
- i.current.setEndTime( time.getBinding(), time.getValue() );
+
+ // This ensures that a value band's end time isn't the same
+ // as the next band's start time which makes it possible to
+ // know what are the timestamps between which the item value
+ // changed from a to b. This allows us to more correctly render
+ // steps and sloped lines accoring to the actual data.
+ if (!i.itemState.ooDeadband || isMinMaxFormat) {
+ if (!i.hasEndTime) {
+ i.current.setTime( time.getBinding(), time.getValue() );
+ } else {
+ i.current.setEndTime( time.getBinding(), time.getValue() );
+ }
}
+
if (i.itemState.ooDeadband || isMinMaxFormat) {
if (isValidValue) {
// Set last value
}
}
- if (flat)
+ // gitlab #35: t2 > t1 ensure that the value band is
+ // rendered as a horizontal line until the the time when
+ // the band's value went out of dead-band.
+ if (flat || t2 > t1)
lineTo(x2, y2);
// if(showBand) {