This is an automated email from the ASF dual-hosted git repository.

wangzx pushed a commit to branch simplify-large-arr-creation
in repository https://gitbox.apache.org/repos/asf/echarts.git

commit 4c62b1ebd3d817120c41b339b4d1f6783a886f06
Author: plainheart <[email protected]>
AuthorDate: Sat Dec 11 23:26:05 2021 +0800

    fix: use common helper `createFloat32Array` to simplify the large arrray 
creation.
---
 src/chart/candlestick/candlestickLayout.ts |  7 ++----
 src/layout/barGrid.ts                      | 38 +++++++++++++-----------------
 2 files changed, 19 insertions(+), 26 deletions(-)

diff --git a/src/chart/candlestick/candlestickLayout.ts 
b/src/chart/candlestick/candlestickLayout.ts
index e81f80b..2a9afd9 100644
--- a/src/chart/candlestick/candlestickLayout.ts
+++ b/src/chart/candlestick/candlestickLayout.ts
@@ -17,8 +17,6 @@
 * under the License.
 */
 
-/* global Float32Array */
-
 import {subPixelOptimize} from '../../util/graphic';
 import createRenderPlanner from '../helper/createRenderPlanner';
 import {parsePercent} from '../../util/number';
@@ -28,8 +26,7 @@ import CandlestickSeriesModel from './CandlestickSeries';
 import SeriesData from '../../data/SeriesData';
 import { RectLike } from 'zrender/src/core/BoundingRect';
 import DataStore from '../../data/DataStore';
-
-const LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;
+import { createFloat32Array } from '../../util/vendor';
 
 export interface CandlestickItemLayout {
     sign: number
@@ -166,7 +163,7 @@ const candlestickLayout: StageHandler = {
 
         function largeProgress(params: StageHandlerProgressParams, data: 
SeriesData) {
             // Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...]
-            const points = new LargeArr(params.count * 4);
+            const points = createFloat32Array(params.count * 4);
             let offset = 0;
             let point;
             const tmpIn: number[] = [];
diff --git a/src/layout/barGrid.ts b/src/layout/barGrid.ts
index 9c78076..1eb5a0e 100644
--- a/src/layout/barGrid.ts
+++ b/src/layout/barGrid.ts
@@ -17,24 +17,20 @@
 * under the License.
 */
 
-/* global Float32Array */
-
-import * as zrUtil from 'zrender/src/core/util';
-import {parsePercent} from '../util/number';
-import {isDimensionStacked} from '../data/helper/dataStackHelper';
+import { each, defaults, keys } from 'zrender/src/core/util';
+import { parsePercent } from '../util/number';
+import { isDimensionStacked } from '../data/helper/dataStackHelper';
 import createRenderPlanner from '../chart/helper/createRenderPlanner';
 import BarSeriesModel from '../chart/bar/BarSeries';
 import Axis2D from '../coord/cartesian/Axis2D';
 import GlobalModel from '../model/Global';
 import type Cartesian2D from '../coord/cartesian/Cartesian2D';
 import { StageHandler, Dictionary } from '../util/types';
+import { createFloat32Array } from '../util/vendor';
 
 const STACK_PREFIX = '__ec_stack_';
 const LARGE_BAR_MIN_WIDTH = 0.5;
 
-const LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;
-
-
 function getSeriesStackId(seriesModel: BarSeriesModel): string {
     return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;
 }
@@ -102,7 +98,7 @@ export function getLayoutOnAxis(opt: LayoutOption): 
BarGridLayoutResult {
     const bandWidth = baseAxis.getBandWidth();
 
     for (let i = 0; i < opt.count || 0; i++) {
-        params.push(zrUtil.defaults({
+        params.push(defaults({
             bandWidth: bandWidth,
             axisKey: axisKey,
             stackId: STACK_PREFIX + i
@@ -149,7 +145,7 @@ function getValueAxesMinGaps(barSeries: BarSeriesModel[]) {
      * series.
      */
     const axisValues: Dictionary<number[]> = {};
-    zrUtil.each(barSeries, function (seriesModel) {
+    each(barSeries, function (seriesModel) {
         const cartesian = seriesModel.coordinateSystem as Cartesian2D;
         const baseAxis = cartesian.getBaseAxis();
         if (baseAxis.type !== 'time' && baseAxis.type !== 'value') {
@@ -204,7 +200,7 @@ export function makeColumnLayout(barSeries: 
BarSeriesModel[]) {
     const axisMinGaps = getValueAxesMinGaps(barSeries);
 
     const seriesInfoList: LayoutSeriesInfo[] = [];
-    zrUtil.each(barSeries, function (seriesModel) {
+    each(barSeries, function (seriesModel) {
         const cartesian = seriesModel.coordinateSystem as Cartesian2D;
         const baseAxis = cartesian.getBaseAxis();
         const axisExtent = baseAxis.getExtent();
@@ -270,7 +266,7 @@ function doCalBarWidthAndOffset(seriesInfoList: 
LayoutSeriesInfo[]) {
     // Columns info on each category axis. Key is cartesian name
     const columnsMap: Dictionary<ColumnOnAxisInfo> = {};
 
-    zrUtil.each(seriesInfoList, function (seriesInfo, idx) {
+    each(seriesInfoList, function (seriesInfo, idx) {
         const axisKey = seriesInfo.axisKey;
         const bandWidth = seriesInfo.bandWidth;
         const columnsOnAxis: ColumnOnAxisInfo = columnsMap[axisKey] || {
@@ -319,7 +315,7 @@ function doCalBarWidthAndOffset(seriesInfoList: 
LayoutSeriesInfo[]) {
 
     const result: BarWidthAndOffset = {};
 
-    zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {
+    each(columnsMap, function (columnsOnAxis, coordSysName) {
 
         result[coordSysName] = {};
 
@@ -327,7 +323,7 @@ function doCalBarWidthAndOffset(seriesInfoList: 
LayoutSeriesInfo[]) {
         const bandWidth = columnsOnAxis.bandWidth;
         let categoryGapPercent = columnsOnAxis.categoryGap;
         if (categoryGapPercent == null) {
-            const columnCount = zrUtil.keys(stacks).length;
+            const columnCount = keys(stacks).length;
             // More columns in one group
             // the spaces between group is smaller. Or the column will be too 
thin.
             categoryGapPercent = Math.max((35 - columnCount * 4), 15) + '%';
@@ -343,7 +339,7 @@ function doCalBarWidthAndOffset(seriesInfoList: 
LayoutSeriesInfo[]) {
         autoWidth = Math.max(autoWidth, 0);
 
         // Find if any auto calculated bar exceeded maxBarWidth
-        zrUtil.each(stacks, function (column) {
+        each(stacks, function (column) {
             const maxWidth = column.maxWidth;
             const minWidth = column.minWidth;
 
@@ -393,7 +389,7 @@ function doCalBarWidthAndOffset(seriesInfoList: 
LayoutSeriesInfo[]) {
 
         let widthSum = 0;
         let lastColumn: StackInfo;
-        zrUtil.each(stacks, function (column, idx) {
+        each(stacks, function (column, idx) {
             if (!column.width) {
                 column.width = autoWidth;
             }
@@ -405,7 +401,7 @@ function doCalBarWidthAndOffset(seriesInfoList: 
LayoutSeriesInfo[]) {
         }
 
         let offset = -widthSum / 2;
-        zrUtil.each(stacks, function (column, stackId) {
+        each(stacks, function (column, stackId) {
             result[coordSysName][stackId] = result[coordSysName][stackId] || {
                 bandWidth: bandWidth,
                 offset: offset,
@@ -449,7 +445,7 @@ export function layout(seriesType: string, ecModel: 
GlobalModel) {
 
     const lastStackCoords: Dictionary<{p: number, n: number}[]> = {};
 
-    zrUtil.each(seriesModels, function (seriesModel) {
+    each(seriesModels, function (seriesModel) {
 
         const data = seriesModel.getData();
         const cartesian = seriesModel.coordinateSystem as Cartesian2D;
@@ -582,9 +578,9 @@ export const largeLayout: StageHandler = {
         return {
             progress: function (params, data) {
                 const count = params.count;
-                const largePoints = new LargeArr(count * 2);
-                const largeBackgroundPoints = new LargeArr(count * 2);
-                const largeDataIndices = new LargeArr(count);
+                const largePoints = createFloat32Array(count * 2);
+                const largeBackgroundPoints = createFloat32Array(count * 2);
+                const largeDataIndices = createFloat32Array(count);
                 let dataIndex;
                 let coord: number[] = [];
                 const valuePair = [];

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to