From 76a89f092219e8b429988a52d75471369931c9d6 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Wed, 13 Nov 2019 02:24:07 +0200 Subject: [PATCH] determineDataLimits optimizations (#6695) --- src/controllers/controller.bar.js | 2 +- src/core/core.controller.js | 4 + src/core/core.datasetController.js | 26 +++- src/core/core.scale.js | 46 ++++-- src/scales/scale.category.js | 40 +---- src/scales/scale.linearbase.js | 2 +- src/scales/scale.logarithmic.js | 52 ++++--- src/scales/scale.time.js | 139 +++++++++++------- .../controller.line/clip/default-x-max.png | Bin 13051 -> 14635 bytes .../controller.line/clip/default-x.png | Bin 12199 -> 13951 bytes .../controller.line/clip/default-y-max.png | Bin 14541 -> 14590 bytes .../controller.line/clip/default-y.png | Bin 14312 -> 14464 bytes test/specs/controller.bar.tests.js | 4 +- test/specs/core.scale.tests.js | 36 +++++ test/specs/scale.logarithmic.tests.js | 6 +- 15 files changed, 225 insertions(+), 132 deletions(-) diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 4242b1458..7c30a6a43 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -384,7 +384,7 @@ module.exports = DatasetController.extend({ value = custom.barStart; length = custom.barEnd - custom.barStart; // bars crossing origin are not stacked - if (value !== 0 && Math.sign(value) !== Math.sign(custom.barEnd)) { + if (value !== 0 && helpers.sign(value) !== helpers.sign(custom.barEnd)) { start = 0; } start += value; diff --git a/src/core/core.controller.js b/src/core/core.controller.js index fb42f1195..5b2f5230e 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -391,6 +391,10 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { scales[scale.id] = scale; } + // parse min/max value, so we can properly determine min/max for other scales + scale._userMin = scale._parse(scale.options.ticks.min); + scale._userMax = scale._parse(scale.options.ticks.max); + // TODO(SB): I think we should be able to remove this custom case (options.scale) // and consider it as a regular scale part of the "scales"" map only! This would // make the logic easier and remove some useless? custom code. diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index e363edd34..3de5c5531 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -146,7 +146,7 @@ function applyStack(stack, value, dsIndex, allOther) { break; } otherValue = stack.values[datasetIndex]; - if (!isNaN(otherValue) && (value === 0 || Math.sign(value) === Math.sign(otherValue))) { + if (!isNaN(otherValue) && (value === 0 || helpers.sign(value) === helpers.sign(otherValue))) { value += otherValue; } } @@ -185,6 +185,13 @@ function getFirstScaleId(chart, axis) { return (scalesOpts && scalesOpts[prop] && scalesOpts[prop].length && scalesOpts[prop][0].id) || scaleId; } +function getUserBounds(scale) { + var {min, max, minDefined, maxDefined} = scale._getUserBounds(); + return { + min: minDefined ? min : Number.NEGATIVE_INFINITY, + max: maxDefined ? max : Number.POSITIVE_INFINITY + }; +} // Base class for all dataset controllers (line, bar, etc) var DatasetController = function(chart, datasetIndex) { this.initialize(chart, datasetIndex); @@ -298,6 +305,15 @@ helpers.extend(DatasetController.prototype, { return this.getScaleForId(this._getIndexScaleId()); }, + /** + * @private + */ + _getOtherScale: function(scale) { + return scale.id === this._getIndexScaleId() + ? this._getValueScale() + : this._getIndexScale(); + }, + reset: function() { this._update(true); }, @@ -612,7 +628,9 @@ helpers.extend(DatasetController.prototype, { var max = Number.NEGATIVE_INFINITY; var stacked = canStack && meta._stacked; var indices = getSortedDatasetIndices(chart, true); - var i, item, value, parsed, stack, min, minPositive; + var otherScale = this._getOtherScale(scale); + var {min: otherMin, max: otherMax} = getUserBounds(otherScale); + var i, item, value, parsed, stack, min, minPositive, otherValue; min = minPositive = Number.POSITIVE_INFINITY; @@ -620,7 +638,9 @@ helpers.extend(DatasetController.prototype, { item = metaData[i]; parsed = item._parsed; value = parsed[scale.id]; - if (item.hidden || isNaN(value)) { + otherValue = parsed[otherScale.id]; + if (item.hidden || isNaN(value) || + otherMin > otherValue || otherMax < otherValue) { continue; } if (stacked) { diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 52012877d..7fafa704a 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -6,6 +6,7 @@ const helpers = require('../helpers/index'); const Ticks = require('./core.ticks'); const isArray = helpers.isArray; +const isFinite = helpers.isFinite; const isNullOrUndef = helpers.isNullOrUndef; const valueOrDefault = helpers.valueOrDefault; const resolve = helpers.options.resolve; @@ -347,26 +348,49 @@ class Scale extends Element { return null; } + /** + * @private + * @since 3.0 + */ + _getUserBounds() { + var min = this._userMin; + var max = this._userMax; + if (isNullOrUndef(min) || isNaN(min)) { + min = Number.POSITIVE_INFINITY; + } + if (isNullOrUndef(max) || isNaN(max)) { + max = Number.NEGATIVE_INFINITY; + } + return {min, max, minDefined: isFinite(min), maxDefined: isFinite(max)}; + } + + /** + * @private + * @since 3.0 + */ _getMinMax(canStack) { var me = this; - var metas = me._getMatchingVisibleMetas(); - var min = Number.POSITIVE_INFINITY; - var max = Number.NEGATIVE_INFINITY; + var {min, max, minDefined, maxDefined} = me._getUserBounds(); var minPositive = Number.POSITIVE_INFINITY; - var i, ilen, minmax; + var i, ilen, metas, minmax; + + if (minDefined && maxDefined) { + return {min, max}; + } + metas = me._getMatchingVisibleMetas(); for (i = 0, ilen = metas.length; i < ilen; ++i) { minmax = metas[i].controller._getMinMax(me, canStack); - min = Math.min(min, minmax.min); - max = Math.max(max, minmax.max); + if (!minDefined) { + min = Math.min(min, minmax.min); + } + if (!maxDefined) { + max = Math.max(max, minmax.max); + } minPositive = Math.min(minPositive, minmax.minPositive); } - return { - min: min, - max: max, - minPositive: minPositive - }; + return {min, max, minPositive}; } _invalidateCaches() {} diff --git a/src/scales/scale.category.js b/src/scales/scale.category.js index cb07a6751..1c9d3d91e 100644 --- a/src/scales/scale.category.js +++ b/src/scales/scale.category.js @@ -24,44 +24,20 @@ module.exports = Scale.extend({ determineDataLimits: function() { var me = this; - var labels = me._getLabels(); - var ticksOpts = me.options.ticks; - var min = ticksOpts.min; - var max = ticksOpts.max; - var minIndex = 0; - var maxIndex = labels.length - 1; - var findIndex; - - if (min !== undefined) { - // user specified min value - findIndex = labels.indexOf(min); - if (findIndex >= 0) { - minIndex = findIndex; - } - } - - if (max !== undefined) { - // user specified max value - findIndex = labels.indexOf(max); - if (findIndex >= 0) { - maxIndex = findIndex; - } - } + var max = me._getLabels().length - 1; - me.minIndex = minIndex; - me.maxIndex = maxIndex; - me.min = labels[minIndex]; - me.max = labels[maxIndex]; + me.min = Math.max(me._userMin || 0, 0); + me.max = Math.min(me._userMax || max, max); }, buildTicks: function() { var me = this; var labels = me._getLabels(); - var minIndex = me.minIndex; - var maxIndex = me.maxIndex; + var min = me.min; + var max = me.max; // If we are viewing some subset of labels, slice the original array - labels = (minIndex === 0 && maxIndex === labels.length - 1) ? labels : labels.slice(minIndex, maxIndex + 1); + labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1); return labels.map(function(l) { return {value: l}; }); @@ -93,7 +69,7 @@ module.exports = Scale.extend({ return; } - me._startValue = me.minIndex - (offset ? 0.5 : 0); + me._startValue = me.min - (offset ? 0.5 : 0); me._valueRange = Math.max(ticks.length - (offset ? 0 : 1), 1); }, @@ -112,7 +88,7 @@ module.exports = Scale.extend({ var ticks = this.ticks; return index < 0 || index > ticks.length - 1 ? null - : this.getPixelForValue(index + this.minIndex); + : this.getPixelForValue(index + this.min); }, getValueForPixel: function(pixel) { diff --git a/src/scales/scale.linearbase.js b/src/scales/scale.linearbase.js index 2401801ae..cff6830ea 100644 --- a/src/scales/scale.linearbase.js +++ b/src/scales/scale.linearbase.js @@ -84,7 +84,7 @@ function generateTicks(generationOptions, dataRange) { } module.exports = Scale.extend({ - _parse: function(raw) { + _parse: function(raw, index) { // eslint-disable-line no-unused-vars if (helpers.isNullOrUndef(raw)) { return NaN; } diff --git a/src/scales/scale.logarithmic.js b/src/scales/scale.logarithmic.js index f85ed9549..ae5e65824 100644 --- a/src/scales/scale.logarithmic.js +++ b/src/scales/scale.logarithmic.js @@ -64,13 +64,11 @@ var defaultConfig = { } }; -// TODO(v3): change this to positiveOrDefault -function nonNegativeOrDefault(value, defaultValue) { - return helpers.isFinite(value) && value >= 0 ? value : defaultValue; -} - module.exports = Scale.extend({ - _parse: LinearScaleBase.prototype._parse, + _parse: function(raw, index) { // eslint-disable-line no-unused-vars + const value = LinearScaleBase.prototype._parse.apply(this, arguments); + return helpers.isFinite(value) && value >= 0 ? value : undefined; + }, determineDataLimits: function() { var me = this; @@ -88,39 +86,39 @@ module.exports = Scale.extend({ handleTickRangeOptions: function() { var me = this; - var tickOpts = me.options.ticks; var DEFAULT_MIN = 1; var DEFAULT_MAX = 10; + var min = me.min; + var max = me.max; - me.min = nonNegativeOrDefault(tickOpts.min, me.min); - me.max = nonNegativeOrDefault(tickOpts.max, me.max); - - if (me.min === me.max) { - if (me.min !== 0 && me.min !== null) { - me.min = Math.pow(10, Math.floor(log10(me.min)) - 1); - me.max = Math.pow(10, Math.floor(log10(me.max)) + 1); + if (min === max) { + if (min !== 0 && min !== null) { + min = Math.pow(10, Math.floor(log10(min)) - 1); + max = Math.pow(10, Math.floor(log10(max)) + 1); } else { - me.min = DEFAULT_MIN; - me.max = DEFAULT_MAX; + min = DEFAULT_MIN; + max = DEFAULT_MAX; } } - if (me.min === null) { - me.min = Math.pow(10, Math.floor(log10(me.max)) - 1); + if (min === null) { + min = Math.pow(10, Math.floor(log10(max)) - 1); } - if (me.max === null) { - me.max = me.min !== 0 - ? Math.pow(10, Math.floor(log10(me.min)) + 1) + if (max === null) { + max = min !== 0 + ? Math.pow(10, Math.floor(log10(min)) + 1) : DEFAULT_MAX; } if (me.minNotZero === null) { - if (me.min > 0) { - me.minNotZero = me.min; - } else if (me.max < 1) { - me.minNotZero = Math.pow(10, Math.floor(log10(me.max))); + if (min > 0) { + me.minNotZero = min; + } else if (max < 1) { + me.minNotZero = Math.pow(10, Math.floor(log10(max))); } else { me.minNotZero = DEFAULT_MIN; } } + me.min = min; + me.max = max; }, buildTicks: function() { @@ -129,8 +127,8 @@ module.exports = Scale.extend({ var reverse = !me.isHorizontal(); var generationOptions = { - min: nonNegativeOrDefault(tickOpts.min), - max: nonNegativeOrDefault(tickOpts.max) + min: me._userMin, + max: me._userMax }; var ticks = generateTicks(generationOptions, me); diff --git a/src/scales/scale.time.js b/src/scales/scale.time.js index c3d56680a..d0bf44aca 100644 --- a/src/scales/scale.time.js +++ b/src/scales/scale.time.js @@ -177,7 +177,11 @@ function interpolate(table, skey, sval, tkey) { return prev[tkey] + offset; } -function toTimestamp(scale, input) { +function parse(scale, input) { + if (helpers.isNullOrUndef(input)) { + return null; + } + var adapter = scale._adapter; var options = scale.options.time; var parser = options.parser; @@ -194,25 +198,15 @@ function toTimestamp(scale, input) { : adapter.parse(value); } - return value !== null ? +value : value; -} - -function parse(scale, input) { - if (helpers.isNullOrUndef(input)) { - return null; - } - - var options = scale.options.time; - var value = toTimestamp(scale, input); if (value === null) { return value; } if (options.round) { - value = +scale._adapter.startOf(value, options.round); + value = scale._adapter.startOf(value, options.round); } - return value; + return +value; } /** @@ -364,42 +358,60 @@ function ticksFromTimestamps(scale, values, majorUnit) { return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit); } - function getDataTimestamps(scale) { var timestamps = scale._cache.data || []; var i, ilen, metas; - if (!timestamps.length) { - metas = scale._getMatchingVisibleMetas(); - for (i = 0, ilen = metas.length; i < ilen; ++i) { - timestamps = timestamps.concat(metas[i].controller._getAllParsedValues(scale)); - } - timestamps = scale._cache.data = arrayUnique(timestamps).sort(sorter); + if (timestamps.length) { + return timestamps; } - return timestamps; + + metas = scale._getMatchingVisibleMetas(); + for (i = 0, ilen = metas.length; i < ilen; ++i) { + timestamps = timestamps.concat(metas[i].controller._getAllParsedValues(scale)); + } + + // We can not assume data is in order or unique - not even for single dataset + // It seems to be somewhat faster to do sorting first + return (scale._cache.data = arrayUnique(timestamps.sort(sorter))); } function getLabelTimestamps(scale) { var timestamps = scale._cache.labels || []; var i, ilen, labels; - if (!timestamps.length) { - labels = scale._getLabels(); - for (i = 0, ilen = labels.length; i < ilen; ++i) { - timestamps.push(parse(scale, labels[i])); - } - timestamps = scale._cache.labels = arrayUnique(timestamps).sort(sorter); + if (timestamps.length) { + return timestamps; } - return timestamps; + + labels = scale._getLabels(); + for (i = 0, ilen = labels.length; i < ilen; ++i) { + timestamps.push(parse(scale, labels[i])); + } + + // We could assume labels are in order and unique - but let's not + return (scale._cache.labels = arrayUnique(timestamps.sort(sorter))); } function getAllTimestamps(scale) { var timestamps = scale._cache.all || []; + var label, data; + + if (timestamps.length) { + return timestamps; + } - if (!timestamps.length) { - timestamps = getDataTimestamps(scale).concat(getLabelTimestamps(scale)); - timestamps = scale._cache.all = arrayUnique(timestamps).sort(sorter); + data = getDataTimestamps(scale); + label = getLabelTimestamps(scale); + if (data.length && label.length) { + // If combining labels and data (data might not contain all labels), + // we need to recheck uniqueness and sort + timestamps = arrayUnique(data.concat(label).sort(sorter)); + } else { + timestamps = data.length ? data : label; } + timestamps = scale._cache.all = timestamps; + return timestamps; } @@ -423,6 +435,24 @@ function getTimestampsForTicks(scale) { return timestamps; } +function getTimestampsForTable(scale) { + return scale.options.distribution === 'series' + ? getAllTimestamps(scale) + : [scale.min, scale.max]; +} + +function getLabelBounds(scale) { + var min = Number.POSITIVE_INFINITY; + var max = Number.NEGATIVE_INFINITY; + var arr = getLabelTimestamps(scale); + + if (arr.length) { + min = arr[0]; + max = arr[arr.length - 1]; + } + return {min, max}; +} + /** * Return subset of `timestamps` between `min` and `max`. * Timestamps are assumend to be in sorted order. @@ -501,7 +531,7 @@ module.exports = Scale.extend({ if (raw === undefined) { return NaN; } - return toTimestamp(this, raw); + return parse(this, raw); }, _parseObject: function(obj, axis, index) { @@ -539,30 +569,35 @@ module.exports = Scale.extend({ determineDataLimits: function() { var me = this; - var adapter = me._adapter; var options = me.options; - var tickOpts = options.ticks; + var adapter = me._adapter; var unit = options.time.unit || 'day'; - var min = Number.POSITIVE_INFINITY; - var max = Number.NEGATIVE_INFINITY; - var minmax = me._getMinMax(false); - var i, ilen, labels; - - min = Math.min(min, minmax.min); - max = Math.max(max, minmax.max); - - labels = getLabelTimestamps(me); - for (i = 0, ilen = labels.length; i < ilen; ++i) { - min = Math.min(min, labels[i]); - max = Math.max(max, labels[i]); + var {min, max, minDefined, maxDefined} = me._getUserBounds(); + + function _applyBounds(bounds) { + if (!minDefined && !isNaN(bounds.min)) { + min = Math.min(min, bounds.min); + } + if (!maxDefined && !isNaN(bounds.max)) { + max = Math.max(max, bounds.max); + } + } + + // If we have user provided `min` and `max` labels / data bounds can be ignored + if (!minDefined || !maxDefined) { + // Labels are always considered, when user did not force bounds + _applyBounds(getLabelBounds(me)); + + // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`, + // data bounds are ignored (and don't need to be determined) + if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') { + _applyBounds(me._getMinMax(false)); + } } min = helpers.isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit); max = helpers.isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1; - min = parse(me, tickOpts.min) || min; - max = parse(me, tickOpts.max) || max; - // Make sure that max is strictly higher than min (required by the lookup table) me.min = Math.min(min, max); me.max = Math.max(min + 1, max); @@ -580,8 +615,8 @@ module.exports = Scale.extend({ timestamps = getTimestampsForTicks(me); if (options.bounds === 'ticks' && timestamps.length) { - me.min = parse(me, tickOpts.min) || timestamps[0]; - me.max = parse(me, tickOpts.max) || timestamps[timestamps.length - 1]; + me.min = me._userMin || timestamps[0]; + me.max = me._userMax || timestamps[timestamps.length - 1]; } min = me.min; @@ -597,7 +632,7 @@ module.exports = Scale.extend({ : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max)); me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined : determineMajorUnit(me._unit); - me._table = buildLookupTable(getAllTimestamps(me), min, max, distribution); + me._table = buildLookupTable(getTimestampsForTable(me), min, max, distribution); me._offsets = computeOffsets(me._table, ticks, min, max, options); if (tickOpts.reverse) { diff --git a/test/fixtures/controller.line/clip/default-x-max.png b/test/fixtures/controller.line/clip/default-x-max.png index 18a4eb29afa3b624b6e88a08642a7371f850a9ab..1b1ff84f819c95feb467e2b215980d2fe7877c24 100644 GIT binary patch literal 14635 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 literal 13051 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 BH-rEH diff --git a/test/fixtures/controller.line/clip/default-x.png b/test/fixtures/controller.line/clip/default-x.png index 70ad431e86aa5be01eef792660b61aecf56a04e9..f6601de6983d1f3d15b12d75415b1098b58e7bf9 100644 GIT binary patch literal 13951 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 aBe_lr#Z`_=;h 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 literal 14541 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 XJIN0nBR9wZ`0t#i?isAQ^_~9%33=&D diff --git a/test/fixtures/controller.line/clip/default-y.png b/test/fixtures/controller.line/clip/default-y.png index 6a1e9816fdc1a146870e3ea4a4e9efabd6f58856..923cf75aa8731fede7eb4634742f047d5db075f5 100644 GIT binary patch literal 14464 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 z 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 WbE3Boji(2|f2zuAm(c&1hx{KbV%6dR diff --git a/test/specs/controller.bar.tests.js b/test/specs/controller.bar.tests.js index 29c76c0c9..558770f7a 100644 --- a/test/specs/controller.bar.tests.js +++ b/test/specs/controller.bar.tests.js @@ -1493,7 +1493,7 @@ describe('Chart.controllers.bar', function() { var totalBarWidth = 0; for (var i = 0; i < chart.data.datasets.length; i++) { var bars = chart.getDatasetMeta(i).data; - for (var j = xScale.minIndex; j <= xScale.maxIndex; j++) { + for (var j = xScale.min; j <= xScale.max; j++) { totalBarWidth += bars[j]._model.width; } if (stacked) { @@ -1571,7 +1571,7 @@ describe('Chart.controllers.bar', function() { var totalBarHeight = 0; for (var i = 0; i < chart.data.datasets.length; i++) { var bars = chart.getDatasetMeta(i).data; - for (var j = yScale.minIndex; j <= yScale.maxIndex; j++) { + for (var j = yScale.min; j <= yScale.max; j++) { totalBarHeight += bars[j]._model.height; } if (stacked) { diff --git a/test/specs/core.scale.tests.js b/test/specs/core.scale.tests.js index d92ea6988..582f952d1 100644 --- a/test/specs/core.scale.tests.js +++ b/test/specs/core.scale.tests.js @@ -581,4 +581,40 @@ describe('Core.scale', function() { }); }); + + describe('min and max', function() { + it('should be limited to visible data', function() { + var chart = window.acquireChart({ + type: 'scatter', + data: { + datasets: [{ + data: [{x: 100, y: 100}, {x: -100, y: -100}] + }, { + data: [{x: 10, y: 10}, {x: -10, y: -10}] + }] + }, + options: { + scales: { + xAxes: [{ + id: 'x', + type: 'linear', + ticks: { + min: -20, + max: 20 + } + }], + yAxes: [{ + id: 'y', + type: 'linear' + }] + } + } + }); + + expect(chart.scales.x.min).toEqual(-20); + expect(chart.scales.x.max).toEqual(20); + expect(chart.scales.y.min).toEqual(-10); + expect(chart.scales.y.max).toEqual(10); + }); + }); }); diff --git a/test/specs/scale.logarithmic.tests.js b/test/specs/scale.logarithmic.tests.js index 58ff809b3..78de94635 100644 --- a/test/specs/scale.logarithmic.tests.js +++ b/test/specs/scale.logarithmic.tests.js @@ -515,7 +515,7 @@ describe('Logarithmic Scale tests', function() { datasets: [{ data: [1, 1, 1, 2, 1, 0] }], - labels: [] + labels: ['a', 'b', 'c', 'd', 'e', 'f'] }, options: { scales: { @@ -523,8 +523,8 @@ describe('Logarithmic Scale tests', function() { id: 'yScale', type: 'logarithmic', ticks: { - min: '', - max: false, + min: 'zero', + max: null, callback: function(value) { return value; } -- 2.47.2