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
/// Extend existing band
// Extend endTime value
/// 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 (i.itemState.ooDeadband || isMinMaxFormat) {
if (isValidValue) {
// Set last value
+ // 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) {
lineTo(x2, y2);
// if(showBand) {