From bfa895543f4546f4f10657b561e875e76b42822e Mon Sep 17 00:00:00 2001 From: likunhui Date: Wed, 6 Dec 2023 20:27:38 +0800 Subject: [PATCH 1/6] =?UTF-8?q?Benchmark=E7=AE=A1=E7=BA=BF=E7=94=A8?= =?UTF-8?q?=E4=BE=8B=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: likunhui --- .../benchmark_pipeline/Benchmark/.gitignore | 11 + .../Benchmark/AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2041 bytes .../Benchmark/build-profile.json5 | 63 ++++ .../Benchmark/entry/.gitignore | 6 + .../Benchmark/entry/build-profile.json5 | 29 ++ .../Benchmark/entry/hvigorfile.ts | 21 ++ .../Benchmark/entry/oh-package.json5 | 25 ++ .../src/main/ets/entryability/EntryAbility.ts | 58 ++++ .../entry/src/main/ets/pages/Benchmark01.ets | 42 +++ .../entry/src/main/ets/pages/Benchmark02.ets | 60 ++++ .../entry/src/main/ets/pages/Benchmark03.ets | 40 +++ .../entry/src/main/ets/pages/Benchmark04.ets | 50 ++++ .../entry/src/main/ets/pages/Benchmark05.ets | 46 +++ .../entry/src/main/ets/pages/Benchmark052.ets | 39 +++ .../entry/src/main/ets/pages/Benchmark06.ets | 44 +++ .../entry/src/main/ets/pages/Benchmark07.ets | 43 +++ .../entry/src/main/ets/pages/Benchmark08.ets | 61 ++++ .../entry/src/main/ets/pages/Benchmark09.ets | 41 +++ .../entry/src/main/ets/pages/Benchmark10.ets | 51 ++++ .../entry/src/main/ets/pages/Benchmark11.ets | 50 ++++ .../entry/src/main/ets/pages/Benchmark12.ets | 70 +++++ .../entry/src/main/ets/pages/Index.ets | 49 ++++ .../Benchmark/entry/src/main/module.json5 | 52 ++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 ++ .../src/main/resources/base/media/icon.png | Bin 0 -> 2041 bytes .../main/resources/base/media/startIcon.png | Bin 0 -> 4351 bytes .../resources/base/profile/main_pages.json | 18 ++ .../main/resources/en_US/element/string.json | 16 ++ .../main/resources/zh_CN/element/string.json | 16 ++ .../src/ohosTest/ets/test/Ability.test.ets | 59 ++++ .../src/ohosTest/ets/test/Index.test.ets | 268 ++++++++++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 20 ++ .../ohosTest/ets/testability/TestAbility.ets | 65 +++++ .../ohosTest/ets/testability/pages/Index.ets | 32 +++ .../ets/testrunner/OpenHarmonyTestRunner.ts | 62 ++++ .../Benchmark/entry/src/ohosTest/module.json5 | 52 ++++ .../resources/base/element/color.json | 8 + .../resources/base/element/string.json | 16 ++ .../ohosTest/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/test_pages.json | 5 + .../Benchmark/hvigor/hvigor-config.json5 | 33 +++ .../Benchmark/hvigor/hvigor-wrapper.js | 16 ++ .../Benchmark/hvigorfile.ts | 21 ++ .../benchmark_pipeline/Benchmark/hvigorw | 63 ++++ .../benchmark_pipeline/Benchmark/hvigorw.bat | 77 +++++ .../Benchmark/oh-package-lock.json5 | 28 ++ .../Benchmark/oh-package.json5 | 27 ++ .../arkui/benchmark_pipeline/benchmark.bat | 152 ++++++++++ .../arkui/benchmark_pipeline/bytrace.bat | 23 ++ performance/arkui/benchmark_pipeline/test.bat | 15 + .../benchmark_pipeline/traceParseFile.py | 157 ++++++++++ 54 files changed, 2257 insertions(+) create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/.gitignore create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/AppScope/app.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/AppScope/resources/base/element/string.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/AppScope/resources/base/media/app_icon.png create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/.gitignore create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/build-profile.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/hvigorfile.ts create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/oh-package.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/entryability/EntryAbility.ts create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark01.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark02.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark03.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark04.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark05.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark052.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark06.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark07.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark08.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark09.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark10.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark11.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark12.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Index.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/module.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/color.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/media/icon.png create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/media/startIcon.png create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/profile/main_pages.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Index.test.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/TestAbility.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/pages/Index.ets create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/module.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/color.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/string.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/media/icon.png create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/profile/test_pages.json create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/hvigor/hvigor-config.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/hvigor/hvigor-wrapper.js create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/hvigorfile.ts create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/hvigorw create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/hvigorw.bat create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/oh-package-lock.json5 create mode 100644 performance/arkui/benchmark_pipeline/Benchmark/oh-package.json5 create mode 100644 performance/arkui/benchmark_pipeline/benchmark.bat create mode 100644 performance/arkui/benchmark_pipeline/bytrace.bat create mode 100644 performance/arkui/benchmark_pipeline/test.bat create mode 100644 performance/arkui/benchmark_pipeline/traceParseFile.py diff --git a/performance/arkui/benchmark_pipeline/Benchmark/.gitignore b/performance/arkui/benchmark_pipeline/Benchmark/.gitignore new file mode 100644 index 00000000..fbabf771 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/.gitignore @@ -0,0 +1,11 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/AppScope/app.json5 b/performance/arkui/benchmark_pipeline/Benchmark/AppScope/app.json5 new file mode 100644 index 00000000..a05ef489 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "app": { + "bundleName": "com.example.benchmark", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/AppScope/resources/base/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..3c725784 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "Benchmark" + } + ] +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/AppScope/resources/base/media/app_icon.png b/performance/arkui/benchmark_pipeline/Benchmark/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd45accb1dfd2fd0da16c732c72faa6e46b26521 GIT binary patch literal 2041 zcmaJ?c~nzZ9u6@;0AXaYAVN(;Kr(@>EJ+}skOWf=BA~*l4us@ELY9{%0m5QX6pnb} z(jZF|S&pLAS}3BZAfeQSvJ_h>F2Q1PYqi?o5`;m_yjZdG$1v}l_wK#F^L^iMz2}uD z#K$>1dON~kFlWvhW+Jp=tuN9J`ZlM-rl4h+ij|^D0y9;4JOuz-EdVnB6i3R-0ulk9 zApi4zAQA>!N9@-o026$1@L`d124`3G5<@_m`0f)Ug_Ie~;HT2q<_a=HH> zDwTdfD^-cW-|_xWVP$f@93UhDN-#&khZ>jZXLTi~$0`7x3REP6pk%&^2|`c>DutjN zMJD4Zs6Z}{FOpd;*mo2zm(GzXRXiCV;4m3zNCYnu3Fy=i5;2An&Lp!#LP;bRD~1&s z%VH6UY+}r6YDgG+p34OJIZ{BTn&%4s=CT&#TBkuOhdeU@g(w#guoa*b^)73=XyI65 z7Swys6)YS}?1EeZ6b!-I+yCnIya^g0>-NLsLWd8t56GZ_S3r|ZGbR+mV2ErEb9J)X zIF!njY-D-7{qtF2(?nlQ$0}!pzt=}hc*m%%)0Jb#N_K4@IC-`Pi5DahPZN7N9rH;ol;Gc*>-Go@gXKTM{eP)iJj6CYTIi}B#zLKZYD@_;m zrXmXXsFq@~ou-z!9bHoM8*(hwl>X(zm)TDcdkF4lZm$1jP*HbnD`o1$g}_R#+bu2D zr%7Y8KdsaC-V*aem5#@*M%r^GPgu%P2e-BnBClhP2yoGFe40>);=}>{NONtkXQ01p z)OX^t2Ojhddot9eg0WTIVSTNBa}7V-^_pO595w|Hx9q?k4dMp@$G7PK*TD=y;ck6J zdGRB!_RAI2nR3%tO1IkdWp*bw*?<=pM_LZb30?!oK)s;En( z!#nnd9=cXJ<}+e{XLdx(q3&ikJISe?eSHHohk+pz+$6Cv{ytvc{QXmMn2XQ9U8rvt zrJdAn(0gpSD@N=yTrI_2^P#*zQg7MTp1)k(lv(*(KtUR6@M|2WB>2wRwC-h=wk6XF zPtSes*_JwI+^d>xW489MJw5R6=t5?{R zc|E8i?RL@p9)A3ZJAQOg`}+F;<_vnWA!KxR#g%jZ@y_1Qu#Uw)kFPw_xmZ?a^e*1{ zM|ImtqA|(CaDQ@Fyvcof`MN66&VI6m6gAyAXx`%cDx6BI{Bj#}V*Rn1(b~;Am)D2u zX7(027IO?Z2VYK^1vXXpoZ@AtH~N?0rYWwtyA15`6vEf6fk&;o-L;7zFt`5nk*iOy z`<918zB+k;EytI$FAXug)jk*e@e};4e9g__w4A5ev!!)H$yC@{?vsRqJ##X1R%xPG z&_R3oDi$MtTkVqfPj)HEUDx_7wd!y{8#1%$U*Dd0sK@=#6+!XlsE-s^1f5E`R9Wo71^b~mbVdU;Fw0LG~mUQg;xsX4QYRo3B@rH_=ry>DE8ef!c2ta8UcI#26# zF|`*4wtMHe@%#eGZw`#Yj|QWuB`eRD)b~)r9mM95p_JVG%-IdcbIX5qG#GpGD+IrS zEqxb1Rg&Dadk5#7t4j68I1f!@A$efp1?I%&d*56)yl!tkz!14<$0Od_&6cGw$WW0r zjSlQA7l*6;vgfhv!cR|RmAD$+w6j`rVf=-?-D@q>kOseUVSb*~jbAS^*1h?ZL)n(9 zDa}`4etXO6`}9;{k5E^N{rcfnV_(LPwsDg``wtyS*V<19c3!PGJ3Kqy9ksvkwbJ%Z z*N(fT0{e*Wji-Ck5!3YE0j|PZ@&z`v=kitWL$bqSt!e4bH!+(|Q)CZ30^nVPfkx{s zX{6of`p=BiPb@u@IyL!tRk>?qgBqCmo-Zlt!636g?z`s~zdfwuB7DXZHvV`Usp+%Z zo*&;Biu@MHE&2j+?j^o`Cr12u<>vOe=a&8a2hlcmFjJiDR>XnD4c4DAhZWCkiAgW{ E51q9-lK=n! literal 0 HcmV?d00001 diff --git a/performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 b/performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 new file mode 100644 index 00000000..506885bd --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "app": { + "signingConfigs": [ + { + "name": "default", + "type": "HarmonyOS", + "material": { + "certpath": "C:\\Users\\LeeiOS\\.ohos\\config\\auto_debug_Benchmark_com.example.benchmark_2850086000500386127.cer", + "storePassword": "0000001AD47D8F3679B14E19F2972F64B45479899ACACDB677B4AD601EE1CED1375C4197BB07F2748340", + "keyAlias": "debugKey", + "keyPassword": "0000001AE49AAAB9D1A52CC4E23AE43E196F1D0263B5B74A63D4A134AE84760A59A314D5D9666E43C1AB", + "profile": "C:\\Users\\LeeiOS\\.ohos\\config\\auto_debug_Benchmark_com.example.benchmark_2850086000500386127.p7b", + "signAlg": "SHA256withECDSA", + "storeFile": "C:\\Users\\LeeiOS\\.ohos\\config\\auto_debug_Benchmark_com.example.benchmark_2850086000500386127.p12" + } + } + ], + "compileSdkVersion": 9, + "compatibleSdkVersion": 9, + "products": [ + { + "name": "default", + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/.gitignore b/performance/arkui/benchmark_pipeline/Benchmark/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/build-profile.json5 b/performance/arkui/benchmark_pipeline/Benchmark/entry/build-profile.json5 new file mode 100644 index 00000000..71f45498 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/build-profile.json5 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "targets": [ + { + "name": "default", + "runtimeOS": "HarmonyOS" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/hvigorfile.ts b/performance/arkui/benchmark_pipeline/Benchmark/entry/hvigorfile.ts new file mode 100644 index 00000000..b25e77c7 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/oh-package.json5 b/performance/arkui/benchmark_pipeline/Benchmark/entry/oh-package.json5 new file mode 100644 index 00000000..3fbe67bb --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "license": "", + "devDependencies": {}, + "author": "", + "name": "entry", + "description": "Please describe the basic information.", + "main": "", + "version": "1.0.0", + "dependencies": {} +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/entryability/EntryAbility.ts b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/entryability/EntryAbility.ts new file mode 100644 index 00000000..9e89fa34 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/entryability/EntryAbility.ts @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 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 AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import hilog from '@ohos.hilog'; +import UIAbility from '@ohos.app.ability.UIAbility'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark01.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark01.ets new file mode 100644 index 00000000..dc0debdc --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark01.ets @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Benchmark01 { + numArray: number[] = [] + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + if (index == 0) { + Button(`Button-${number + 1}`) + .onClick(() => { + console.log('click the first button') + }) + .id('first_btn') + } else { + Button(`Button-${number + 1}`) + } + }, (num: number) => num.toString()) + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark02.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark02.ets new file mode 100644 index 00000000..9a83676d --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark02.ets @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 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. + */ + +@Component +struct BenchmarkComponent02 { + + title: string = '' + clickAction: () => void = Function + idMark: string = '' + + build() { + if (this.idMark.length > 0) { + Button(this.title) + .onClick(this.clickAction) + .id(this.idMark) + } else { + Button(this.title) + } + } +} + + + +@Entry +@Component +struct Benchmark02 { + numArray: number[] = [] + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + if (index == 0) { + BenchmarkComponent02({idMark: 'first_btn', title: `Button-${number + 1}`, clickAction: () => { + console.log('click the first button') + }}) + } else { + BenchmarkComponent02({title: `Button-${number + 1}`}) + } + }, (num: number) => num.toString()) + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark03.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark03.ets new file mode 100644 index 00000000..7c5537ca --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark03.ets @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Benchmark03 { + + @Builder + createColumn(loop: number) { + if (loop <= 100) { + Column() { + this.createColumn(loop + 1) + }.width('100%').height('100%') + } else if (loop == 101) { + Button('This is a button') + .onClick(() => { + console.log('click the button') + }) + .id('only_btn') + } + } + + build() { + Column() { + this.createColumn(2) + }.width('100%').height('100%') + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark04.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark04.ets new file mode 100644 index 00000000..51d183a9 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark04.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 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. + */ + +@Component +struct BenchmarkComponent04 { + @BuilderParam buildInder: () => void + + build() { + Column() { + this.buildInder() + }.width('100%').height('100%') + } +} + +@Entry +@Component +struct Benchmark04 { + @Builder + createColumn(loop: number) { + if (loop <= 100) { + BenchmarkComponent04() { + this.createColumn(loop + 1) + } + } else if (loop == 101) { + Button('This is a button') + .onClick(() => { + console.log('click the button') + }) + .id('only_btn') + } + } + + build() { + Column() { + this.createColumn(1) + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark05.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark05.ets new file mode 100644 index 00000000..7b1f98a3 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark05.ets @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 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 router from '@ohos.router'; + +@Entry +@Component +struct Benchmark05 { + numList: number[] = [] + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numList.push(index); + } + } + + build() { + Column() { + ForEach(this.numList, (number: number, index: number) => { + Image($r('app.media.startIcon')).width(88).height(88) + .id(`id_${index}`) + .onClick(() => { + router.pushUrl({url: 'pages/Benchmark052'}) + }) + }, (num: number) => num.toString()) + } + } + + pageTransition() { + PageTransitionEnter({ type: RouteType.None, duration: 0 }) // 页面显示不需要转场动画 + PageTransitionExit({ duration: 1000 }).translate({x: 100, y: 100}).opacity(0) // 跳转时页面消失转场动画 + } + +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark052.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark052.ets new file mode 100644 index 00000000..32f8878e --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark052.ets @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Benchmark052 { + numList: number[] = [] + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numList.push(index); + } + } + + build() { + Column() { + ForEach(this.numList, (number: number) => { + Image($r('app.media.startIcon')).width(88).height(88) + }, (num: number) => num.toString()) + } + } + + pageTransition() { + PageTransitionEnter({ duration: 1000 }).slide(SlideEffect.Left) // 跳转到此页面时的转场动画 + PageTransitionExit({type: RouteType.None, duration: 0}) // 此页面消失不需要动画 + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark06.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark06.ets new file mode 100644 index 00000000..ad90a752 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark06.ets @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Benchmark06 { + @State flag: boolean = false + numList: number[] = [] + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numList.push(index); + } + + setTimeout(() => { + animateTo({duration: 1500}, () => { + this.flag = true + }) + }, 500) + } + + build() { + Column() { + if (this.flag) { + ForEach(this.numList, (number: number, index: number) => { + Image($r('app.media.startIcon')).width(88).height(88) + .transition({type: TransitionType.Insert, scale: {x: 0.3, y: 0.3}, rotate: {x: 0, y: 0, z: 1, angle: 360}}) + }, (num: number) => num.toString()) + } + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark07.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark07.ets new file mode 100644 index 00000000..a96a2865 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark07.ets @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Benchmark07 { + numArray: number[] = [] + @State btnTitle: string = '' + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + if (index == 0) { + Button(this.btnTitle.length > 0 ? this.btnTitle : `Button-${number + 1}`) + .onClick(() => { + this.btnTitle = 'Button change title' + }) + .id('first_btn') + } else { + Button(this.btnTitle.length > 0 ? this.btnTitle : `Button-${number + 1}`) + } + }, (num: number) => num.toString()) + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark08.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark08.ets new file mode 100644 index 00000000..89aea730 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark08.ets @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 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. + */ + +@Component +struct BenchmarkComponent08 { + + @Prop title: string = '' + clickAction: () => void = Function + idMark: string = '' + + build() { + if (this.idMark.length > 0) { + Button(this.title) + .onClick(this.clickAction) + .id(this.idMark) + } else { + Button(this.title) + } + } +} + + + +@Entry +@Component +struct Benchmark08 { + numArray: number[] = [] + @State btnTitle: string = '' + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + if (index == 0) { + BenchmarkComponent08({idMark: 'first_btn', title: this.btnTitle.length > 0 ? this.btnTitle : `Button-${number + 1}`, clickAction: () => { + this.btnTitle = 'Button change title' + }}) + } else { + BenchmarkComponent08({title: this.btnTitle.length > 0 ? this.btnTitle : `Button-${number + 1}`}) + } + }, (num: number) => num.toString()) + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark09.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark09.ets new file mode 100644 index 00000000..d4dc77fa --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark09.ets @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Benchmark09 { + numArray: number[] = [] + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Scroll() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + Button(`Button-${number + 1}`) + .onVisibleAreaChange([0.0, 1.0], (isVisible: boolean, currentRatio: number) => { + console.log(`isVisible=${isVisible}, currentRatio=${currentRatio}`) + }) + }, (num: number) => num.toString()) + } + } + .width('100%').height('100%') + .id('scroll_benchmark09') + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark10.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark10.ets new file mode 100644 index 00000000..9719da6d --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark10.ets @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 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. + */ + +@Component +struct BenchmarkComponent10 { + title: string = '' + + build() { + Button(this.title) + } +} + + +@Entry +@Component +struct Benchmark10 { + numArray: number[] = [] + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Scroll() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + BenchmarkComponent10({ title: `Button-${number + 1}` }) + .onVisibleAreaChange([0.0, 1.0], (isVisible: boolean, currentRatio: number) => { + console.log(`isVisible=${isVisible}, currentRatio=${currentRatio}`) + }) + }, (num: number) => num.toString()) + } + } + .width('100%').height('100%') + .id('scroll_benchmark10') + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark11.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark11.ets new file mode 100644 index 00000000..6cad09ba --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark11.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Benchmark11 { + numArray: number[] = [] + @State btnWidth: number = 100 + @State btnHeight: number = 45 + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + if (index == 0) { + Button(`Button-${number + 1}`) + .onClick(() => { + this.btnWidth = 180 + this.btnHeight = 65 + }) + .id('first_btn') + .width(this.btnWidth).height(this.btnHeight) + .onAreaChange((oldValue: Area, newValue: Area) => { + console.log(`old-width-height=${oldValue.width}-${oldValue.height}====new-width-height=${newValue.width}-${newValue.height}`) + }) + } else { + Button(`Button-${number + 1}`) + .width(this.btnWidth).height(this.btnHeight) + } + }, (num: number) => num.toString()) + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark12.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark12.ets new file mode 100644 index 00000000..225582b6 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Benchmark12.ets @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 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. + */ + +@Component +struct BenchmarkComponent12 { + + title: string = '' + clickAction: () => void = Function + idMark: string = '' + + build() { + if (this.idMark.length > 0) { + Button(this.title) + .width('100%').height('100%') + .onClick(this.clickAction) + .id(this.idMark) + } else { + Button(this.title) + .width('100%').height('100%') + } + } +} + + + +@Entry +@Component +struct Benchmark12 { + numArray: number[] = [] + @State btnWidth: number = 100 + @State btnHeight: number = 45 + + aboutToAppear() { + for (let index = 0; index < 100; index++) { + this.numArray.push(index); + } + } + + build() { + Column() { + ForEach(this.numArray, (number: number, index: number) => { + if (index == 0) { + BenchmarkComponent12({idMark: 'first_btn', title: `Button-${number + 1}`, clickAction: () => { + this.btnWidth = 180 + this.btnHeight = 65 + }}) + .width(this.btnWidth).height(this.btnHeight) + .onAreaChange((oldValue: Area, newValue: Area) => { + console.log(`old-width-height=${oldValue.width}-${oldValue.height}====new-width-height=${newValue.width}-${newValue.height}`) + }) + } else { + BenchmarkComponent12({title: `Button-${number + 1}`}) + .width(this.btnWidth).height(this.btnHeight) + } + }, (num: number) => num.toString()) + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Index.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..a103b458 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 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 router from '@ohos.router'; + +@Entry +@Component +struct Index { + buttons: string[] = [ + 'benchmark01', + 'benchmark02', + 'benchmark03', + 'benchmark04', + 'benchmark05', + 'benchmark06', + 'benchmark07', + 'benchmark08', + 'benchmark09', + 'benchmark10', + 'benchmark11', + 'benchmark12' + ] + + build() { + Column() { + ForEach(this.buttons, (item: string) => { + Button(item).onClick((event: ClickEvent) => { + let capitalized = item.charAt(0).toUpperCase() + item.slice(1) + let page = `pages/${capitalized}` + router.pushUrl({url: page}) + }).id(item) + }, (item: string) => item) + } + .width('100%').height('100%') + + } +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/module.json5 b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/module.json5 new file mode 100644 index 00000000..45c56e7f --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/module.json5 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ts", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/color.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..f9459551 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/media/icon.png b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd45accb1dfd2fd0da16c732c72faa6e46b26521 GIT binary patch literal 2041 zcmaJ?c~nzZ9u6@;0AXaYAVN(;Kr(@>EJ+}skOWf=BA~*l4us@ELY9{%0m5QX6pnb} z(jZF|S&pLAS}3BZAfeQSvJ_h>F2Q1PYqi?o5`;m_yjZdG$1v}l_wK#F^L^iMz2}uD z#K$>1dON~kFlWvhW+Jp=tuN9J`ZlM-rl4h+ij|^D0y9;4JOuz-EdVnB6i3R-0ulk9 zApi4zAQA>!N9@-o026$1@L`d124`3G5<@_m`0f)Ug_Ie~;HT2q<_a=HH> zDwTdfD^-cW-|_xWVP$f@93UhDN-#&khZ>jZXLTi~$0`7x3REP6pk%&^2|`c>DutjN zMJD4Zs6Z}{FOpd;*mo2zm(GzXRXiCV;4m3zNCYnu3Fy=i5;2An&Lp!#LP;bRD~1&s z%VH6UY+}r6YDgG+p34OJIZ{BTn&%4s=CT&#TBkuOhdeU@g(w#guoa*b^)73=XyI65 z7Swys6)YS}?1EeZ6b!-I+yCnIya^g0>-NLsLWd8t56GZ_S3r|ZGbR+mV2ErEb9J)X zIF!njY-D-7{qtF2(?nlQ$0}!pzt=}hc*m%%)0Jb#N_K4@IC-`Pi5DahPZN7N9rH;ol;Gc*>-Go@gXKTM{eP)iJj6CYTIi}B#zLKZYD@_;m zrXmXXsFq@~ou-z!9bHoM8*(hwl>X(zm)TDcdkF4lZm$1jP*HbnD`o1$g}_R#+bu2D zr%7Y8KdsaC-V*aem5#@*M%r^GPgu%P2e-BnBClhP2yoGFe40>);=}>{NONtkXQ01p z)OX^t2Ojhddot9eg0WTIVSTNBa}7V-^_pO595w|Hx9q?k4dMp@$G7PK*TD=y;ck6J zdGRB!_RAI2nR3%tO1IkdWp*bw*?<=pM_LZb30?!oK)s;En( z!#nnd9=cXJ<}+e{XLdx(q3&ikJISe?eSHHohk+pz+$6Cv{ytvc{QXmMn2XQ9U8rvt zrJdAn(0gpSD@N=yTrI_2^P#*zQg7MTp1)k(lv(*(KtUR6@M|2WB>2wRwC-h=wk6XF zPtSes*_JwI+^d>xW489MJw5R6=t5?{R zc|E8i?RL@p9)A3ZJAQOg`}+F;<_vnWA!KxR#g%jZ@y_1Qu#Uw)kFPw_xmZ?a^e*1{ zM|ImtqA|(CaDQ@Fyvcof`MN66&VI6m6gAyAXx`%cDx6BI{Bj#}V*Rn1(b~;Am)D2u zX7(027IO?Z2VYK^1vXXpoZ@AtH~N?0rYWwtyA15`6vEf6fk&;o-L;7zFt`5nk*iOy z`<918zB+k;EytI$FAXug)jk*e@e};4e9g__w4A5ev!!)H$yC@{?vsRqJ##X1R%xPG z&_R3oDi$MtTkVqfPj)HEUDx_7wd!y{8#1%$U*Dd0sK@=#6+!XlsE-s^1f5E`R9Wo71^b~mbVdU;Fw0LG~mUQg;xsX4QYRo3B@rH_=ry>DE8ef!c2ta8UcI#26# zF|`*4wtMHe@%#eGZw`#Yj|QWuB`eRD)b~)r9mM95p_JVG%-IdcbIX5qG#GpGD+IrS zEqxb1Rg&Dadk5#7t4j68I1f!@A$efp1?I%&d*56)yl!tkz!14<$0Od_&6cGw$WW0r zjSlQA7l*6;vgfhv!cR|RmAD$+w6j`rVf=-?-D@q>kOseUVSb*~jbAS^*1h?ZL)n(9 zDa}`4etXO6`}9;{k5E^N{rcfnV_(LPwsDg``wtyS*V<19c3!PGJ3Kqy9ksvkwbJ%Z z*N(fT0{e*Wji-Ck5!3YE0j|PZ@&z`v=kitWL$bqSt!e4bH!+(|Q)CZ30^nVPfkx{s zX{6of`p=BiPb@u@IyL!tRk>?qgBqCmo-Zlt!636g?z`s~zdfwuB7DXZHvV`Usp+%Z zo*&;Biu@MHE&2j+?j^o`Cr12u<>vOe=a&8a2hlcmFjJiDR>XnD4c4DAhZWCkiAgW{ E51q9-lK=n! literal 0 HcmV?d00001 diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/media/startIcon.png b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..366f76459ffd4494ec40d0ddd5c59385b9c5da11 GIT binary patch literal 4351 zcmaJ_c{r5o`$trELZWDz?8}%L>x?yK$i9!UFJmyqEM`W=l13t1vK18?bc9Hft+FQB zvZWA7vQ{XHEY)wEb2{JOAK&wRuj_rE=e@7{{@mN=ey`_xlk9BF_<1CG*x1mL!?jn!jg+b4^2 zLetRJR&Wf70P@|_0nrI$mNgrjo*|v=i@{@Q06%OXj;Ie@ebfR3;QaN0E}GV0YqAM8 z2zNS?f_03val%C6F))9ip#eaT4rc)nuryx)oe)B#!s+_JKXKu#{hnA22>4TlhSvxF z6%^Xq4q!r}U;$bnuqp-&)&gk5KoBhrZB2C*02B;`sDYts5KUDG1g;5%L(~C(UqF^O zihlsy0b%;LFV>qrFo;GY!`0Nn!^1)0>L3y&Pz?fu!S*nqP*s+ODm8*g^QEg2sV9FU zAh1*n1xKdgNJPLMqOTt*jHVA{Mfz6?1oA(yMC#vVViin{?n_pKfWUhx{Z_QL{@IO$Y>u zG)8KgAdz6ODcJawj)s=$Z(9Tj6Gp%iX}@j#|6_aVUv2l;Kp?X`Bd`?Q8LYo4g+u`S znKc~u@3CnAE8gF>{{J3}&cE8Kv4T+S#R^=}c2KzrMNn9F+khx=F}i|`Z{v!A;f zo3N&hY>qhPM1TFslQ-4LMdIhmr+ckEAWLQ}$bjCZe0XSBNyEsx@W>%w{_Hv}emPB) zOoHjD5ZtXSIb=|>s7#{F^~74>>3x2~*)FrfZ3hTsJmWQo0UC^b(hgMVUGey}I^`OR zJu^iexYqb9XYyKaUsL!%^ul|?UlF^%LWN}fh@4X2Rg}O2Ak&BgV5c-mSXIKwizyZg z4==`Py(>jdxzBp%%;~5u$Tt=5dv;+WT!=c;CU*OKQJKjx>TF2)F~Oe8RnB6fwWc@b z!di|+3AbqpJ7Si&73MeA5bym8cH?nt(nHrZfh7&(7PBdB*^ZImdWIkIIHY)et}Nx& zblijem4{wLlw~;&cMyb5cvf2)L9~_HT@?Z?=N7AKv6|Os(I8_tW#eFNHD<1^c}I;` ze`oNUY*9%Bf)|0f*mqE29%aG1lbrjM#5I$uoXqYLOw9jomV!J@Xk&#TAabV$+24tm z%H~Q-){JyQ(8|AaBsU5s(WlaDntP&L-(@BS)g=abYiVOgo4n@xuLOLw7PECNs&c8X zcwcld=-N(L#G8tfPqE9w&XHlCM#I=|fW5EW2r~l9OtZ;+*72g%&8q>n^)v{<5$$qC zS`cyd;Vp#C{-(XT`IPA(9SXq5_bZrwOP=4Ql6$7=O@vx zwW+izY#rZyMiRBv<5Z?U6B)i`tu(2=rD9Nno;lIQ-6(;5;l@2=(_yI`m_!#al`e41 zw7MI-5P8} ze0z>I-!^9QY7rQaQ^KKm>3KY4(bj(3LsDc=K+MjSjI%Q0 z(+=n;1sbNCI2KNrav{KzX#3a4B*la+I{(n;z{(WfIqn;HXfUoq5FbW zc{#XGMWo){qAt}Ta8&7bU}!;X@hJmZJOW-m;Ry`t8Fw7-^MTE%1b=QWlVEpaviS$O>DtWh z(PeqYhK#;(Or1UxqWlx}GvMbL3i-{9%0q$X)rShg;Cq*=UHPhfFK~)yQu8S%u3jI0 zXa{&ZIeyl`QV#n4i`8^*F|Ua8#MHYgnXkjUJ)zU7hE-wZ7p|{n9mH8do<=S z&BlzCvJr@4o*-?(9=gMLYlt4pn?L{#cw z>g^T^7wlws;bEb0?E;wF({$x7DHvZRBjlrfHqeS1WM#A|*iZ5fix;Gv2ARk+BMA?C z&RdGvN%)|~I5lp)>L+Abh+z(F=OvgLVOEAM)WmI`htv(5DL?km(X1J_xP+oN?(sVA zZ(h^BB{Ye(h4tiQshpe(Tt57)^v29cUx2de28vU>QQrOi$MzM^1gp^CfEuwBuI%!V zKipRCiwwG^)JMT5GWTXps${t!P0QlOn}9$hSW7u)HFevNU~s!oc(C@2&**_ODAV$@ z@*!{D#(8+*1v40rdvu82NH9~)*-4=#YP6kDZbe~@O&@hK*fqRhh#B7?cRJl93s!uI zd$HZw=ecl{(s_F(pRCORFA>_zK=vGLhAIJP7giSF5U(1y7v?+BFC&mY`q}NM(F*E_ zO+V4esPBCBE@La%M>?SMW+0Cj-b5PD)A+~=SSTb^y)D?fvibbS*#JhMR$54=_-D6O z={SjR-Q#yIK2I5IV8A`5t5sXy@-OSHe@&arq_0a);W=0{8P=e6uq*b>3I&Y(F`Aj}@y zKnKJ9xdz8d%dO4{E>!4jbw3$t{*ZbEyLD0>`!SED72;`Hsa3$K<1Cfa7|^0|X~xVk%&sS|#S{KfJOYz6q-M!qY` z+)WxSIX`42MlEplojlQ(T-~1aE_pNU{4ehSi;BW;sp3%}QP*w5=OZ?p5P6WzS9UBS zLw3VaH{Ver>WU!p>e$Dfp=R~3M;KpUa#$W(IdsNmcPWm z_WG8J;=@yp#wSmMn7L2BviDw*M{1)B22X2qtW^%WMG)-nih2&F5AJv1RhWO!8_#RE zz0;<|v$SO=GGgk+z6FHKOl`pDtTPrPD%UkKINz9I5%@BW$;A8;Bn;ibJPu&O~sBZFQewfjqZ8of% znY3?5KcI8|c%rA96`;H$S8>M{G2rp&``kF_`$@W znJEtXUEg`=h&$@gYgOjNQzv=Uk}&Ls(m6u%F4L`YyePS3oL4jqq0<~BnXmrUq_SE|?M~j!BdLw~HoaTstBb7=HK+WcPWE@_ cIQZCt9|&h0`tm_w@0Wx*(gtzY*ysHJ0mylrOaK4? literal 0 HcmV?d00001 diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/profile/main_pages.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..ca36dcbb --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,18 @@ +{ + "src": [ + "pages/Index", + "pages/Benchmark01", + "pages/Benchmark02", + "pages/Benchmark03", + "pages/Benchmark04", + "pages/Benchmark05", + "pages/Benchmark052", + "pages/Benchmark06", + "pages/Benchmark07", + "pages/Benchmark08", + "pages/Benchmark09", + "pages/Benchmark10", + "pages/Benchmark11", + "pages/Benchmark12" + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json new file mode 100644 index 00000000..f9459551 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json new file mode 100644 index 00000000..597ecf95 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "模块描述" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Ability.test.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..00b25c9b --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 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 hilog from '@ohos.hilog'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + + /** + * @tc.desc : AssertContain + * @tc.name : AssertContain + * @tc.number: AssertContain + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Index.test.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Index.test.ets new file mode 100644 index 00000000..26606a13 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/Index.test.ets @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2023 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 { describe, it, expect } from '@ohos/hypium' +import abilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry' +import Want from '@ohos.app.ability.Want' +import { Driver, ON } from '@ohos.UiTest' + +// 启动APP +async function startApp() { + let want: Want = { + bundleName: abilityDelegatorRegistry.getArguments().bundleName, + abilityName: 'EntryAbility' + } + await abilityDelegatorRegistry.getAbilityDelegator().startAbility(want) +} + +// 通用测试case +async function commonTestCase(pageBtnId: string, compId: string) { + // 启动App + await startApp() + // 创建驱动器 + let driver = Driver.create() + await driver.delayMs(5000) // 延迟1s + // 点击跳转用例页面 + let bk = await driver.findComponent(ON.id(pageBtnId)) + await bk.click() + // 跳转页面耗时 + await driver.delayMs(1000) + // 如果是benchmark09和benchmark10,滑动到底部 + if (pageBtnId === 'benchmark09' || pageBtnId === 'benchmark10') { + let scroll = await driver.findComponent(ON.id(`scroll_${pageBtnId}`)) + await scroll.scrollToBottom(40000) + } + // 寻找操作组件 + if (compId.length > 0) { + let firstBtn = await driver.findComponent(ON.id(compId)) + await firstBtn.click() + } + // **当前页面跳转or显示有转场动画时间or按钮点击事件处理,需要延迟** + await driver.delayMs(2000) +} + +export default function IndexTest() { + describe('IndexTest', () => { + + /** + * @tc.desc : Benchmark case that click the button + * @tc.name : benchmark01_click_button + * @tc.number: Benchmark01 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark01_click_button', 0, async () => { + await commonTestCase('benchmark01', 'first_btn') // 用例1-点击某一按钮 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that start app + * @tc.name : benchmark01_click_button + * @tc.number: Benchmark01_0-6 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark01_start_app', 0, async () => { + await commonTestCase('benchmark01', '') // 用例5、9-启动应用 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that click the button + * @tc.name : benchmark02_click_button + * @tc.number: Benchmark02 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark02_click_button', 0, async () => { + await commonTestCase('benchmark02', 'first_btn') // 用例2-点击某一按钮 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that start app + * @tc.name : benchmark02_start_app + * @tc.number: Benchmark06_10-15 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark02_start_app', 0, async () => { + await commonTestCase('benchmark02', '') // 用例6、10、15-启动应用 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that click the button + * @tc.name : benchmark03_click_button + * @tc.number: Benchmark03 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark03_click_button', 0, async () => { + await commonTestCase('benchmark03', 'only_btn') // 用例3-点击button + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that start app + * @tc.name : benchmark03_start_app + * @tc.number: Benchmark07_11 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark03_start_app', 0, async () => { + await commonTestCase('benchmark03', '') // 用例7、11-启动应用 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that click the button + * @tc.name : benchmark04_click_button + * @tc.number: Benchmark04 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark04_click_button', 0, async () => { + await commonTestCase('benchmark04', 'only_btn') // 用例4-点击button + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that start app + * @tc.name : benchmark04_start_app + * @tc.number: Benchmark08_12 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark04_start_app', 0, async () => { + await commonTestCase('benchmark04', '') // 用例8、12-启动应用 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that push page + * @tc.name : benchmark05_push_page + * @tc.number: Benchmark13 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it("benchmark05_push_page", 0, async () => { + await commonTestCase('benchmark05', 'id_0') // 用例13-页面1跳转页面2(有页面转场动画) + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that start app + * @tc.name : benchmark06_start_app + * @tc.number: Benchmark14 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark06_start_app', 0, async () => { + await commonTestCase('benchmark06', '') // 用例14-启动应用 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that change the title of button + * @tc.name : benchmark07_change_title + * @tc.number: Benchmark15 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark07_change_title', 0, async () => { + await commonTestCase('benchmark07', 'first_btn') // 用例15-点击button改变button文字 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that change the title of button + * @tc.name : benchmark08_change_title + * @tc.number: Benchmark16 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark08_change_title', 0, async () => { + await commonTestCase('benchmark08', 'first_btn') // 用例16-点击button改变button文字 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that scroll to bottom + * @tc.name : benchmark09_change_visible + * @tc.number: Benchmark17 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it("benchmark09_change_visible", 0, async () => { + await commonTestCase('benchmark09', '') // 用例17-滑动到底部 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that scroll to bottom + * @tc.name : benchmark10_change_visible + * @tc.number: Benchmark18 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark10_change_visible', 0, async () => { + await commonTestCase('benchmark10', '') // 用例18-滑动到底部 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that change the size of button + * @tc.name : benchmark11_change_size + * @tc.number: Benchmark19 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark11_change_size', 0, async () => { + await commonTestCase('benchmark11', 'first_btn') // 用例19-点击button改变button宽高 + expect(1).assertEqual(1) // 断言 + }) + + /** + * @tc.desc : Benchmark case that change the size of button + * @tc.name : benchmark12_change_size + * @tc.number: Benchmark20 + * @tc.level : Level 2 + * @tc.size : MediumTest + * @tc.type : Function + */ + it('benchmark12_change_size', 0, async () => { + await commonTestCase('benchmark12', 'first_btn') // 用例20-点击button改变button宽高 + expect(1).assertEqual(1) // 断言 + }) + + }) +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/List.test.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..3e3c9f5f --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 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 IndexTest from './Index.test' + +export default function testsuite() { + IndexTest() +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/TestAbility.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/TestAbility.ets new file mode 100644 index 00000000..1092165b --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/TestAbility.ets @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 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 UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; +import hilog from '@ohos.hilog'; +import { Hypium } from '@ohos/hypium'; +import testsuite from '../test/List.test'; +import window from '@ohos.window'; +import Want from '@ohos.app.ability.Want'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; + +export default class TestAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); + hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); + hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:' + JSON.stringify(launchParam) ?? ''); + let abilityDelegator: AbilityDelegatorRegistry.AbilityDelegator; + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); + let abilityDelegatorArguments: AbilityDelegatorRegistry.AbilityDelegatorArgs; + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments(); + hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite); + } + + onDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage) { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageCreate'); + windowStage.loadContent('testability/pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', + JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); + } + + onForeground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); + } + + onBackground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/pages/Index.ets b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/pages/Index.ets new file mode 100644 index 00000000..86b9aec1 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testability/pages/Index.ets @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 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. + */ + +@Entry +@Component +struct Index { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts new file mode 100644 index 00000000..b8065f0b --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 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 hilog from '@ohos.hilog'; +import TestRunner from '@ohos.application.testRunner'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; +import Want from '@ohos.app.ability.Want'; + +let abilityDelegator: AbilityDelegatorRegistry.AbilityDelegator | undefined = undefined +let abilityDelegatorArguments: AbilityDelegatorRegistry.AbilityDelegatorArgs | undefined = undefined + +async function onAbilityCreateCallback() { + hilog.info(0x0000, 'testTag', '%{public}s', 'onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err : Error) { + hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare '); + } + + async onRun() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun run'); + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + const bundleName = abilityDelegatorArguments.bundleName; + const testAbilityName = 'TestAbility'; + let lMonitor: AbilityDelegatorRegistry.AbilityMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + const want: Want = { + bundleName: bundleName, + abilityName: testAbilityName + }; + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); + abilityDelegator.startAbility(want, (err, data) => { + hilog.info(0x0000, 'testTag', 'startAbility : err : %{public}s', JSON.stringify(err) ?? ''); + hilog.info(0x0000, 'testTag', 'startAbility : data : %{public}s',JSON.stringify(data) ?? ''); + }) + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun end'); + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/module.json5 b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..aef2b62c --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/module.json5 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "description": "$string:module_test_desc", + "mainElement": "TestAbility", + "deviceTypes": [ + "phone", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:test_pages", + "abilities": [ + { + "name": "TestAbility", + "srcEntry": "./ets/testability/TestAbility.ets", + "description": "$string:TestAbility_desc", + "icon": "$media:icon", + "label": "$string:TestAbility_label", + "exported": true, + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ] + } + ] + } +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/color.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/string.json new file mode 100644 index 00000000..65d8fa5a --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_test_desc", + "value": "test ability description" + }, + { + "name": "TestAbility_desc", + "value": "the test ability" + }, + { + "name": "TestAbility_label", + "value": "test label" + } + ] +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/media/icon.png b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/ohosTest/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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.default.createHash(u);u.hash=(D,e)=>(0,u.createHash)(e).update(D).digest("hex");u.hashFile=(D,e)=>{if(i.default.existsSync(D))return(0,u.hash)(i.default.readFileSync(D,"utf-8"),e)}}(v);var g={},m={},R={};Object.defineProperty(R,"__esModule",{value:!0}),R.Unicode=void 0;class y{}R.Unicode=y,y.SPACE_SEPARATOR=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,y.ID_START=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,y.ID_CONTINUE=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/,Object.defineProperty(m,"__esModule",{value:!0}),m.JudgeUtil=void 0;const I=R;m.JudgeUtil=class{static isIgnoreChar(u){return"string"==typeof u&&("\t"===u||"\v"===u||"\f"===u||" "===u||" "===u||"\ufeff"===u||"\n"===u||"\r"===u||"\u2028"===u||"\u2029"===u)}static isSpaceSeparator(u){return"string"==typeof u&&I.Unicode.SPACE_SEPARATOR.test(u)}static isIdStartChar(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||I.Unicode.ID_START.test(u))}static isIdContinueChar(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||I.Unicode.ID_CONTINUE.test(u))}static isDigitWithoutZero(u){return/[1-9]/.test(u)}static isDigit(u){return"string"==typeof u&&/[0-9]/.test(u)}static isHexDigit(u){return"string"==typeof u&&/[0-9A-Fa-f]/.test(u)}};var N=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(g,"__esModule",{value:!0}),g.parseJsonText=g.parseJsonFile=void 0;const b=N(e),S=N(D),w=N(u),H=m;var x;!function(u){u[u.Char=0]="Char",u[u.EOF=1]="EOF",u[u.Identifier=2]="Identifier"}(x||(x={}));let M,T,V,G,j,J,W="start",U=[],L=0,$=1,k=0,K=!1,z="default",q="'",Z=1;function X(u,D=!1){T=String(u),W="start",U=[],L=0,$=1,k=0,G=void 0,K=D;do{M=Q(),nu[W]()}while("eof"!==M.type);return G}function Q(){for(z="default",j="",q="'",Z=1;;){J=Y();const u=Du[z]();if(u)return u}}function Y(){if(T[L])return String.fromCodePoint(T.codePointAt(L))}function uu(){const u=Y();return"\n"===u?($++,k=0):u?k+=u.length:k++,u&&(L+=u.length),u}g.parseJsonFile=function(u,D=!1,e="utf-8"){const t=b.default.readFileSync(w.default.resolve(u),{encoding:e});try{return X(t,D)}catch(D){if(D instanceof SyntaxError){const e=D.message.split("at");if(2===e.length)throw new Error(`${e[0].trim()}${S.default.EOL}\t at ${u}:${e[1].trim()}`)}throw new Error(`${u} is not in valid JSON/JSON5 format.`)}},g.parseJsonText=X;const Du={default(){switch(J){case"/":return uu(),void(z="comment");case void 0:return uu(),eu("eof")}if(!H.JudgeUtil.isIgnoreChar(J)&&!H.JudgeUtil.isSpaceSeparator(J))return Du[W]();uu()},start(){z="value"},beforePropertyName(){switch(J){case"$":case"_":return j=uu(),void(z="identifierName");case"\\":return uu(),void(z="identifierNameStartEscape");case"}":return eu("punctuator",uu());case'"':case"'":return q=J,uu(),void(z="string")}if(H.JudgeUtil.isIdStartChar(J))return j+=uu(),void(z="identifierName");throw Eu(x.Char,uu())},afterPropertyName(){if(":"===J)return eu("punctuator",uu());throw Eu(x.Char,uu())},beforePropertyValue(){z="value"},afterPropertyValue(){switch(J){case",":case"}":return eu("punctuator",uu())}throw Eu(x.Char,uu())},beforeArrayValue(){if("]"===J)return eu("punctuator",uu());z="value"},afterArrayValue(){switch(J){case",":case"]":return eu("punctuator",uu())}throw Eu(x.Char,uu())},end(){throw Eu(x.Char,uu())},comment(){switch(J){case"*":return uu(),void(z="multiLineComment");case"/":return uu(),void(z="singleLineComment")}throw Eu(x.Char,uu())},multiLineComment(){switch(J){case"*":return uu(),void(z="multiLineCommentAsterisk");case void 0:throw Eu(x.Char,uu())}uu()},multiLineCommentAsterisk(){switch(J){case"*":return void uu();case"/":return uu(),void(z="default");case void 0:throw Eu(x.Char,uu())}uu(),z="multiLineComment"},singleLineComment(){switch(J){case"\n":case"\r":case"\u2028":case"\u2029":return uu(),void(z="default");case void 0:return uu(),eu("eof")}uu()},value(){switch(J){case"{":case"[":return eu("punctuator",uu());case"n":return uu(),tu("ull"),eu("null",null);case"t":return uu(),tu("rue"),eu("boolean",!0);case"f":return uu(),tu("alse"),eu("boolean",!1);case"-":case"+":return"-"===uu()&&(Z=-1),void(z="numerical");case".":case"0":case"I":case"N":return void(z="numerical");case'"':case"'":return q=J,uu(),j="",void(z="string")}if(void 0===J||!H.JudgeUtil.isDigitWithoutZero(J))throw Eu(x.Char,uu());z="numerical"},numerical(){switch(J){case".":return j=uu(),void(z="decimalPointLeading");case"0":return j=uu(),void(z="zero");case"I":return uu(),tu("nfinity"),eu("numeric",Z*(1/0));case"N":return uu(),tu("aN"),eu("numeric",NaN)}if(void 0!==J&&H.JudgeUtil.isDigitWithoutZero(J))return j=uu(),void(z="decimalInteger");throw Eu(x.Char,uu())},zero(){switch(J){case".":case"e":case"E":return void(z="decimal");case"x":case"X":return j+=uu(),void(z="hexadecimal")}return eu("numeric",0)},decimalInteger(){switch(J){case".":case"e":case"E":return void(z="decimal")}if(!H.JudgeUtil.isDigit(J))return eu("numeric",Z*Number(j));j+=uu()},decimal(){switch(J){case".":j+=uu(),z="decimalFraction";break;case"e":case"E":j+=uu(),z="decimalExponent"}},decimalPointLeading(){if(H.JudgeUtil.isDigit(J))return j+=uu(),void(z="decimalFraction");throw Eu(x.Char,uu())},decimalFraction(){switch(J){case"e":case"E":return j+=uu(),void(z="decimalExponent")}if(!H.JudgeUtil.isDigit(J))return eu("numeric",Z*Number(j));j+=uu()},decimalExponent(){switch(J){case"+":case"-":return j+=uu(),void(z="decimalExponentSign")}if(H.JudgeUtil.isDigit(J))return j+=uu(),void(z="decimalExponentInteger");throw Eu(x.Char,uu())},decimalExponentSign(){if(H.JudgeUtil.isDigit(J))return j+=uu(),void(z="decimalExponentInteger");throw Eu(x.Char,uu())},decimalExponentInteger(){if(!H.JudgeUtil.isDigit(J))return eu("numeric",Z*Number(j));j+=uu()},hexadecimal(){if(H.JudgeUtil.isHexDigit(J))return j+=uu(),void(z="hexadecimalInteger");throw Eu(x.Char,uu())},hexadecimalInteger(){if(!H.JudgeUtil.isHexDigit(J))return eu("numeric",Z*Number(j));j+=uu()},identifierNameStartEscape(){if("u"!==J)throw Eu(x.Char,uu());uu();const u=ru();switch(u){case"$":case"_":break;default:if(!H.JudgeUtil.isIdStartChar(u))throw Eu(x.Identifier)}j+=u,z="identifierName"},identifierName(){switch(J){case"$":case"_":case"‌":case"‍":return void(j+=uu());case"\\":return uu(),void(z="identifierNameEscape")}if(!H.JudgeUtil.isIdContinueChar(J))return eu("identifier",j);j+=uu()},identifierNameEscape(){if("u"!==J)throw Eu(x.Char,uu());uu();const u=ru();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!H.JudgeUtil.isIdContinueChar(u))throw Eu(x.Identifier)}j+=u,z="identifierName"},string(){switch(J){case"\\":return uu(),void(j+=function(){const u=Y(),D=function(){switch(Y()){case"b":return uu(),"\b";case"f":return uu(),"\f";case"n":return uu(),"\n";case"r":return uu(),"\r";case"t":return uu(),"\t";case"v":return uu(),"\v"}return}();if(D)return D;switch(u){case"0":if(uu(),H.JudgeUtil.isDigit(Y()))throw Eu(x.Char,uu());return"\0";case"x":return uu(),function(){let u="",D=Y();if(!H.JudgeUtil.isHexDigit(D))throw Eu(x.Char,uu());if(u+=uu(),D=Y(),!H.JudgeUtil.isHexDigit(D))throw Eu(x.Char,uu());return u+=uu(),String.fromCodePoint(parseInt(u,16))}();case"u":return uu(),ru();case"\n":case"\u2028":case"\u2029":return uu(),"";case"\r":return uu(),"\n"===Y()&&uu(),""}if(void 0===u||H.JudgeUtil.isDigitWithoutZero(u))throw Eu(x.Char,uu());return uu()}());case'"':case"'":if(J===q){const u=eu("string",j);return uu(),u}return void(j+=uu());case"\n":case"\r":case void 0:throw Eu(x.Char,uu());case"\u2028":case"\u2029":!function(u){console.warn(`JSON5: '${Fu(u)}' in strings is not valid ECMAScript; consider escaping.`)}(J)}j+=uu()}};function eu(u,D){return{type:u,value:D,line:$,column:k}}function tu(u){for(const D of u){if(Y()!==D)throw Eu(x.Char,uu());uu()}}function ru(){let u="",D=4;for(;D-- >0;){const D=Y();if(!H.JudgeUtil.isHexDigit(D))throw Eu(x.Char,uu());u+=uu()}return String.fromCodePoint(parseInt(u,16))}const nu={start(){if("eof"===M.type)throw Eu(x.EOF);iu()},beforePropertyName(){switch(M.type){case"identifier":case"string":return V=M.value,void(W="afterPropertyName");case"punctuator":return void Cu();case"eof":throw Eu(x.EOF)}},afterPropertyName(){if("eof"===M.type)throw Eu(x.EOF);W="beforePropertyValue"},beforePropertyValue(){if("eof"===M.type)throw Eu(x.EOF);iu()},afterPropertyValue(){if("eof"===M.type)throw Eu(x.EOF);switch(M.value){case",":return void(W="beforePropertyName");case"}":Cu()}},beforeArrayValue(){if("eof"===M.type)throw Eu(x.EOF);"punctuator"!==M.type||"]"!==M.value?iu():Cu()},afterArrayValue(){if("eof"===M.type)throw Eu(x.EOF);switch(M.value){case",":return void(W="beforeArrayValue");case"]":Cu()}},end(){}};function iu(){const u=function(){let u;switch(M.type){case"punctuator":switch(M.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=M.value}return u}();if(K&&"object"==typeof u&&(u._line=$,u._column=k),void 0===G)G=u;else{const D=U[U.length-1];Array.isArray(D)?K&&"object"!=typeof u?D.push({value:u,_line:$,_column:k}):D.push(u):D[V]=K&&"object"!=typeof u?{value:u,_line:$,_column:k}:u}!function(u){if(u&&"object"==typeof u)U.push(u),W=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{const u=U[U.length-1];W=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}}(u)}function Cu(){U.pop();const u=U[U.length-1];W=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}function Fu(u){const D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){const D=u.charCodeAt(0).toString(16);return`\\x${`00${D}`.substring(D.length)}`}return u}function Eu(u,D){let e="";switch(u){case x.Char:e=void 0===D?`JSON5: invalid end of input at ${$}:${k}`:`JSON5: invalid character '${Fu(D)}' at ${$}:${k}`;break;case x.EOF:e=`JSON5: invalid end of input at ${$}:${k}`;break;case x.Identifier:k-=5,e=`JSON5: invalid identifier character at ${$}:${k}`}const t=new Au(e);return t.lineNumber=$,t.columnNumber=k,t}class Au extends SyntaxError{}var ou={},au=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),cu=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),su=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&au(D,u,e);return cu(D,u),D},lu=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(ou,"__esModule",{value:!0}),ou.isFileExists=ou.offlinePluginConversion=ou.executeCommand=ou.getNpmPath=ou.hasNpmPackInPaths=void 0;const Bu=r,du=lu(e),fu=su(u),_u=i,pu=l;ou.hasNpmPackInPaths=function(u,D){try{return require.resolve(u,{paths:[...D]}),!0}catch(u){return!1}},ou.getNpmPath=function(){const u=process.execPath;return fu.join(fu.dirname(u),_u.NPM_TOOL)},ou.executeCommand=function(u,D,e){0!==(0,Bu.spawnSync)(u,D,e).status&&(0,pu.logErrorAndExit)(`Error: ${u} ${D} execute failed.See above for details.`)},ou.offlinePluginConversion=function(u,D){return D.startsWith("file:")||D.endsWith(".tgz")?fu.resolve(u,_u.HVIGOR,D.replace("file:","")):D},ou.isFileExists=function(u){return du.default.existsSync(u)&&du.default.statSync(u).isFile()};var Ou=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),hu=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),Pu=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&Ou(D,u,e);return hu(D,u),D},vu=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(P,"__esModule",{value:!0});var gu=P.initProjectWorkSpace=void 0;const mu=Pu(e),Ru=vu(D),yu=Pu(u),Iu=v,Nu=i,bu=g,Su=l,wu=ou;let Hu,xu,Mu;function Tu(u,D,e){return void 0!==e.dependencies&&(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,D.dependencies[u])===yu.normalize(e.dependencies[u])}function Vu(){const u=yu.join(Mu,Nu.WORK_SPACE);if((0,Su.logInfoPrintConsole)("Hvigor cleaning..."),!mu.existsSync(u))return;const D=mu.readdirSync(u);if(!D||0===D.length)return;const e=yu.resolve(Mu,"node_modules","@ohos","hvigor","bin","hvigor.js");mu.existsSync(e)&&(0,wu.executeCommand)(process.argv[0],[e,"--stop-daemon"],{});try{D.forEach((D=>{mu.rmSync(yu.resolve(u,D),{recursive:!0})}))}catch(D){(0,Su.logErrorAndExit)(`The hvigor build tool cannot be installed. Please manually clear the workspace directory and synchronize the project again.\n\n Workspace Path: ${u}.`)}}gu=P.initProjectWorkSpace=function(){if(Hu=function(){const u=yu.resolve(Nu.HVIGOR_PROJECT_WRAPPER_HOME,Nu.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME);mu.existsSync(u)||(0,Su.logErrorAndExit)(`Error: Hvigor config file ${u} does not exist.`);return(0,bu.parseJsonFile)(u)}(),Mu=function(u){let D;D=function(u){let D=u.hvigorVersion;if(D.startsWith("file:")||D.endsWith(".tgz"))return!1;const e=u.dependencies,t=Object.getOwnPropertyNames(e);for(const u of t){const D=e[u];if(D.startsWith("file:")||D.endsWith(".tgz"))return!1}if(1===t.length&&"@ohos/hvigor-ohos-plugin"===t[0])return D>"2.5.0";return!1}(u)?function(u){let D=`${Nu.HVIGOR_ENGINE_PACKAGE_NAME}@${u.hvigorVersion}`;const e=u.dependencies;if(e){Object.getOwnPropertyNames(e).sort().forEach((u=>{D+=`,${u}@${e[u]}`}))}return(0,Iu.hash)(D)}(u):(0,Iu.hash)(process.cwd());return yu.resolve(Ru.default.homedir(),".hvigor","project_caches",D)}(Hu),xu=function(){const u=yu.resolve(Mu,Nu.WORK_SPACE,Nu.DEFAULT_PACKAGE_JSON);return mu.existsSync(u)?(0,bu.parseJsonFile)(u):{dependencies:{}}}(),!(0,wu.hasNpmPackInPaths)(Nu.HVIGOR_ENGINE_PACKAGE_NAME,[yu.join(Mu,Nu.WORK_SPACE)])||(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion)!==xu.dependencies[Nu.HVIGOR_ENGINE_PACKAGE_NAME]||!function(){function u(u){const D=null==u?void 0:u.dependencies;return void 0===D?0:Object.getOwnPropertyNames(D).length}const D=u(Hu),e=u(xu);if(D+1!==e)return!1;for(const u in null==Hu?void 0:Hu.dependencies)if(!(0,wu.hasNpmPackInPaths)(u,[yu.join(Mu,Nu.WORK_SPACE)])||!Tu(u,Hu,xu))return!1;return!0}()){Vu();try{!function(){(0,Su.logInfoPrintConsole)("Hvigor installing...");for(const u in Hu.dependencies)Hu.dependencies[u]&&(Hu.dependencies[u]=(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,Hu.dependencies[u]));const u={dependencies:{...Hu.dependencies}};u.dependencies[Nu.HVIGOR_ENGINE_PACKAGE_NAME]=(0,wu.offlinePluginConversion)(Nu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion);const D=yu.join(Mu,Nu.WORK_SPACE);try{mu.mkdirSync(D,{recursive:!0});const e=yu.resolve(D,Nu.DEFAULT_PACKAGE_JSON);mu.writeFileSync(e,JSON.stringify(u))}catch(u){(0,Su.logErrorAndExit)(u)}(function(){const u=["config","set","store-dir",Nu.HVIGOR_PNPM_STORE_PATH],D={cwd:yu.join(Mu,Nu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,wu.executeCommand)(Nu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)})(),function(){const u=["install"],D={cwd:yu.join(Mu,Nu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,wu.executeCommand)(Nu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)}(),(0,Su.logInfoPrintConsole)("Hvigor install success.")}()}catch(u){Vu()}}return Mu};var Gu={};!function(t){var C=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),F=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),E=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&C(D,u,e);return F(D,u),D},A=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(t,"__esModule",{value:!0}),t.executeInstallPnpm=t.isPnpmInstalled=t.environmentHandler=t.checkNpmConifg=t.PNPM_VERSION=void 0;const o=r,a=E(e),c=A(D),s=E(u),B=i,d=l,f=ou;t.PNPM_VERSION="7.30.0",t.checkNpmConifg=function(){const u=s.resolve(B.HVIGOR_PROJECT_ROOT_DIR,".npmrc"),D=s.resolve(c.default.homedir(),".npmrc");if((0,f.isFileExists)(u)||(0,f.isFileExists)(D))return;const e=(0,f.getNpmPath)(),t=(0,o.spawnSync)(e,["config","get","prefix"],{cwd:B.HVIGOR_PROJECT_ROOT_DIR});if(0!==t.status||!t.stdout)return void(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.");const r=s.resolve(`${t.stdout}`.replace(/[\r\n]/gi,""),".npmrc");(0,f.isFileExists)(r)||(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.")},t.environmentHandler=function(){process.env["npm_config_update-notifier"]="false"},t.isPnpmInstalled=function(){return!!a.existsSync(B.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH)&&(0,f.hasNpmPackInPaths)("pnpm",[B.HVIGOR_WRAPPER_TOOLS_HOME])},t.executeInstallPnpm=function(){(0,d.logInfoPrintConsole)(`Installing pnpm@${t.PNPM_VERSION}...`);const u=(0,f.getNpmPath)();!function(){const u=s.resolve(B.HVIGOR_WRAPPER_TOOLS_HOME,B.DEFAULT_PACKAGE_JSON);try{a.existsSync(B.HVIGOR_WRAPPER_TOOLS_HOME)||a.mkdirSync(B.HVIGOR_WRAPPER_TOOLS_HOME,{recursive:!0});const D={dependencies:{}};D.dependencies[B.PNPM]=t.PNPM_VERSION,a.writeFileSync(u,JSON.stringify(D))}catch(D){(0,d.logErrorAndExit)(`Error: EPERM: operation not permitted,create ${u} failed.`)}}(),(0,f.executeCommand)(u,["install","pnpm"],{cwd:B.HVIGOR_WRAPPER_TOOLS_HOME,stdio:["inherit","inherit","inherit"],env:process.env}),(0,d.logInfoPrintConsole)("Pnpm install success.")}}(Gu),function(){Gu.checkNpmConifg(),Gu.environmentHandler(),Gu.isPnpmInstalled()||Gu.executeInstallPnpm();const D=gu();_(u.join(D,i.WORK_SPACE))}(); \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/hvigorfile.ts b/performance/arkui/benchmark_pipeline/Benchmark/hvigorfile.ts new file mode 100644 index 00000000..2a4a8343 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 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 { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/performance/arkui/benchmark_pipeline/Benchmark/hvigorw b/performance/arkui/benchmark_pipeline/Benchmark/hvigorw new file mode 100644 index 00000000..daf5da7d --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/hvigorw @@ -0,0 +1,63 @@ +#!/bin/bash + +# ---------------------------------------------------------------------------- +# Copyright (c) 2023 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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Hvigor startup script, version 1.0.0 +# +# Required ENV vars: +# ------------------ +# NODE_HOME - location of a Node home dir +# or +# Add /usr/local/nodejs/bin to the PATH environment variable +# ---------------------------------------------------------------------------- + +HVIGOR_APP_HOME="`pwd -P`" +HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js +warn() { + echo "" + echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" +} + +error() { + echo "" + echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" +} + +fail() { + error "$@" + exit 1 +} + +# Determine node to start hvigor wrapper script +if [ -n "${NODE_HOME}" ];then + EXECUTABLE_NODE="${NODE_HOME}/bin/node" + if [ ! -x "$EXECUTABLE_NODE" ];then + fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed" + fi +else + EXECUTABLE_NODE="node" + which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path" +fi + +# Check hvigor wrapper script +if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then + fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}" +fi + +# start hvigor-wrapper script +exec "${EXECUTABLE_NODE}" \ + "${HVIGOR_WRAPPER_SCRIPT}" "$@" diff --git a/performance/arkui/benchmark_pipeline/Benchmark/hvigorw.bat b/performance/arkui/benchmark_pipeline/Benchmark/hvigorw.bat new file mode 100644 index 00000000..3c6a9de8 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/hvigorw.bat @@ -0,0 +1,77 @@ +:: Copyright (c) 2023 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. + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Hvigor startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +set WRAPPER_MODULE_PATH=%APP_HOME%\hvigor\hvigor-wrapper.js +set NODE_EXE=node.exe + +goto start + +:start +@rem Find node.exe +if defined NODE_HOME goto findNodeFromNodeHome + +%NODE_EXE% --version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. +echo. +echo Please set the NODE_HOME variable in your environment to match the +echo location of your NodeJs installation. + +goto fail + +:findNodeFromNodeHome +set NODE_HOME=%NODE_HOME:"=% +set NODE_EXE_PATH=%NODE_HOME%/%NODE_EXE% + +if exist "%NODE_EXE_PATH%" goto execute +echo. +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. +echo. +echo Please set the NODE_HOME variable in your environment to match the +echo location of your NodeJs installation. + +goto fail + +:execute +@rem Execute hvigor +"%NODE_EXE%" "%WRAPPER_MODULE_PATH%" %* + +if "%ERRORLEVEL%" == "0" goto hvigorwEnd + +:fail +exit /b 1 + +:hvigorwEnd +if "%OS%" == "Windows_NT" endlocal + +:end diff --git a/performance/arkui/benchmark_pipeline/Benchmark/oh-package-lock.json5 b/performance/arkui/benchmark_pipeline/Benchmark/oh-package-lock.json5 new file mode 100644 index 00000000..5ef54cfd --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/oh-package-lock.json5 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "lockfileVersion": 1, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hypium@1.0.11": "@ohos/hypium@1.0.11" + }, + "packages": { + "@ohos/hypium@1.0.11": { + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hypium/-/hypium-1.0.11.tgz", + "integrity": "sha512-KawcLnv43C3QIYv1UbDnKCFX3MohtDxGuFvzlUxT/qf2DBilR56Ws6zrj90LdH6PjloJQwOPESuBQIHBACAK7w==" + } + } +} \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/oh-package.json5 b/performance/arkui/benchmark_pipeline/Benchmark/oh-package.json5 new file mode 100644 index 00000000..b5021851 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/Benchmark/oh-package.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 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. + */ + +{ + "license": "", + "devDependencies": { + "@ohos/hypium": "1.0.11" + }, + "author": "", + "name": "benchmark", + "description": "Please describe the basic information.", + "main": "", + "version": "1.0.0", + "dependencies": {} +} diff --git a/performance/arkui/benchmark_pipeline/benchmark.bat b/performance/arkui/benchmark_pipeline/benchmark.bat new file mode 100644 index 00000000..baff670d --- /dev/null +++ b/performance/arkui/benchmark_pipeline/benchmark.bat @@ -0,0 +1,152 @@ +:: Copyright (c) 2023 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. + +@echo off + +:: +set testname=test +set tagname=tag +set rownum=0 + +:: +echo Benchmarkģ +echo 1Columnа100buttonijһbuttonDispatchTouchEvent +echo 2Columnа100buttonʹԶijһbuttonDispatchTouchEvent +echo 3Ƕ100ColumnײΪbuttonbuttonDispatchTouchEvent +echo 4Ƕ100ColumnʹԶײΪbuttonbuttonDispatchTouchEvent +echo ------------------ +echo 5Columnа100buttonӦáFlushLayoutTask +echo 6Columnа100buttonʹԶӦáFlushLayoutTask +echo 7Ƕ100ColumnײΪbuttonӦáFlushLayoutTask +echo 8Ƕ100ColumnʹԶײΪbuttonӦáFlushLayoutTask +echo ------------------ +echo 9Columnа100buttonӦáFlushMessages +echo 10Columnа100buttonʹԶӦáFlushMessages +echo 11Ƕ100ColumnײΪbuttonӦáFlushMessages +echo 12Ƕ100ColumnʹԶײΪbuttonӦáFlushMessages +echo ------------------ +echo 13ҳ棬ֱ100imageҳ֮תתҳ1תҳ2FlushAnimation +echo ------------------ +echo 14ϰ100imageimagešѡЧӦáFlushRenderTask +echo ------------------ +echo 15Columnа100buttonbuttonıbutton֡FlushDirtyNodeUpdate +echo 16Columnа100buttonʹԶbuttonıbutton֡FlushDirtyNodeUpdate +echo ------------------ +echo 17Columnа100buttonbuttonΪɼHandleVisibleAreaChangeEvent +echo 18Columnа100buttonʹԶbuttonΪɼHandleVisibleAreaChangeEvent +echo ------------------ +echo 19Columnа100buttonbuttonıbuttonߡHandleOnAreaChangeEvent +echo 20Columnа100buttonʹԶbuttonıbuttonߡHandleOnAreaChangeEvent + + + +echo ------------------ +echo ------------------ +set /P mode=Benchmarkģţ + +set rownum=%mode% + +if %mode% equ 1 ( +set testname=benchmark01_click_button +set tagname=DispatchTouchEvent +) else if %mode% equ 2 ( +set testname=benchmark02_click_button +set tagname=DispatchTouchEvent +) else if %mode% equ 3 ( +set testname=benchmark03_click_button +set tagname=DispatchTouchEvent +) else if %mode% equ 4 ( +set testname=benchmark04_click_button +set tagname=DispatchTouchEvent +) else if %mode% equ 5 ( +set testname=benchmark01_start_app +set tagname=FlushLayoutTask +) else if %mode% equ 6 ( +set testname=benchmark02_start_app +set tagname=FlushLayoutTask +) else if %mode% equ 7 ( +set testname=benchmark03_start_app +set tagname=FlushLayoutTask +) else if %mode% equ 8 ( +set testname=benchmark04_start_app +set tagname=FlushLayoutTask +) else if %mode% equ 9 ( +set testname=benchmark01_start_app +set tagname=FlushMessages +) else if %mode% equ 10 ( +set testname=benchmark02_start_app +set tagname=FlushMessages +) else if %mode% equ 11 ( +set testname=benchmark03_start_app +set tagname=FlushMessages +) else if %mode% equ 12 ( +set testname=benchmark04_start_app +set tagname=FlushMessages +) else if %mode% equ 13 ( +set testname=benchmark05_push_page +set tagname=FlushAnimation +) else if %mode% equ 14 ( +set testname=benchmark06_start_app +set tagname=FlushRenderTask +) else if %mode% equ 15 ( +set testname=benchmark07_change_title +set tagname=FlushDirtyNodeUpdate +) else if %mode% equ 16 ( +set testname=benchmark08_change_title +set tagname=FlushDirtyNodeUpdate +) else if %mode% equ 17 ( +set testname=benchmark09_change_visible +set tagname=HandleVisibleAreaChangeEvent +) else if %mode% equ 18 ( +set testname=benchmark10_change_visible +set tagname=HandleVisibleAreaChangeEvent +) else if %mode% equ 19 ( +set testname=benchmark11_change_size +set tagname=HandleOnAreaChangeEvent +) else if %mode% equ 20 ( +set testname=benchmark12_change_size +set tagname=HandleOnAreaChangeEvent +) + +@echo on + +echo testname=%testname% +echo tagname=%tagname% +echo rownum=%rownum% + + +::ȡ +set ymd=%date:~0,4%%date:~5,2%%date:~8,2% +for /f "tokens=* delims=" %%a in ("%ymd%") do set ymd=%%a +::ȡСʱ9ǰ0 +if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%) +::ȡʱ +set minseco=%time:~3,2%%time:~6,2% +set hms=%hour%%minseco% +for /f "tokens=* delims=" %%a in ("%hms%") do set hms=%%a +::_ʱΪtraceļ +set tracefolder=trace_%ymd% +set filename=%testname%_%ymd%_%hms%.ftrace +if not exist %tracefolder% (mkdir %tracefolder%) +::Ļ600ǹر +hdc shell power-shell setmode 602 +::жٰװ +hdc app uninstall com.example.benchmark +hdc install Benchmark\entry\build\default\outputs\default\entry-default-signed.hap +hdc install Benchmark\entry\build\default\outputs\ohosTest\entry-ohosTest-signed.hap +::Զbytrace +hdc wait-for-device shell mount -o remount,rw / +hdc shell "setenforce 0" +start cmd /c test.bat %testname% +timeout -nobreak 3 +start cmd /c bytrace.bat %filename% %tracefolder% %tagname% %rownum% diff --git a/performance/arkui/benchmark_pipeline/bytrace.bat b/performance/arkui/benchmark_pipeline/bytrace.bat new file mode 100644 index 00000000..f884f67f --- /dev/null +++ b/performance/arkui/benchmark_pipeline/bytrace.bat @@ -0,0 +1,23 @@ +:: Copyright (c) 2023 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. + +::bytrace +hdc shell "bytrace -t 10 -b 40960 --overwrite ability ace graphic > /data/%filename%" +hdc shell "sed -i '1,2d' /data/%filename%" +hdc file recv /data/%filename% ./%tracefolder%/%filename% +:: +python3 traceParseFile.py --ftrace %tracefolder%/%filename% --tags %tagname% --ofile Ⱦ߱.xls --ofilePos %rownum%,6 + +::3µIJԴ +timeout -nobreak 3 +start cmd /c benchmark.bat \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/test.bat b/performance/arkui/benchmark_pipeline/test.bat new file mode 100644 index 00000000..0e6c14a2 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/test.bat @@ -0,0 +1,15 @@ +:: Copyright (c) 2023 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. + +::Զ +hdc shell aa test -b com.example.benchmark -m entry_test -s unittest OpenHarmonyTestRunner -s class IndexTest#%1 -s timeout 150000 \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/traceParseFile.py b/performance/arkui/benchmark_pipeline/traceParseFile.py new file mode 100644 index 00000000..10b3ec15 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/traceParseFile.py @@ -0,0 +1,157 @@ +# Copyright (c) 2023 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. + +#!/usr/bin/python3 +import re +from xlutils.copy import * +from collections import deque +import argparse +import xlrd +import os + +description = "you should add parameter" +parser = argparse.ArgumentParser(description=description) + +##################参数设置################## +#要解析的ftrace文件 +ftraceFileLabel="ftrace" +#解析文件中哪些tag,逗号分割 +tagsLabel="tags" +#结果输出到的excel文件 +outExcelFileLabel="ofile" +#结果输出在excel文件中的位置 +outExcelFilePositionLabel="ofilePos" +tagDict={} +tagOri="" +ftraceFile="" +outExcelFile="" +outExcelFilePosition="" +parser.add_argument('--'+ftraceFileLabel,help = "The file of ftrace file") +parser.add_argument('--'+tagsLabel,help = "tags,such as FlushLayoutTask,FlushTouchEvents,FlushAnimation,FlushBuild,FlushLayout,FlushRender,FlushMessages") +parser.add_argument('--'+outExcelFileLabel,help = "Write the result to the file,it is a excel file") +parser.add_argument('--'+outExcelFilePositionLabel,help = "Write the result to position of the excel file") +args = parser.parse_args() + +##################参数解析################## +d = args.__dict__ +for key,value in d.items(): + if(key==ftraceFileLabel): + ftraceFile=value + if(key==tagsLabel): + tagOri=value + print("tags:",value) + for item in value.split(","): + tagDict[item]="" + if(key==outExcelFileLabel): + outExcelFile=value + if(key==outExcelFilePositionLabel): + outExcelFilePosition=value +print("ftraceFile:",ftraceFile) +print("tagDict:",tagDict) +print("outExcelFile:",outExcelFile) +print("outExcelFilePosition:",outExcelFilePosition) + +#ftraceFile="benchmark01_event_20231124_095849.ftrace" +#tagDict = {'FlushLayoutTask':'UITaskScheduler::FlushTask','FlushTouchEvents':'OnVsyncEvent','FlushAnimation':'OnVsyncEvent','FlushBuild':'OnVsyncEvent','FlushLayout':'OnVsyncEvent','FlushRender':'OnVsyncEvent','FlushMessages':'FlushVsync'} +print("show all tags and their parents") +print(tagDict.keys()) +#可以传入,针对这个项目设死即可 +taskAndId="benchmark" + +##################开始解析ftrace文件################## +#当前任务中,所有未处理的全部放到栈中 +currUnCompleteTagsQue = [] +#指定需要处理的,已完成的tag +completeTagsDict = {} +#读取读取文件 +with open(ftraceFile) as file: + for item in file: + #在ftrace中是多进程一起记录,故各个进程必须独立解析 + #初步判断是当前任务 + isThisTask=item.find(taskAndId)!=-1 + if(isThisTask): + #匹配task开始,解析各部分 + beginMatchObj = re.match( r'(.*) .* .* ....\s+(\d+.\d+): .*: B.*H:(.*)', item, re.M|re.I) + if beginMatchObj: + #tag开始时,进一步判断是当前任务,只有是当前任务数据才会处理 + bTask=beginMatchObj.group(1).strip() + if(bTask.find(taskAndId)!=-1): + bTag=beginMatchObj.group(3).strip() + bTimestamp=beginMatchObj.group(2) + #print(">>>>∧ TAG info[%s] timestamp:[%s],push to stack" % (bTag,bTimestamp)) + #当前task所有还未处理的tag,都保存下来 + currUnCompleteTagsQue.append([bTag,bTimestamp]) + else: + #匹配task结束,解析各部分 + endMatchObj = re.match( r'(.*) .* .* ....\s+(\d+.\d+): .*: E.*', item, re.M|re.I) + if endMatchObj: + + #tag收尾时,进一步判断是当前任务,只有是当前任务数据才会处理 + eTask=endMatchObj.group(1).strip() + if(eTask.find(taskAndId)!=-1): + #栈顶弹出tag信息,跟当前tag尾部匹配组合 + tagInfo=currUnCompleteTagsQue.pop() + + tagWithParam=tagInfo[0].strip() + startTimestamp=tagInfo[1] + endTimestamp=endMatchObj.group(2) + #print(" v<<<< TAG info[%s] timestamp:[%s], pop from stack" % (tagWithParam,endTimestamp)) + #tag过滤。只处理指定的tag + for tag,value in tagDict.items(): + if((tagWithParam.find(tag)==0)): + #在初始化列表中找到需要记录的{tag} + duration=round((float(endTimestamp)-float(startTimestamp))*1000*1000 ) + + #判断这个{tag}是否已经有其他帧的记录 + foundSameTag=False + for completeTag, completeDuration in completeTagsDict.items(): + #有其他帧记录的话,时长求和,更新该{tag}的时长 + if(completeTag == tag): + foundSameTag=True + + totalDuration=int(completeDuration)+duration + completeTagsDict[tag]=totalDuration + print("update TAG[%s] total time:%d μs, currduration:%d μs, oriDuration:%d μs " % (tag,totalDuration,duration,completeDuration)) + print("completeTagsDict:" ,completeTagsDict) + break + + if(foundSameTag is False): + #没有过这个{tag}记录的话,添加记录 + completeTagsDict[tag]=duration + print("add TAG[%s] duration:%d μs" % (tag,duration)) + print("completeTagsDict:", completeTagsDict) + break + +#相同tag时长求和 +print("result:",completeTagsDict) + +##################写结果到文件中################## +print("outExcelFile:",outExcelFile) +if(len(tagDict)==1): + workbook = xlrd.open_workbook(outExcelFile, formatting_info=True) + tempFileName="temp_xls_output_file.xls" + new_workbook = copy(workbook) + write_save = new_workbook.get_sheet(0) + outExcelFilePosArr=outExcelFilePosition.split(",") + + write_save.write(int(outExcelFilePosArr[0]), int(outExcelFilePosArr[1]), str(completeTagsDict[tagOri])+"μs") + + new_workbook.save(tempFileName) + workbook.release_resources() + del workbook + + os.remove(outExcelFile) + os.rename(tempFileName, outExcelFile) +else: + print("不符合tag只有一个的约定") +print("!!!parse end!!!") -- Gitee From 5c5f9527be5613377fcc6ae9e39cfd52e875e706 Mon Sep 17 00:00:00 2001 From: likunhui Date: Thu, 7 Dec 2023 18:18:02 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=B7=A5=E5=85=B7=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: likunhui --- .../Benchmark/build-profile.json5 | 5 ++- .../main/resources/base/element/string.json | 2 +- .../main/resources/en_US/element/string.json | 2 +- .../main/resources/zh_CN/element/string.json | 2 +- .../arkui/benchmark_pipeline/benchmark.bat | 32 ++++++++-------- .../arkui/benchmark_pipeline/bytrace.bat | 13 ++++++- .../arkui/benchmark_pipeline/pip/pip.ini | 3 ++ .../arkui/benchmark_pipeline/startBuild.bat | 37 +++++++++++++++++++ .../arkui/benchmark_pipeline/xlpip.bat | 16 ++++++++ 9 files changed, 88 insertions(+), 24 deletions(-) create mode 100644 performance/arkui/benchmark_pipeline/pip/pip.ini create mode 100644 performance/arkui/benchmark_pipeline/startBuild.bat create mode 100644 performance/arkui/benchmark_pipeline/xlpip.bat diff --git a/performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 b/performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 index 506885bd..b8fa006f 100644 --- a/performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 +++ b/performance/arkui/benchmark_pipeline/Benchmark/build-profile.json5 @@ -21,9 +21,9 @@ "type": "HarmonyOS", "material": { "certpath": "C:\\Users\\LeeiOS\\.ohos\\config\\auto_debug_Benchmark_com.example.benchmark_2850086000500386127.cer", - "storePassword": "0000001AD47D8F3679B14E19F2972F64B45479899ACACDB677B4AD601EE1CED1375C4197BB07F2748340", + "storePassword": "0000001A8B84254F56DEBBB02E7D698F0FED83DBFA69347BBBB1C1DABCFE6B630D2A20C2C0215560CA4B", "keyAlias": "debugKey", - "keyPassword": "0000001AE49AAAB9D1A52CC4E23AE43E196F1D0263B5B74A63D4A134AE84760A59A314D5D9666E43C1AB", + "keyPassword": "0000001A5DD9164C6B958A05D9A532352F07A012659A36A9BBDC5A26847736547F873912B137D7E0DBF0", "profile": "C:\\Users\\LeeiOS\\.ohos\\config\\auto_debug_Benchmark_com.example.benchmark_2850086000500386127.p7b", "signAlg": "SHA256withECDSA", "storeFile": "C:\\Users\\LeeiOS\\.ohos\\config\\auto_debug_Benchmark_com.example.benchmark_2850086000500386127.p12" @@ -35,6 +35,7 @@ "products": [ { "name": "default", + "signingConfig": "default" } ], "buildModeSet": [ diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json index f9459551..92bdd782 100644 --- a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/base/element/string.json @@ -10,7 +10,7 @@ }, { "name": "EntryAbility_label", - "value": "label" + "value": "Benchmark" } ] } \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json index f9459551..92bdd782 100644 --- a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/en_US/element/string.json @@ -10,7 +10,7 @@ }, { "name": "EntryAbility_label", - "value": "label" + "value": "Benchmark" } ] } \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json index 597ecf95..75a5acbc 100644 --- a/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json +++ b/performance/arkui/benchmark_pipeline/Benchmark/entry/src/main/resources/zh_CN/element/string.json @@ -10,7 +10,7 @@ }, { "name": "EntryAbility_label", - "value": "label" + "value": "Benchmark" } ] } \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/benchmark.bat b/performance/arkui/benchmark_pipeline/benchmark.bat index baff670d..a4986cdd 100644 --- a/performance/arkui/benchmark_pipeline/benchmark.bat +++ b/performance/arkui/benchmark_pipeline/benchmark.bat @@ -17,9 +17,9 @@ set testname=test set tagname=tag set rownum=0 - + :: -echo Benchmarkģ +echo Benchmark echo 1Columnа100buttonijһbuttonDispatchTouchEvent echo 2Columnа100buttonʹԶijһbuttonDispatchTouchEvent echo 3Ƕ100ColumnײΪbuttonbuttonDispatchTouchEvent @@ -49,11 +49,19 @@ echo 19 echo 20Columnа100buttonʹԶbuttonıbuttonߡHandleOnAreaChangeEvent - echo ------------------ echo ------------------ -set /P mode=Benchmarkģţ +::20ֹͣ +if %mode% gtr 20 ( +echo Benchmarkȫ +pause +exit +) + +::Զ +if %isAuto% equ 2 (set /P mode=Benchmarkţ) + set rownum=%mode% if %mode% equ 1 ( @@ -120,10 +128,6 @@ set tagname=HandleOnAreaChangeEvent @echo on -echo testname=%testname% -echo tagname=%tagname% -echo rownum=%rownum% - ::ȡ set ymd=%date:~0,4%%date:~5,2%%date:~8,2% @@ -138,15 +142,9 @@ for /f "tokens=* delims=" %%a in ("%hms%") do set hms=%%a set tracefolder=trace_%ymd% set filename=%testname%_%ymd%_%hms%.ftrace if not exist %tracefolder% (mkdir %tracefolder%) -::Ļ600ǹر -hdc shell power-shell setmode 602 -::жٰװ -hdc app uninstall com.example.benchmark -hdc install Benchmark\entry\build\default\outputs\default\entry-default-signed.hap -hdc install Benchmark\entry\build\default\outputs\ohosTest\entry-ohosTest-signed.hap + + ::Զbytrace -hdc wait-for-device shell mount -o remount,rw / -hdc shell "setenforce 0" start cmd /c test.bat %testname% timeout -nobreak 3 -start cmd /c bytrace.bat %filename% %tracefolder% %tagname% %rownum% +start cmd /c bytrace.bat %filename% %tracefolder% %tagname% %rownum% %mode% %isAuto% \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/bytrace.bat b/performance/arkui/benchmark_pipeline/bytrace.bat index f884f67f..d5a9d785 100644 --- a/performance/arkui/benchmark_pipeline/bytrace.bat +++ b/performance/arkui/benchmark_pipeline/bytrace.bat @@ -18,6 +18,15 @@ hdc file recv /data/%filename% ./%tracefolder%/%filename% :: python3 traceParseFile.py --ftrace %tracefolder%/%filename% --tags %tagname% --ofile Ⱦ߱.xls --ofilePos %rownum%,6 -::3µIJԴ +::ӳ1 timeout -nobreak 3 -start cmd /c benchmark.bat \ No newline at end of file + +::ԶУmodeСڵ20͵1 +if %isAuto% equ 1 ( +if %mode% leq 20 ( +set /a mode=%mode%+1 +start cmd /c benchmark.bat %isAuto% %mode% +) +) else ( +start cmd /c benchmark.bat +) diff --git a/performance/arkui/benchmark_pipeline/pip/pip.ini b/performance/arkui/benchmark_pipeline/pip/pip.ini new file mode 100644 index 00000000..5bee321b --- /dev/null +++ b/performance/arkui/benchmark_pipeline/pip/pip.ini @@ -0,0 +1,3 @@ +[global] +trusted-host=cmc-cd-mirror.rnd.huawei.com +index-url=http://cmc-cd-mirror.rnd.huawei.com/pypi/simple/ \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/startBuild.bat b/performance/arkui/benchmark_pipeline/startBuild.bat new file mode 100644 index 00000000..f5e0ffb3 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/startBuild.bat @@ -0,0 +1,37 @@ +:: Copyright (c) 2023 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. + +@echo off + +::ǷԶȫ +echo 1Զȫ +echo 2ѡ峡 + +echo ------------------ +echo ------------------ +set /P isAuto=ѡ񳡾ģʽ + + +::Ļ600ǹر +hdc shell power-shell setmode 602 +::жٰװ +hdc app uninstall com.example.benchmark +hdc install Benchmark\entry\build\default\outputs\default\entry-default-signed.hap +hdc install Benchmark\entry\build\default\outputs\ohosTest\entry-ohosTest-signed.hap +::ɹ +hdc wait-for-device shell mount -o remount,rw / +hdc shell "setenforce 0" + +:: +set mode=1 +start cmd /c benchmark.bat %isAuto% %mode% \ No newline at end of file diff --git a/performance/arkui/benchmark_pipeline/xlpip.bat b/performance/arkui/benchmark_pipeline/xlpip.bat new file mode 100644 index 00000000..b31da868 --- /dev/null +++ b/performance/arkui/benchmark_pipeline/xlpip.bat @@ -0,0 +1,16 @@ +:: Copyright (c) 2023 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. + +::װpythonдExcel +pip3 install xlrd +pip3 install xlutils \ No newline at end of file -- Gitee From 00da49c70ab66d775c2c6b2f472f6ff8f4c956ee Mon Sep 17 00:00:00 2001 From: likunhui Date: Fri, 8 Dec 2023 18:10:22 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=92=8C=E6=B7=BB=E5=8A=A0README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: likunhui --- .../arkui/benchmark_pipeline/README.md | 37 ++++++++++ .../arkui/benchmark_pipeline/bytrace.bat | 2 +- .../benchmark_pipeline/screenshot/image1.png | Bin 0 -> 5168 bytes .../benchmark_pipeline/screenshot/image2.png | Bin 0 -> 9411 bytes .../benchmark_pipeline/screenshot/image3.png | Bin 0 -> 90069 bytes .../benchmark_pipeline/screenshot/image4.png | Bin 0 -> 58712 bytes .../benchmark_pipeline/screenshot/image5.png | Bin 0 -> 9013 bytes .../benchmark_pipeline/screenshot/image6.png | Bin 0 -> 99367 bytes .../benchmark_pipeline/traceParseFile.py | 68 +++++++++++++++--- 9 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 performance/arkui/benchmark_pipeline/README.md create mode 100644 performance/arkui/benchmark_pipeline/screenshot/image1.png create mode 100644 performance/arkui/benchmark_pipeline/screenshot/image2.png create mode 100644 performance/arkui/benchmark_pipeline/screenshot/image3.png create mode 100644 performance/arkui/benchmark_pipeline/screenshot/image4.png create mode 100644 performance/arkui/benchmark_pipeline/screenshot/image5.png create mode 100644 performance/arkui/benchmark_pipeline/screenshot/image6.png diff --git a/performance/arkui/benchmark_pipeline/README.md b/performance/arkui/benchmark_pipeline/README.md new file mode 100644 index 00000000..6bbf217b --- /dev/null +++ b/performance/arkui/benchmark_pipeline/README.md @@ -0,0 +1,37 @@ +# 安装python最新版,至少3.x以上 + +# 运行`xlpip.bat` 安装python插件 + +> 如果运行`xlpip.bat`报错,把pip文件夹复制到 C:\Users\工号\ 目录下,再次运行`xlpip.bat` + +# 使用DevEco Studio 打开 【Benchmark】工程 + +### 设置真机签名证书,见下图 + + + +![](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image2.png "图2") + +### 运行测试用例获取hap包 ,见下图 + +![图3](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image3.png "图3") + +![图4](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image4.png "图4") + +# 运行工具 + +### 运行【startBuild.bat】,选择Benchmark场景用例运行模式,见下图 + +![图5](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image5.png "图5") + +> 说明: +> +> 1、确保所有工具和【渲染管线报告.xls】处于同一目录下 +> +> 2、如果选择1,则自动运行全部用例,中间无需做其他操作;如果选择2只可以运行具体某用例,见下图; +> +> 3、无论选择1还是2,耗时时间都会自动写入【渲染管线报告.xls】 +> +> 4、在运行用例时,禁止打开【渲染管线报告.xls】,否则耗时时间无法写入 +> +> ![图6](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image6.png "图6") diff --git a/performance/arkui/benchmark_pipeline/bytrace.bat b/performance/arkui/benchmark_pipeline/bytrace.bat index d5a9d785..ee3dd80f 100644 --- a/performance/arkui/benchmark_pipeline/bytrace.bat +++ b/performance/arkui/benchmark_pipeline/bytrace.bat @@ -19,7 +19,7 @@ hdc file recv /data/%filename% ./%tracefolder%/%filename% python3 traceParseFile.py --ftrace %tracefolder%/%filename% --tags %tagname% --ofile Ⱦ߱.xls --ofilePos %rownum%,6 ::ӳ1 -timeout -nobreak 3 +timeout -nobreak 1 ::ԶУmodeСڵ20͵1 if %isAuto% equ 1 ( diff --git a/performance/arkui/benchmark_pipeline/screenshot/image1.png b/performance/arkui/benchmark_pipeline/screenshot/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ad8befbd0af6a601ed8771ba755abb02184239 GIT binary patch literal 5168 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 b_62}C$2(|CuM${OJ~q>9Rz{@;cb@(S+GQ-# literal 0 HcmV?d00001 diff --git a/performance/arkui/benchmark_pipeline/screenshot/image2.png b/performance/arkui/benchmark_pipeline/screenshot/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0ca0d0167e42e0e44d16d08b66d3d9630e9f50 GIT binary patch literal 9411 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 z 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 literal 0 HcmV?d00001 diff --git a/performance/arkui/benchmark_pipeline/screenshot/image4.png b/performance/arkui/benchmark_pipeline/screenshot/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..2fef34c461588aa70109ede3e5e0bdfeff1e6a82 GIT binary patch literal 58712 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 literal 0 HcmV?d00001 diff --git a/performance/arkui/benchmark_pipeline/screenshot/image6.png b/performance/arkui/benchmark_pipeline/screenshot/image6.png new file mode 100644 index 0000000000000000000000000000000000000000..c41e1447d71687cecae906e564772ead74bbe5ff GIT binary patch literal 99367 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 z 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 Date: Fri, 8 Dec 2023 18:21:46 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: likunhui --- performance/arkui/benchmark_pipeline/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/performance/arkui/benchmark_pipeline/README.md b/performance/arkui/benchmark_pipeline/README.md index 6bbf217b..18b792f7 100644 --- a/performance/arkui/benchmark_pipeline/README.md +++ b/performance/arkui/benchmark_pipeline/README.md @@ -8,21 +8,21 @@ ### 设置真机签名证书,见下图 - +!([图片1](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image1.png)) -![](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image2.png "图2") +!([图片2](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image2.png)) ### 运行测试用例获取hap包 ,见下图 -![图3](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image3.png "图3") +!([图片3](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image3.png)) -![图4](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image4.png "图4") +!([图片4](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image4.png)) # 运行工具 ### 运行【startBuild.bat】,选择Benchmark场景用例运行模式,见下图 -![图5](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image5.png "图5") +!([图片5](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image5.png)) > 说明: > @@ -34,4 +34,4 @@ > > 4、在运行用例时,禁止打开【渲染管线报告.xls】,否则耗时时间无法写入 > -> ![图6](file:///C:/Users/LeeiOS/Desktop/ostest_integration_test/performance/arkui/benchmark_pipeline/screenshot/image6.png "图6") +> !([图片6](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image6.png)) -- Gitee From 891fe78cd943acf82ec8dbaea55a466ab3783e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B2=B2=E8=BE=89?= Date: Fri, 8 Dec 2023 10:28:06 +0000 Subject: [PATCH 5/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李鲲辉 --- performance/arkui/benchmark_pipeline/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/performance/arkui/benchmark_pipeline/README.md b/performance/arkui/benchmark_pipeline/README.md index 18b792f7..ce95f11a 100644 --- a/performance/arkui/benchmark_pipeline/README.md +++ b/performance/arkui/benchmark_pipeline/README.md @@ -8,21 +8,21 @@ ### 设置真机签名证书,见下图 -!([图片1](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image1.png)) +![图片1](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image1.png) -!([图片2](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image2.png)) +![图片2](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image2.png) ### 运行测试用例获取hap包 ,见下图 -!([图片3](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image3.png)) +![图片3](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image3.png) -!([图片4](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image4.png)) +![图片4](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image4.png) # 运行工具 ### 运行【startBuild.bat】,选择Benchmark场景用例运行模式,见下图 -!([图片5](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image5.png)) +![图片5](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image5.png) > 说明: > @@ -34,4 +34,4 @@ > > 4、在运行用例时,禁止打开【渲染管线报告.xls】,否则耗时时间无法写入 > -> !([图片6](https://gitee.com/kunge-hub/ostest_integration_test/blob/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image6.png)) +> !([图片6](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image6.png)) -- Gitee From e20c2ec29d0c69553d63a61a58676676ccf222ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B2=B2=E8=BE=89?= Date: Fri, 8 Dec 2023 10:29:01 +0000 Subject: [PATCH 6/6] update README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李鲲辉 --- performance/arkui/benchmark_pipeline/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/performance/arkui/benchmark_pipeline/README.md b/performance/arkui/benchmark_pipeline/README.md index ce95f11a..76640560 100644 --- a/performance/arkui/benchmark_pipeline/README.md +++ b/performance/arkui/benchmark_pipeline/README.md @@ -34,4 +34,4 @@ > > 4、在运行用例时,禁止打开【渲染管线报告.xls】,否则耗时时间无法写入 > -> !([图片6](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image6.png)) +> ![图片6](https://gitee.com/kunge-hub/ostest_integration_test/raw/benchmark_pipeline/performance/arkui/benchmark_pipeline/screenshot/image6.png) -- Gitee