From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 30 Mar 2020 21:31:54 +0000 (-0700) Subject: Address bar chart performance regression (#7234) X-Git-Tag: v3.0.0-beta.2~174 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48a6a8d1301cd8ee1e625d03a73113599fef95e8;p=thirdparty%2FChart.js.git Address bar chart performance regression (#7234) --- diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index eea8cd97c..fa0806ed0 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -66,14 +66,10 @@ function computeMinSampleSize(scale, pixels) { function computeFitCategoryTraits(index, ruler, options) { const thickness = options.barThickness; const count = ruler.stackCount; - const curr = ruler.pixels[index]; - const min = isNullOrUndef(thickness) - ? computeMinSampleSize(ruler.scale, ruler.pixels) - : -1; let size, ratio; if (isNullOrUndef(thickness)) { - size = min * options.categoryPercentage; + size = ruler.min * options.categoryPercentage; ratio = options.barPercentage; } else { // When bar thickness is enforced, category and bar percentages are ignored. @@ -86,7 +82,7 @@ function computeFitCategoryTraits(index, ruler, options) { return { chunk: size / count, ratio, - start: curr - (size / 2) + start: ruler.pixels[index] - (size / 2) }; } @@ -385,7 +381,14 @@ export default class BarController extends DatasetController { pixels.push(iScale.getPixelForValue(me.getParsed(i)[iScale.axis])); } + // Note: a potential optimization would be to skip computing this + // only if the barThickness option is defined + // Since a scriptable option may return null or undefined that + // means the option would have to be of type number + const min = computeMinSampleSize(iScale, pixels); + return { + min, pixels, start: iScale._startPixel, end: iScale._endPixel,