From 9ef52d7ae189703adb6a7ec03d1845b2487dc86f Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Mon, 12 Feb 2018 11:54:02 -0500 Subject: [PATCH] perf(Math): Avoid Math.min, Math.max in vtkMath.arrayMin, vtkMath.arrayMax Timings: Existing Math.min: ~210ms for arrayMin, ~2712ms for entire volume rendering initialization Comparison operator: ~35ms for arrayMin, ~2070ms for entire volume rendering initialization Ternary operator: ~37ms for arrayMin, ~2125ms for entire volume rendering initialization --- Sources/Common/Core/Math/index.js | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Sources/Common/Core/Math/index.js b/Sources/Common/Core/Math/index.js index 3a3cd9cc420..b4eb773325d 100644 --- a/Sources/Common/Core/Math/index.js +++ b/Sources/Common/Core/Math/index.js @@ -12,7 +12,6 @@ const { vtkErrorMacro, vtkWarningMacro } = macro; let randomSeedValue = 0; const VTK_MAX_ROTATIONS = 20; const VTK_SMALL_NUMBER = 1.0e-12; -const MAX_FUNCTION_ARGUMENTS = 32768; function notImplemented(method) { return () => vtkErrorMacro(`vtkMath::${method} - NOT IMPLEMENTED`); @@ -45,12 +44,10 @@ const { round, floor, ceil, min, max } = Math; function arrayMin(arr) { let minValue = Infinity; - for (let i = 0, len = arr.length; i < len; i += MAX_FUNCTION_ARGUMENTS) { - const submin = Math.min.apply( - null, - arr.slice(i, Math.min(i + MAX_FUNCTION_ARGUMENTS, len)) - ); - minValue = Math.min(submin, minValue); + for (let i = 0, len = arr.length; i < len; ++i) { + if (arr[i] < minValue) { + minValue = arr[i]; + } } return minValue; @@ -58,12 +55,10 @@ function arrayMin(arr) { function arrayMax(arr) { let maxValue = -Infinity; - for (let i = 0, len = arr.length; i < len; i += MAX_FUNCTION_ARGUMENTS) { - const submax = Math.max.apply( - null, - arr.slice(i, Math.min(i + MAX_FUNCTION_ARGUMENTS, len)) - ); - maxValue = Math.max(submax, maxValue); + for (let i = 0, len = arr.length; i < len; ++i) { + if (arr[i] > maxValue) { + maxValue = arr[i]; + } } return maxValue;