diff --git a/OHBM/entry/src/main/ets/cases/performance/3d-cube.ts b/OHBM/entry/src/main/ets/cases/performance/3d-cube.ts new file mode 100644 index 0000000000000000000000000000000000000000..334668393ad9ee0b9d5ed8f42ed96ad3a476ae2e --- /dev/null +++ b/OHBM/entry/src/main/ets/cases/performance/3d-cube.ts @@ -0,0 +1,615 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { WorkerMessage } from '../BenchmarkMeasure'; +import { ThreadWorkerGlobalScope } from '@kit.ArkTS'; + +const LOOP_MAX: number = 50; +const VARRAY_LENGHT: number = 9; +const NORMAL_LENGHT: number = 6; +const HALF_NUMBER: number = 2; +const ARRAY_MAX_COUNT_FOUR: number = 4; +const ARRAY_MAX_COUNT_THR: number = 3; +const ARRAY_INDEX_TWO: number = 2; +const ARRAY_INDEX_THREE: number = 3; +const ARRAY_INDEX_FIVE: number = 5; +const ARRAY_INDEX_SIX: number = 6; +const ARRAY_INDEX_EIGHT: number = 8; +const ARRAY_INDEX_SEVEN: number = 7; +const ARRAY_INDEX_NINE: number = 9; +const ARRAY_INDEX_TEN: number = 10; +const ARRAY_INDEX_ELEVEN: number = 11; +const LINEAR_MEASURE: number = 180; +const VALIDATION_TWENTY: number = 20; +const VALIDATION_TWENTY_VALUE: number = 2889.0000000000045; +const VALIDATION_FORTY: number = 40; +const VALIDATION_FORTY_VALUE: number = 2889.0000000000055; +const VALIDATION_EIGHT: number = 80; +const VALIDATION_EIGHT_VALUE: number = 2889.000000000005; +const VALIDATION_OHS: number = 160; +const VALIDATION_OHS_VALUE: number = 2889.0000000000055; +const QARRAY_ONE_VALUE: number = 150; +const TIME_UNIT: number = 1000; +const TIME_COUNT: number = 9; +const DRAW_QUBE_COUNT: number = 5; + +class Object2 { + v: number[] = new Array(); +} + +class Object1 { + loopCount: number = 0; + loopMax: number = LOOP_MAX; + timeMax: number = 0; + timeAvg: number = 0; + timeMin: number = 0; + timeTemp: number = 0; + timeTotal: number = 0; + init: Boolean = false; +} + +class CreateP { + v: number[]; + + constructor(x: number, y: number, z: number) { + this.v = [x, y, x, 1]; + } +} + +class Q { + vArray: CreateP[] = new Array(VARRAY_LENGHT); + edge: number[][] = new Array(); + normal: number[][] = new Array(NORMAL_LENGHT); + line: boolean[] = new Array(); + numPx: number = 0; + lastPx: number = 0; +} + +class Cube { + workerPort: ThreadWorkerGlobalScope; + + constructor(workerPort: ThreadWorkerGlobalScope) { + this.workerPort = workerPort; + } + + util(z1: number, z2: number): number { + if (z2 > z1) { + return 1; + } else { + return -1; + } + } + + projectVertex(v: number[]): number[] { + // 透视投影矩阵 + let projectionMatrix = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 1, 1] + ]; + + // 将 3D 坐标转换为 2D 坐标 + let projectedVertex = this.vMulti(projectionMatrix, v); + return [projectedVertex[0] / projectedVertex[3], projectedVertex[1] / projectedVertex[3]]; + } + + drawLine2d(from: CreateP, to: CreateP): void { + /* + let x1 = this.projectVertex(from.v)[0]; + let y1 = this.projectVertex(from.v)[1]; + let x2 = this.projectVertex(to.v)[0]; + let y2 = this.projectVertex(to.v)[1]; + + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + */ + let message = + new WorkerMessage('cube', 5, 0, 0, 0, 0, 0, 0, 0); + message.vertices_x = [this.projectVertex(from.v)[0], this.projectVertex(to.v)[0]]; + message.vertices_y = [this.projectVertex(from.v)[1], this.projectVertex(to.v)[1]]; + this.workerPort.postMessage(message); + } + + drawLine(from: CreateP, to: CreateP): void { + let x1 = from.v[0]; + let x2 = to.v[0]; + let y1 = from.v[1]; + let y2 = to.v[1]; + + let dx = Math.abs(x2 - x1); + let dy = Math.abs(y2 - y1); + let x = x1; + let y = y1; + let incX1: number; + let incY1: number; + let incX2: number; + let incY2: number; + let den: number; + let num: number; + let numAdd: number; + let numPix: number; + + incX1 = this.util(x1, x2); + incX2 = incX1; + incY1 = this.util(y1, y2); + incY2 = incY1; + + if (dx >= dy) { + incX1 = 0; + incY2 = 0; + den = dx; + num = dx / HALF_NUMBER; + numAdd = dy; + numPix = dx; + } else { + incX2 = 0; + incY1 = 0; + den = dy; + num = dy / HALF_NUMBER; + numAdd = dx; + numPix = dy; + } + numPix = this.q.lastPx + numPix; + + for (let i = this.q.lastPx; i < numPix; i++) { + num += numAdd; + if (num >= den) { + x += incX1; + y += incY1; + } + x += incX2; + y += incY2; + } + this.q.lastPx = numPix; + } + + calcCross(v0: number[], v1: number[]): number[] { + let cross: number[] = [0, 0, 0, 0]; + cross[0] = v0[1] * v1[ARRAY_INDEX_TWO] - v0[ARRAY_INDEX_TWO] * v1[1]; + cross[1] = v0[ARRAY_INDEX_TWO] * v1[0] - v0[0] * v1[ARRAY_INDEX_TWO]; + cross[ARRAY_INDEX_TWO] = v0[0] * v1[1] - v0[1] * v1[0]; + return cross; + } + + calcNormal(v0: number[], v1: number[], v2: number[]): number[] { + let a: number[] = [0, 0, 0, 0]; + let b: number[] = [0, 0, 0, 0]; + for (let i = 0; i < ARRAY_MAX_COUNT_THR; i++) { + a[i] = v0[i] - v1[i]; + b[i] = v2[i] - v1[i]; + } + a = this.calcCross(a, b); + let x = a[0] * a[0] + a[1] * a[1] + a[ARRAY_INDEX_TWO] * a[ARRAY_INDEX_TWO]; + let length = Math.sqrt(x); + for (let i = 0; i < ARRAY_MAX_COUNT_THR; i++) { + a[i] = a[i] / length; + } + a[ARRAY_INDEX_THREE] = 1; + return a; + } + + mMulti(m1: number[][], m2: number[][]): number[][] { + let m: number[][] = [ + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0] + ]; + for (let i = 0; i < ARRAY_MAX_COUNT_FOUR; i++) { + for (let j = 0; j < ARRAY_MAX_COUNT_FOUR; j++) { + m[i][j] = + m1[i][0] * m2[0][j] + m1[i][1] * m2[1][j] + m1[i][ARRAY_INDEX_TWO] * m2[ARRAY_INDEX_TWO][j] + + m1[i][ARRAY_INDEX_THREE] * m2[ARRAY_INDEX_THREE][j]; + } + } + return m; + } + + vMulti(m: number[][], v: number[]): number[] { + let vect: number[] = [0, 0, 0, 0]; + for (let i = 0; i < ARRAY_MAX_COUNT_FOUR; i++) { + vect[i] = m[i][0] * v[0] + m[i][1] * v[1] + m[i][ARRAY_INDEX_TWO] * v[ARRAY_INDEX_TWO] + + m[i][ARRAY_INDEX_THREE] * v[ARRAY_INDEX_THREE]; + } + return vect; + } + + vMulti2(m: number[][], v: number[]): number[] { + let vect: number[] = [0, 0, 0, 0]; + for (let i = 0; i < ARRAY_MAX_COUNT_FOUR; i++) { + vect[i] = m[i][0] * v[0] + m[i][1] * v[1] + m[i][ARRAY_INDEX_TWO] * v[ARRAY_INDEX_TWO]; + } + return vect; + } + + translate(m: number[][], dx: number, dy: number, dz: number): number[][] { + let t = [ + [1, 0, 0, dx], + [0, 1, 0, dy], + [0, 0, 1, dz], + [0, 0, 0, 1] + ]; + return this.mMulti(t, m); + } + + rotateX(m: number[][], phi: number): number[][] { + let a = phi; + a *= Math.PI / LINEAR_MEASURE; + let cos = Math.cos(a); + let sin = Math.sin(a); + let r: number[][] = [ + [1, 0, 0, 0], + [0, cos, -sin, 0], + [0, sin, cos, 0], + [0, 0, 0, 1] + ]; + return this.mMulti(r, m); + } + + rotateY(m: number[][], phi: number): number[][] { + let a = phi; + a *= Math.PI / LINEAR_MEASURE; + let cos = Math.cos(a); + let sin = Math.sin(a); + let r: number[][] = [ + [cos, 0, sin, 0], + [0, 1, 0, 0], + [-sin, 0, cos, 0], + [0, 0, 0, 1] + ]; + return this.mMulti(r, m); + } + + rotateZ(m: number[][], phi: number): number[][] { + let a = phi; + a *= Math.PI / LINEAR_MEASURE; + let cos = Math.cos(a); + let sin = Math.sin(a); + let r = [ + [cos, -sin, 0, 0], + [sin, cos, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]; + return this.mMulti(r, m); + } + + drawLine1(curN: number[][]): void { + if (curN[0][ARRAY_INDEX_TWO] < 0) { + if (!this.q.line[0]) { + this.drawLine(this.q.vArray[0], this.q.vArray[1]); + this.q.line[0] = true; + } + if (!this.q.line[1]) { + this.drawLine(this.q.vArray[1], this.q.vArray[ARRAY_INDEX_TWO]); + this.q.line[1] = true; + } + if (!this.q.line[ARRAY_INDEX_TWO]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_TWO], this.q.vArray[ARRAY_INDEX_TWO]); + this.q.line[ARRAY_INDEX_TWO] = true; + } + if (!this.q.line[ARRAY_INDEX_TWO]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_THREE], this.q.vArray[0]); + this.q.line[ARRAY_INDEX_TWO] = true; + } + } + + if (curN[1][ARRAY_INDEX_TWO] < 0) { + if (!this.q.line[ARRAY_INDEX_TWO]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_THREE], this.q.vArray[ARRAY_INDEX_TWO]); + this.q.line[ARRAY_INDEX_TWO] = true; + } + if (!this.q.line[ARRAY_INDEX_NINE]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_THREE], this.q.vArray[ARRAY_INDEX_SIX]); + this.q.line[ARRAY_INDEX_NINE] = true; + } + if (!this.q.line[ARRAY_INDEX_SIX]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_SIX], this.q.vArray[ARRAY_INDEX_SEVEN]); + this.q.line[ARRAY_INDEX_SIX] = true; + } + if (!this.q.line[ARRAY_INDEX_TEN]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_SEVEN], this.q.vArray[ARRAY_INDEX_THREE]); + this.q.line[ARRAY_INDEX_TEN] = true; + } + } + } + + drawLine2(curN: number[][]): void { + if (curN[ARRAY_INDEX_THREE][ARRAY_INDEX_THREE] < 0) { + if (!this.q.line[ARRAY_MAX_COUNT_FOUR]) { + this.drawLine(this.q.vArray[ARRAY_MAX_COUNT_FOUR], this.q.vArray[ARRAY_INDEX_FIVE]); + this.q.line[ARRAY_MAX_COUNT_FOUR] = true; + } + if (!this.q.line[ARRAY_INDEX_FIVE]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_FIVE], this.q.vArray[ARRAY_INDEX_SIX]); + this.q.line[ARRAY_INDEX_FIVE] = true; + } + if (!this.q.line[ARRAY_INDEX_SIX]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_SIX], this.q.vArray[ARRAY_INDEX_SEVEN]); + this.q.line[ARRAY_INDEX_SIX] = true; + } + if (!this.q.line[ARRAY_INDEX_SEVEN]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_SEVEN], this.q.vArray[ARRAY_MAX_COUNT_FOUR]); + this.q.line[ARRAY_INDEX_SEVEN] = true; + } + } + if (curN[ARRAY_INDEX_THREE][ARRAY_INDEX_THREE] < 0) { + if (!this.q.line[ARRAY_MAX_COUNT_FOUR]) { + this.drawLine(this.q.vArray[ARRAY_MAX_COUNT_FOUR], this.q.vArray[ARRAY_INDEX_FIVE]); + this.q.line[ARRAY_MAX_COUNT_FOUR] = true; + } + if (!this.q.line[ARRAY_INDEX_EIGHT]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_FIVE], this.q.vArray[1]); + this.q.line[ARRAY_INDEX_EIGHT] = true; + } + if (!this.q.line[0]) { + this.drawLine(this.q.vArray[1], this.q.vArray[0]); + this.q.line[0] = true; + } + if (!this.q.line[ARRAY_INDEX_ELEVEN]) { + this.drawLine(this.q.vArray[0], this.q.vArray[ARRAY_MAX_COUNT_FOUR]); + this.q.line[ARRAY_INDEX_ELEVEN] = true; + } + } + } + + drawQube(): void { + let curN: number[][] = new Array(); + this.q.lastPx = 0; + for (let i = DRAW_QUBE_COUNT; i >= 0; i--) { + curN.push(this.vMulti2(this.mQube, this.q.normal[i])); + } + + this.drawLine1(curN); + this.drawLine2(curN); + if (curN[ARRAY_MAX_COUNT_FOUR][ARRAY_INDEX_TWO] < 0) { + if (!this.q.line[ARRAY_INDEX_ELEVEN]) { + this.drawLine(this.q.vArray[ARRAY_MAX_COUNT_FOUR], this.q.vArray[0]); + this.q.line[ARRAY_INDEX_ELEVEN] = true; + } + if (!this.q.line[ARRAY_INDEX_THREE]) { + this.drawLine(this.q.vArray[0], this.q.vArray[ARRAY_INDEX_THREE]); + this.q.line[ARRAY_INDEX_THREE] = true; + } + if (!this.q.line[ARRAY_INDEX_TEN]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_THREE], this.q.vArray[ARRAY_INDEX_SEVEN]); + this.q.line[ARRAY_INDEX_TEN] = true; + } + if (!this.q.line[ARRAY_INDEX_SEVEN]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_SEVEN], this.q.vArray[ARRAY_MAX_COUNT_FOUR]); + this.q.line[ARRAY_INDEX_SEVEN] = true; + } + } + if (curN[ARRAY_INDEX_FIVE][ARRAY_INDEX_TWO] < 0) { + if (!this.q.line[ARRAY_INDEX_EIGHT]) { + this.drawLine(this.q.vArray[1], this.q.vArray[ARRAY_INDEX_FIVE]); + this.q.line[ARRAY_INDEX_EIGHT] = true; + } + if (!this.q.line[ARRAY_INDEX_FIVE]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_FIVE], this.q.vArray[ARRAY_INDEX_SIX]); + this.q.line[ARRAY_INDEX_FIVE] = true; + } + if (!this.q.line[ARRAY_INDEX_NINE]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_SIX], this.q.vArray[ARRAY_INDEX_THREE]); + this.q.line[ARRAY_INDEX_NINE] = true; + } + if (!this.q.line[1]) { + this.drawLine(this.q.vArray[ARRAY_INDEX_THREE], this.q.vArray[1]); + this.q.line[1] = true; + } + } + let message = new WorkerMessage('n-body', -1, 0, 0, 0, 0, 0, 0, 0) + this.workerPort.postMessage(message); + // 绘制所有边 + let edges = [ + [0, 1], [1, 2], [2, 3], [3, 0], + [4, 5], [5, 6], [6, 7], [7, 4], + [0, 4], [1, 5], [2, 6], [3, 7] + ]; + for (let edge of edges) { + this.drawLine2d(this.q.vArray[edge[0]], this.q.vArray[edge[1]]); + } + this.q.line = [false, false, false, false, false, false, false, false, false, false, false, false]; + this.q.lastPx = 0; + } + + loop(): void { + if (this.testing.loopCount > this.testing.loopMax) { + return; + } + let testingStr = String(this.testing.loopCount); + while (testingStr.length < ARRAY_MAX_COUNT_THR) { + testingStr = '0' + testingStr; + } + this.mTrans = this.translate( + this.i, + -this.q.vArray[ARRAY_INDEX_EIGHT].v[0], + -this.q.vArray[ARRAY_INDEX_EIGHT].v[1], + -this.q.vArray[ARRAY_INDEX_EIGHT].v[ARRAY_INDEX_TWO] + ); + this.mTrans = this.rotateX(this.mTrans, 1); + this.mTrans = this.rotateY(this.mTrans, ARRAY_MAX_COUNT_THR); + this.mTrans = this.rotateZ(this.mTrans, ARRAY_INDEX_FIVE); + this.mTrans = this.translate( + this.mTrans, + this.q.vArray[ARRAY_INDEX_EIGHT].v[0], + this.q.vArray[ARRAY_INDEX_EIGHT].v[1], + this.q.vArray[ARRAY_INDEX_EIGHT].v[ARRAY_INDEX_TWO] + ); + this.mQube = this.mMulti(this.mTrans, this.mQube); + for (let i = 8; i >= 0; i--) { + this.q.vArray[i].v = this.vMulti(this.mTrans, this.q.vArray[i].v); + } + this.drawQube(); + this.testing.loopCount += 1; + this.loop(); + } + + q = new Q(); + // transformation matrix + mTrans: number[][] = new Array(); + // position information of qube + mQube: number[][] = new Array(); + // entity matrix + i: number[][] = new Array(); + origin = new Object2(); + testing = new Object1(); + validation = new Map([ + [VALIDATION_TWENTY, VALIDATION_TWENTY_VALUE], + [VALIDATION_FORTY, VALIDATION_FORTY_VALUE], + [VALIDATION_EIGHT, VALIDATION_EIGHT_VALUE], + [VALIDATION_OHS, VALIDATION_OHS_VALUE] + ]); + + create1(cubeSize: number): void { + // init/reset vars + this.origin.v = [QARRAY_ONE_VALUE, QARRAY_ONE_VALUE, VALIDATION_TWENTY, 1]; + this.testing.loopCount = 0; + this.testing.loopMax = 50; + this.testing.timeMax = 0; + this.testing.timeAvg = 0; + this.testing.timeMin = 0; + this.testing.timeTemp = 0; + this.testing.timeTotal = 0; + this.testing.init = false; + // transformation matrix + this.mTrans = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]; + + // position information of qube + this.mQube = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]; + + // entity matrix + this.i = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]; + + // create qube + this.q.vArray[0] = new CreateP(-cubeSize, -cubeSize, cubeSize); + this.q.vArray[1] = new CreateP(-cubeSize, cubeSize, cubeSize); + this.q.vArray[ARRAY_INDEX_TWO] = new CreateP(cubeSize, cubeSize, cubeSize); + this.q.vArray[ARRAY_INDEX_THREE] = new CreateP(cubeSize, -cubeSize, cubeSize); + this.q.vArray[ARRAY_MAX_COUNT_FOUR] = new CreateP(-cubeSize, -cubeSize, -cubeSize); + this.q.vArray[ARRAY_INDEX_FIVE] = new CreateP(-cubeSize, cubeSize, -cubeSize); + this.q.vArray[ARRAY_INDEX_SIX] = new CreateP(cubeSize, cubeSize, -cubeSize); + this.q.vArray[ARRAY_INDEX_SEVEN] = new CreateP(cubeSize, -cubeSize, -cubeSize); + this.q.vArray[ARRAY_INDEX_EIGHT] = new CreateP(0, 0, 0); + } + + create2(cubeSize: number): void { + // anti-clockwise edge check + this.q.edge = [ + [0, 1, ARRAY_INDEX_TWO], + [ARRAY_INDEX_THREE, ARRAY_INDEX_TWO, ARRAY_INDEX_SIX], + [ARRAY_INDEX_SEVEN, ARRAY_INDEX_SIX, ARRAY_INDEX_FIVE], + [ARRAY_MAX_COUNT_FOUR, ARRAY_INDEX_FIVE, 1], + [ARRAY_MAX_COUNT_FOUR, 0, ARRAY_INDEX_THREE], + [1, ARRAY_INDEX_FIVE, ARRAY_INDEX_SIX] + ]; + + for (let i = 0; i < this.q.edge.length; i++) { + this.q.normal[i] = this.calcNormal( + this.q.vArray[this.q.edge[i][0]].v, + this.q.vArray[this.q.edge[i][1]].v, + this.q.vArray[this.q.edge[i][ARRAY_INDEX_TWO]].v + ); + } + this.q.line = [false, false, false, false, false, false, false, false, false, false, false, false]; + this.q.numPx = ARRAY_INDEX_NINE * ARRAY_INDEX_TWO * cubeSize; + for (let i = 0; i < this.q.numPx; i++) { + new CreateP(0, 0, 0); + } + + this.mTrans = this.translate(this.mTrans, this.origin.v[0], this.origin.v[1], this.origin.v[ARRAY_INDEX_TWO]); + this.mQube = this.mMulti(this.mTrans, this.mQube); + + for (let i = 0; i < TIME_COUNT; i++) { + this.q.vArray[i].v = this.vMulti(this.mTrans, this.q.vArray[i].v); + } + + this.drawQube(); + this.testing.init = true; + this.loop(); + } + + creat(cubeSize: number): void { + this.create1(cubeSize); + this.create2(cubeSize); + + // debugLog( + // 'cubeSize is' + + // cubeSize + + // 'this.MTrans value is' + + // this.mTrans[0][0] + + // this.mTrans[0][1] + + // this.mTrans[0][ARRAY_INDEX_TWO] + + // this.mTrans[0][ARRAY_INDEX_THREE] + // ); + // debugLog( + // 'cubeSize is' + + // cubeSize + + // 'this.MQube value is' +r + // this.mQube[0][0] + + // this.mQube[0][1] + + // this.mQube[0][ARRAY_INDEX_TWO] + + // this.mQube[0][ARRAY_INDEX_THREE] + // ); + + // Perform a simple sum-based verification. + let sum: number = 0; + for (let i = 0; i < this.q.vArray.length; i++) { + let vector = this.q.vArray[i].v; + for (let j = 0; j < vector.length; j++) { + sum += vector[j]; + } + } + if (sum !== this.validation.get(cubeSize)) { + console.log("Error: bad vector sum for cubeSize = " + cubeSize + "; expected " + this.validation.get(cubeSize) + + " but got " + sum) + } + } + + runTest(): void { + let i = VALIDATION_TWENTY; + while (i <= VALIDATION_OHS) { + this.creat(i); + i *= ARRAY_INDEX_TWO; + } + } +} + +function run3DCube(workerPort: ThreadWorkerGlobalScope): void { + let cube = new Cube(workerPort); + for (let i = 0; i < ARRAY_INDEX_EIGHT; i++) { + cube.runTest(); + } +} + +export { run3DCube } + diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2BroadPhase.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2BroadPhase.ts index fc1fe55458a18c876ed25ddca4ff8ad5473571e1..250bf2b65b999ef804f8ccdf2c29c1a0499430ea 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2BroadPhase.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2BroadPhase.ts @@ -44,7 +44,6 @@ export class B2BroadPhase implements B2QueryWrapper { public createProxy(aabb: B2AaBb, userData: B2FixtureProxy): number { let proxyId = this.mTree.createProxy(aabb, userData); this.mProxyCount += 1; - console.info('box2d','createProxy:'+proxyId) this.bufferMove(proxyId); return proxyId; } @@ -63,7 +62,6 @@ export class B2BroadPhase implements B2QueryWrapper { } public touchProxy(proxyId: number): void { - console.info('box2d','touchProxy') this.bufferMove(proxyId); } @@ -87,11 +85,10 @@ export class B2BroadPhase implements B2QueryWrapper { public updatePairs(callback: T): void { this.mPairBuffer.splice(0, this.mPairBuffer.length); - console.info('box2d','022') - console.info('box2d mMoveBuffer length:',this.mMoveBuffer.length) + //console.info('box2d mMoveBuffer length:',this.mMoveBuffer.length) for (let i = 0; i < this.mMoveBuffer.length; i++) { this.mQueryProxyId = this.mMoveBuffer[i]; - console.info('box2d','this.mQueryProxyId '+this.mQueryProxyId) + //console.info('box2d','this.mQueryProxyId '+this.mQueryProxyId) if (this.mQueryProxyId === B2BroadPhase.nullProxy) { continue; } @@ -99,16 +96,14 @@ export class B2BroadPhase implements B2QueryWrapper { this.mTree.query(this, fatAaBb); } this.mMoveBuffer.splice(0, this.mMoveBuffer.length); - console.info('box2d','066') this.mPairBuffer.sort((a, b) => { - console.info('box2d','055') if (a.proxyIdA === b.proxyIdA) { return a.proxyIdB - b.proxyIdB; } else { return a.proxyIdA - b.proxyIdA; } }); - console.info('box2d mPairBuffer.length:',this.mPairBuffer.length) + //console.info('box2d mPairBuffer.length:',this.mPairBuffer.length) let i = 0; while (i < this.mPairBuffer.length) { let primaryPair = this.mPairBuffer[i]; @@ -163,11 +158,10 @@ export class B2BroadPhase implements B2QueryWrapper { } public queryCallback(proxyId: number): boolean { - console.info('box2d','queryCallback:'+proxyId+' ,this.mQueryProxyId:'+this.mQueryProxyId) + //console.info('box2d','queryCallback:'+proxyId+' ,this.mQueryProxyId:'+this.mQueryProxyId) if (proxyId === this.mQueryProxyId) { return true; } - console.info('box2d','B2Pair') let pair = new B2Pair(Math.min(proxyId, this.mQueryProxyId), Math.max(proxyId, this.mQueryProxyId)); this.mPairBuffer.push(pair); return true; diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2DynamicTree.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2DynamicTree.ts index ceea3bdfae16d198c2d84bd5804678df2ddff607..0e4706745f67469164829b445e9974bc63a11b13 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2DynamicTree.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/Collision/b2DynamicTree.ts @@ -63,7 +63,6 @@ export class B2DynamicTree { this.mNodes[proxyId].userData = userData; this.mNodes[proxyId].height = 0; this.insertLeaf(proxyId); - console.info('box2d','insertLeaf:'+proxyId) return proxyId; } @@ -111,22 +110,18 @@ export class B2DynamicTree { public query(callback: T, aabb: B2AaBb): void { let stack: number[] = []; stack.push(this.mRoot); - console.info('box2d','query stack '+stack.length) while (stack.length > 0) { let nodeId = stack.pop(); - console.info('box2d','stack nodeId: '+nodeId) if (nodeId === b2NullNode) { continue; } let node = this.mNodes[nodeId!]; - console.info('box2d','stack node: '+node.aabb.lowerBound.x+','+node.aabb.lowerBound.y) - console.info('box2d','stack node: '+node.aabb.upperBound.x+','+node.aabb.upperBound.y) - console.info('box2d','node: '+aabb.lowerBound.x+','+aabb.lowerBound.y) - console.info('box2d','node: '+aabb.upperBound.x+','+aabb.upperBound.y) + //console.info('box2d','stack node: '+node.aabb.lowerBound.x+','+node.aabb.lowerBound.y) + //console.info('box2d','stack node: '+node.aabb.upperBound.x+','+node.aabb.upperBound.y) + //console.info('box2d','node: '+aabb.lowerBound.x+','+aabb.lowerBound.y) + //console.info('box2d','node: '+aabb.upperBound.x+','+aabb.upperBound.y) if (b2TestOverlap2(node.aabb, aabb)) { - console.info('box2d','b2TestOverlap2: '+nodeId) if (node.isLeaf()) { - console.info('box2d','isLeaf: '+nodeId) let proceed = callback.queryCallback(nodeId!); if (proceed === false) { return; diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/Contacts/b2Contact.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/Contacts/b2Contact.ts index de9ce0b8434d31762aa077040fa134c27f62502d..35705c326c9ae4e1669abdd3690048b313829741 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/Contacts/b2Contact.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/Contacts/b2Contact.ts @@ -200,15 +200,11 @@ export class B2Contact { } let type1 = fixtureA!.fixtureType; let type2 = fixtureB!.fixtureType; - console.info('box2d','create:1') let createFcn = StaticVars.sRegisters.getItem(type1!, type2!).createFcn; if (createFcn !== null) { - console.info('box2d','create:2') if (StaticVars.sRegisters.getItem(type1!, type2!).primary) { - console.info('box2d','create:3') return createFcn(fixtureA, indexA, fixtureB, indexB); } else { - console.info('box2d','create:4') return createFcn(fixtureB, indexB, fixtureA, indexA); } } else { diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2ContactManager.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2ContactManager.ts index b860614f0364363f1af0a9fde92bf67dd69cd0f5..99f9bd9281ff24d722e130f7c8e186e5c0658956 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2ContactManager.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2ContactManager.ts @@ -36,7 +36,6 @@ export class B2ContactManager implements B2BroadPhaseWrapper { } public addPair(proxyUserDataA: B2FixtureProxy, proxyUserDataB: B2FixtureProxy): void { - console.info('box2d','900') let proxyA = proxyUserDataA; let proxyB = proxyUserDataB; let fixtureA = proxyA.fixture; @@ -49,7 +48,6 @@ export class B2ContactManager implements B2BroadPhaseWrapper { return; } let edge = bodyB.getContactList(); - console.info('box2d','edge:'+edge) while (edge !== null) { if (edge.other === bodyA) { let fA = edge.contact.fixtureA; @@ -65,20 +63,16 @@ export class B2ContactManager implements B2BroadPhaseWrapper { } edge = edge!.next; } - console.info('box2d','shouldCollide:1') if (bodyB.shouldCollide(bodyA) === false) { return; } - console.info('box2d','shouldCollide:2') if (this.mContactFilter !== null && this.mContactFilter.shouldCollide(fixtureA, fixtureB) === false) { return; } - console.info('box2d','shouldCollide:3') let c = B2Contact.create(fixtureA, indexA, fixtureB, indexB); if (c === null) { return; } - console.info('box2d','shouldCollide:4') fixtureA = c.fixtureA; fixtureB = c.fixtureB; indexA = c.childIndexA; @@ -159,9 +153,7 @@ export class B2ContactManager implements B2BroadPhaseWrapper { collide(): void { let c = this.mContactList; - console.info('box2d','000') while (c !== null) { - console.info('box2d','111') let fixtureA = c.fixtureA; let fixtureB = c.fixtureB; let indexA = c.childIndexA; @@ -169,16 +161,13 @@ export class B2ContactManager implements B2BroadPhaseWrapper { let bodyA = fixtureA.body; let bodyB = fixtureB.body; if ((c.mFlags & FlagContacts.FILTERFLAG) !== 0) { - console.info('box2d','222') if (bodyB.shouldCollide(bodyA) === false) { - console.info('box2d','333') let cNuke = c!; c = cNuke.getNext(); this.destroy(cNuke); continue; } if (this.mContactFilter !== null && this.mContactFilter.shouldCollide(fixtureA, fixtureB) === false) { - console.info('box2d','444') let cNuke = c!; c = cNuke.getNext(); this.destroy(cNuke); @@ -186,26 +175,21 @@ export class B2ContactManager implements B2BroadPhaseWrapper { } c.mFlags &= ~FlagContacts.FILTERFLAG; } - console.info('box2d','555') let activeA = bodyA.isAwake && bodyA.mType !== B2BodyType.STATICBODY; let activeB = bodyB.isAwake && bodyB.mType !== B2BodyType.STATICBODY; if (activeA === false && activeB === false) { - console.info('box2d','666') c = c.getNext(); continue; } - console.info('box2d','777') let proxyIdA = fixtureA.mProxies[indexA].proxyId; let proxyIdB = fixtureB.mProxies[indexB].proxyId; let overlap = this.mBroadPhase.testOverlap(proxyIdA, proxyIdB); if (overlap === false) { - console.info('box2d','888') let cNuke = c!; c = cNuke.getNext(); this.destroy(cNuke); continue; } - console.info('box2d','999') c.update(this.mContactListener!); c = c.getNext(); } diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2World.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2World.ts index 3ed8e57703927b090cc9c7aab3b53780d488cb27..cd081ef7ed4769a524675f2d7a720e5bd82601a0 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2World.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/Dynamics/b2World.ts @@ -151,7 +151,6 @@ export class B2World { public step(dt: number, velocityIterations: number, positionIterations: number): void { if ((this.mFlags & FlagsW.newFixture) !== 0) { - console.info('box2d','011') this.mContactManager.findNewContacts(); this.mFlags &= ~FlagsW.newFixture; } diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d.ts index 53c4c999bf6b5251c7a3cae6cb2132a700b79bb1..967ede3ae9092f22bf7e42974e1a71b30e00f2f0 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d.ts @@ -81,7 +81,7 @@ function drawWorld(world: B2World, workerPort: ThreadWorkerGlobalScope) { drawShape(shape, pos, angle, workerPort); fixtures = fixtures.getNext(); } - console.log('body:' + i.toString() + ' fixture: ' + j.toString()) + //console.log('body:' + i.toString() + ' fixture: ' + j.toString()) bodies = bodies.getNext(); } } diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d1.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d1.ts index b94c993ac1e09cf819b40733bc0ea5e91349f4af..85f2dbfd12931d797c51eb79dbcb50be79bc70a7 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d1.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d1.ts @@ -81,7 +81,7 @@ function drawWorld(world: B2World, workerPort: ThreadWorkerGlobalScope) { drawShape(shape, pos, angle, workerPort); fixtures = fixtures.getNext(); } - console.log('body:' + i.toString() + ' fixture: ' + j.toString()) + //console.log('body:' + i.toString() + ' fixture: ' + j.toString()) bodies = bodies.getNext(); } } diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d2.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d2.ts index 585f1bd2ee45add92c8c2a077b0de68159a37914..fec4f6c956e465eda0e818e26e22fedfece3cd04 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d2.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d2.ts @@ -81,7 +81,7 @@ function drawWorld(world: B2World, workerPort: ThreadWorkerGlobalScope) { drawShape(shape, pos, angle, workerPort); fixtures = fixtures.getNext(); } - console.log('body:' + i.toString() + ' fixture: ' + j.toString()) + //console.log('body:' + i.toString() + ' fixture: ' + j.toString()) bodies = bodies.getNext(); } } diff --git a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d3.ts b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d3.ts index 19af8836afe85c22feeaedeccfe02759000bab67..bd81b01f371231a4a72fdad4e721cc9ff3672146 100644 --- a/OHBM/entry/src/main/ets/cases/performance/box2d/box2d3.ts +++ b/OHBM/entry/src/main/ets/cases/performance/box2d/box2d3.ts @@ -81,7 +81,7 @@ function drawWorld(world: B2World, workerPort: ThreadWorkerGlobalScope) { drawShape(shape, pos, angle, workerPort); fixtures = fixtures.getNext(); } - console.log('body:' + i.toString() + ' fixture: ' + j.toString()) + //console.log('body:' + i.toString() + ' fixture: ' + j.toString()) bodies = bodies.getNext(); } } diff --git a/OHBM/entry/src/main/ets/models/TestItemData.ets b/OHBM/entry/src/main/ets/models/TestItemData.ets index 66492cbc8aaa25d43b492e2cda26315a0f21456a..ebe4e7845ccdd1ecea677e92c41d802ef73eae7c 100644 --- a/OHBM/entry/src/main/ets/models/TestItemData.ets +++ b/OHBM/entry/src/main/ets/models/TestItemData.ets @@ -15,25 +15,17 @@ /** * List item data entity. */ -import { promptAction } from '@kit.ArkUI'; - -type OnItemClick = () => void; export default class TestItemData { - onItemClick: OnItemClick; + url: string; title: string; img: Resource; subTitle: string; - constructor(title: string, img: Resource, subTitle: string, onItemClick: OnItemClick = () => { - promptAction.showToast({ - message: '敬请期待', - duration: 2000 - }); - }) { + constructor(title: string, img: Resource, subTitle: string, url: string = '') { this.title = title; this.img = img; this.subTitle = subTitle; - this.onItemClick = onItemClick; + this.url = url; } } \ No newline at end of file diff --git a/OHBM/entry/src/main/ets/pages/Index.ets b/OHBM/entry/src/main/ets/pages/Index.ets index 5d02d612493a3f7d991afb7035af06fa1ea6ff0b..821c0eaf1bae3fa00b27b801ebcb097461d46d96 100644 --- a/OHBM/entry/src/main/ets/pages/Index.ets +++ b/OHBM/entry/src/main/ets/pages/Index.ets @@ -14,8 +14,6 @@ */ import TestItemData from '../models/TestItemData'; import TestGridItem from '../views/TestGridItem'; -import router from '@ohos.router'; -import { BusinessError } from '@ohos.base'; import TestListItem from '../views/TestListItem'; import HeadBar from '../views/HeadBar'; import { batteryInfo } from '@kit.BasicServicesKit'; @@ -30,24 +28,9 @@ struct Index { private queryHandleId: number = -1; aboutToAppear(): void { - this.items.push(new TestItemData('验机', $r('app.media.rectangle_portrait_rotate'), '基本信息检测', () => { - try { - router.pushUrl({ - url: 'pages/BasicInfo', - }) - } catch (err) { - console.error(`pushUrl failed, code is ${(err as BusinessError).code}, message is ${(err as BusinessError).message}`); - } - })); - this.items.push(new TestItemData('性能评分', $r('app.media.timer'), '综合性能测试', () => { - try { - router.pushUrl({ - url: 'pages/Performance', - }) - } catch (err) { - console.error(`pushUrl failed, code is ${(err as BusinessError).code}, message is ${(err as BusinessError).message}`); - } - })); + this.items.push(new TestItemData('验机', $r('app.media.rectangle_portrait_rotate'), '基本信息检测', + 'pages/BasicInfo')); + this.items.push(new TestItemData('性能评分', $r('app.media.timer'), '综合性能测试', 'pages/Performance')); this.items.push(new TestItemData('存储', $r('app.media.externaldrive'), '读写性能测试')); this.items.push(new TestItemData('传输', $r('app.media.mobiledata'), '网络性能测试')); this.items.push(new TestItemData('屏幕', $r('app.media.hand_tap'), '显示触屏检测')); @@ -58,7 +41,7 @@ struct Index { this.extraItems.push(new TestItemData('定位', $r('app.media.satellite_map'), 'GPS北斗')); this.extraItems.push(new TestItemData('安全', $r('app.media.checkmark_shield'), '系统安全')); this.extraItems.push(new TestItemData('触控', $r('app.media.hand_draw'), '输入输出')); - this.extraItems.push(new TestItemData('图形', $r('app.media.picture_2'), '显示性能测试')); + this.extraItems.push(new TestItemData('游戏', $r('app.media.picture_2'), '游戏专项测试')); this.extraItems.push(new TestItemData('NFC', $r('app.media.nfc'), '近距离通信')); this.extraItems.push(new TestItemData('电池', $r('app.media.battery_75percent'), '电池健康检查')); this.queryHandleId = setInterval(() => { @@ -80,33 +63,27 @@ struct Index { Scroll() { Column() { RelativeContainer() { - Text('开始测评') - .fontSize(42) - .fontColor(Color.White) - .borderRadius(16) - .padding(16) - .backgroundColor(Color.Orange) - .shadow({ - radius: 10, - color: Color.Gray, - offsetX: 20, - offsetY: 20 - }) - .clickEffect({ level: ClickEffectLevel.MIDDLE, scale: 0.8 }) - .alignSelf(ItemAlign.Center) - .alignRules({ - bottom: { anchor: '__container__', align: VerticalAlign.Center }, - middle: { anchor: '__container__', align: HorizontalAlign.Center } - }) - .onClick(() => { - try { - router.pushUrl({ - url: 'pages/Performance', - }) - } catch (err) { - console.error(`pushUrl failed, code is ${(err as BusinessError).code}, message is ${(err as BusinessError).message}`); - } - }) + Navigator({ target: 'pages/Performance', type: NavigationType.Push }) { + Text('开始测评') + .fontSize(42) + .fontColor(Color.White) + .borderRadius(16) + .padding(16) + .backgroundColor(Color.Orange) + .shadow({ + radius: 10, + color: Color.Gray, + offsetX: 20, + offsetY: 20 + }) + .clickEffect({ level: ClickEffectLevel.MIDDLE, scale: 0.8 }) + } + .alignSelf(ItemAlign.Center) + .alignRules({ + bottom: { anchor: '__container__', align: VerticalAlign.Center }, + middle: { anchor: '__container__', align: HorizontalAlign.Center } + }) + Row() { Text('电池温度:' + this.batteryTemp.toString() + ' ℃') .fontSize(16) diff --git a/OHBM/entry/src/main/ets/pages/Performance.ets b/OHBM/entry/src/main/ets/pages/Performance.ets index 9fa44d1462c3b8076f4727ed32c5c4482f2d23a2..789a928f59a14bf2aab9f559a9281cf3a3a3187d 100644 --- a/OHBM/entry/src/main/ets/pages/Performance.ets +++ b/OHBM/entry/src/main/ets/pages/Performance.ets @@ -163,18 +163,20 @@ struct Performance { } initItems() { + this.items.push(new PerformanceTestItemData('3d-cube', + '通过创建和操作3D形变,进行TypeScript在图形处理方面的性能测试')) this.items.push(new PerformanceTestItemData('n-body', '模拟多个物体在相互之间的万有引力作用下的运动,评估物理算法的性能,特别是在模拟大规模天体系统时')) - this.items.push(new PerformanceTestItemData('box2d', + this.items.push(new PerformanceTestItemData('box2d-0', '单个小球自由落体运动测试(Box2D是一个2D物理引擎,用于游戏开发和模拟,评估2D物理模拟的性能,包括碰撞检测、刚体动力学等)')) - this.items.push(new PerformanceTestItemData('box2d1', '5个物体的受力运动测试')) - this.items.push(new PerformanceTestItemData('box2d2', '单个小球抛物线运动测试')) - this.items.push(new PerformanceTestItemData('box2d3', '26个物体的受力运动测试')) + this.items.push(new PerformanceTestItemData('box2d-1', '5个物体的受力运动测试')) + this.items.push(new PerformanceTestItemData('box2d-2', '单个小球抛物线运动测试')) + this.items.push(new PerformanceTestItemData('box2d-3', '26个物体的受力运动测试')) this.items.push(new PerformanceTestItemData('raytrace', '光线追踪是一种用于生成逼真图像的渲染技术,评估渲染算法的性能,特别是在处理复杂光照和阴影效果时')) this.items.push(new PerformanceTestItemData('richards', '并发程序的基准测试,模拟一个任务调度系统,评估操作系统的并发处理能力和调度效率')) - this.items.push(new PerformanceTestItemData('deltablue', + this.items.push(new PerformanceTestItemData('delta-blue', '约束求解算法的实现,用于解决一组约束条件的最优解,评估算法性能和计算效率')) this.items.push(new PerformanceTestItemData('navier-stokes', '纳维-斯托克斯方程是流体动力学中描述流体运动的基本方程,评估流体动力学模拟的性能')) @@ -306,6 +308,12 @@ struct Performance { this.fps++; } break; + case 5: + this.context.beginPath(); + this.context.moveTo(data.vertices_x[0], data.vertices_y[0]); + this.context.lineTo(data.vertices_x[1], data.vertices_y[1]); + this.context.stroke(); + break; default: if (data.name.indexOf('全部完成') !== -1) { if (this.performanceWorker !== undefined) { diff --git a/OHBM/entry/src/main/ets/views/TestGridItem.ets b/OHBM/entry/src/main/ets/views/TestGridItem.ets index e618209bf6b5390636715f015ffeeac994795870..cf91edfa9b46bae0e23a355ccde7b78399e6a49f 100644 --- a/OHBM/entry/src/main/ets/views/TestGridItem.ets +++ b/OHBM/entry/src/main/ets/views/TestGridItem.ets @@ -14,52 +14,63 @@ */ import ItemData from '../models/TestItemData'; +import { promptAction } from '@kit.ArkUI'; /** * List item information component. */ @Component export default struct TestGridItem { - item: ItemData = new ItemData('', $r('app.media.app_icon'), '', () => { - }); + item: ItemData = new ItemData('', $r('app.media.app_icon'), ''); + active: boolean = false; aboutToAppear() { } build() { - Column() { + Navigator({ target: this.item.url, type: NavigationType.Push }) { Column() { - } - .borderRadius(12) - .backgroundImage(this.item.img) - .backgroundImageSize(ImageSize.Cover) - .width(64) - .height(64) - .justifyContent(FlexAlign.SpaceBetween) + Column() { + } + .borderRadius(12) + .backgroundImage(this.item.img) + .backgroundImageSize(ImageSize.Cover) + .width(64) + .height(64) + .justifyContent(FlexAlign.SpaceBetween) - Text(this.item.title) - .fontSize(20) - .maxLines(1) - .textOverflow({ overflow: TextOverflow.MARQUEE }) - .width(120) - .textAlign(TextAlign.Center) - .margin({ top: 4 }) - Text(this.item.subTitle) - .fontSize(16) - .margin(4) - .maxLines(1) - .fontColor(Color.Gray) + Text(this.item.title) + .fontSize(20) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.MARQUEE }) + .width(120) + .textAlign(TextAlign.Center) + .margin({ top: 4 }) + Text(this.item.subTitle) + .fontSize(16) + .margin(4) + .maxLines(1) + .fontColor(Color.Gray) + } + .alignItems(HorizontalAlign.Center) + .clickEffect({ level: ClickEffectLevel.MIDDLE, scale: 0.8 }) + .shadow({ + radius: 2, + color: Color.Gray, + offsetX: 1, + offsetY: 1 + }) } - .alignItems(HorizontalAlign.Center) - .clickEffect({ level: ClickEffectLevel.MIDDLE, scale: 0.8 }) - .shadow({ - radius: 2, - color: Color.Gray, - offsetX: 1, - offsetY: 1 - }) + .active(this.active) .onClick(() => { - this.item.onItemClick(); + if (this.item.url === '') { + promptAction.showToast({ + message: '敬请期待', + duration: 2000 + }); + } else { + this.active = true; + } }) } } \ No newline at end of file diff --git a/OHBM/entry/src/main/ets/views/TestListItem.ets b/OHBM/entry/src/main/ets/views/TestListItem.ets index c6017118a9c4fe02f5be007b1ebcd4cdc0616317..4752500fb1ab53dfb6edd18968bad5768eaef600 100644 --- a/OHBM/entry/src/main/ets/views/TestListItem.ets +++ b/OHBM/entry/src/main/ets/views/TestListItem.ets @@ -14,53 +14,65 @@ */ import ItemData from '../models/TestItemData'; +import { promptAction } from '@kit.ArkUI'; /** * List item information component. */ @Component export default struct TestListItem { - item: ItemData = new ItemData('', $r('app.media.app_icon'), '', () => { - }); + item: ItemData = new ItemData('', $r('app.media.app_icon'), ''); + active: boolean = false; aboutToAppear() { } build() { - Row() { - Column() { - } - .backgroundImage(this.item.img) - .backgroundImageSize(ImageSize.Cover) - .width(32) - .height(32) - .justifyContent(FlexAlign.SpaceBetween) - .margin(8) - - Column() { - Text(this.item.title) - .fontSize(20) - .maxLines(1) - .margin(4) - .textOverflow({ overflow: TextOverflow.MARQUEE }) - Text(this.item.subTitle) - .fontSize(16) - .margin(4) - .fontColor(Color.Gray) - }.alignItems(HorizontalAlign.Start) - Blank() - Image($r('app.media.chevron_down')) - .height(32) + Navigator({ target: this.item.url, type: NavigationType.Push }) { + Row() { + Column() { + } + .backgroundImage(this.item.img) + .backgroundImageSize(ImageSize.Cover) .width(32) + .height(32) + .justifyContent(FlexAlign.SpaceBetween) .margin(8) - .rotate({angle:'-90'}) + + Column() { + Text(this.item.title) + .fontSize(20) + .maxLines(1) + .margin(4) + .textOverflow({ overflow: TextOverflow.MARQUEE }) + Text(this.item.subTitle) + .fontSize(16) + .margin(4) + .fontColor(Color.Gray) + }.alignItems(HorizontalAlign.Start) + + Blank() + Image($r('app.media.chevron_down')) + .height(32) + .width(32) + .margin(8) + .rotate({ angle: '-90' }) + } + .width('100%') + .alignItems(VerticalAlign.Center) + .justifyContent(FlexAlign.SpaceBetween) + .clickEffect({ level: ClickEffectLevel.MIDDLE, scale: 0.8 }) } - .width('100%') - .alignItems(VerticalAlign.Center) - .justifyContent(FlexAlign.SpaceBetween) - .clickEffect({ level: ClickEffectLevel.MIDDLE, scale: 0.8 }) + .active(this.active) .onClick(() => { - this.item.onItemClick(); + if (this.item.url === '') { + promptAction.showToast({ + message: '敬请期待', + duration: 2000 + }); + } else { + this.active = true; + } }) } } \ No newline at end of file diff --git a/OHBM/entry/src/main/ets/workers/PerformanceWorker.ets b/OHBM/entry/src/main/ets/workers/PerformanceWorker.ets index 2d5cf01a6422ade31dc5a83d1aa91e5f7c415b1c..ae2f5d05aec74c02497853f3f4c55aabc2d6f79f 100644 --- a/OHBM/entry/src/main/ets/workers/PerformanceWorker.ets +++ b/OHBM/entry/src/main/ets/workers/PerformanceWorker.ets @@ -15,6 +15,7 @@ import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS'; import { BenchmarkRun, WorkerMessage } from "../cases/BenchmarkMeasure"; +import { run3DCube } from '../cases/performance/3d-cube'; import { Base64Run } from '../cases/performance/base64'; import { runBox2D } from '../cases/performance/box2d/box2d'; import { runBox2D1 } from '../cases/performance/box2d/box2d1'; @@ -32,14 +33,15 @@ import { runZlib } from '../cases/performance/zlib/zlib'; const workerPort: ThreadWorkerGlobalScope = worker.workerPort; const benchmarks: BenchmarkRun[] = [ + new BenchmarkRun('3d-cube', true, true, run3DCube, undefined, undefined, undefined, 5), new BenchmarkRun('n-body', true, true, runNBody, undefined, undefined, undefined, 5), - new BenchmarkRun('box2d', true, true, runBox2D, undefined, undefined, undefined, 10), - new BenchmarkRun('box2d1', true, true, runBox2D1, undefined, undefined, undefined, 5), - new BenchmarkRun('box2d2', true, true, runBox2D2, undefined, undefined, undefined, 10), - new BenchmarkRun('box2d3', true, true, runBox2D3, undefined, undefined, undefined, 3), + new BenchmarkRun('box2d-0', true, true, runBox2D, undefined, undefined, undefined, 10), + new BenchmarkRun('box2d-1', true, true, runBox2D1, undefined, undefined, undefined, 5), + new BenchmarkRun('box2d-2', true, true, runBox2D2, undefined, undefined, undefined, 10), + new BenchmarkRun('box2d-3', true, true, runBox2D3, undefined, undefined, undefined, 3), new BenchmarkRun('raytrace', true, true, RaytraceRun, undefined, undefined, undefined, 20), new BenchmarkRun('richards', true, true, runRichards, undefined, undefined, undefined, 100), - new BenchmarkRun('deltablue', true, true, DeltablueRun, undefined, undefined, undefined, 20), + new BenchmarkRun('delta-blue', true, true, DeltablueRun, undefined, undefined, undefined, 20), new BenchmarkRun('navier-stokes', true, true, NavierstokesRun, NavierStokesSetup, undefined, undefined, 20), new BenchmarkRun('base64', true, true, Base64Run, undefined, undefined, undefined, 10), new BenchmarkRun('crypto-aes', true, true, AESRun, undefined, undefined, undefined, 10),