From 9c5d4edf9cfe5638bd1b82922b220ff6e0e4c760 Mon Sep 17 00:00:00 2001 From: Orlovsky Maxim Date: Wed, 11 Sep 2024 09:16:35 +0000 Subject: [PATCH] Changed package.json's and arktsconfigs to support full incremental build Added perf version of demo-playground Added flag to ark driver to specify the entrypoint Fix String.codePointAt usage in incremental/compat Signed-off-by: Orlovsky Maxim --- arkoala/arkui-common/package.json | 2 +- arkoala/arkui/package.json | 2 +- arkoala/framework/arktsconfig.json | 2 +- incremental/demo-playground/package.json | 4 +- incremental/demo-playground/src/index.ts | 84 +++++++++++++++++++++--- incremental/runtime/package.json | 3 +- incremental/tools/panda/arkts/ark.js | 14 +++- 7 files changed, 95 insertions(+), 16 deletions(-) diff --git a/arkoala/arkui-common/package.json b/arkoala/arkui-common/package.json index 639dd5468..8582a4fc1 100644 --- a/arkoala/arkui-common/package.json +++ b/arkoala/arkui-common/package.json @@ -27,7 +27,7 @@ "scripts": { "docs": "typedoc", "compile": "npm run ohos-sdk && tsc -b .", - "compile:arkts": "bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig.json", + "compile:arkts": "bash ../../incremental/tools/panda/arkts/arktsc --arktsconfig arktsconfig.json", "clean": "rimraf build dist ; npm run ets:clean", "ohos-sdk:download": "node scripts/download-oh-sdk.mjs", "ohos-sdk:patch": "node scripts/patch-oh-sdk.mjs", diff --git a/arkoala/arkui/package.json b/arkoala/arkui/package.json index e09428f06..9d75821ab 100644 --- a/arkoala/arkui/package.json +++ b/arkoala/arkui/package.json @@ -26,7 +26,7 @@ "scripts": { "docs": "typedoc", "compile": "npm run ohos-sdk --prefix ../arkui-common && tsc -b .", - "compile:arkts": "bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig.json", + "compile:arkts": "bash ../../incremental/tools/panda/arkts/arktsc --arktsconfig arktsconfig.json", "clean": "rimraf build dist ; npm run ets:clean", "ets:test": "cd test/ets; ../../../node_modules/ohos-typescript/bin/tsc", "test-gen": "npm run compile && npm run ets:test && mocha --gen-golden=$npm_config_gdir", diff --git a/arkoala/framework/arktsconfig.json b/arkoala/framework/arktsconfig.json index c22b593ae..83df37ace 100644 --- a/arkoala/framework/arktsconfig.json +++ b/arkoala/framework/arktsconfig.json @@ -3,7 +3,7 @@ "baseUrl": ".", "outDir": "build/abc", "paths": { - "@koalaui/compat": ["../../incremental/compat/arkts"], + "@koalaui/compat": ["../../incremental/compat/src/arkts"], "@koalaui/common": ["../../incremental/common/src"], "@koalaui/runtime": ["../../incremental/runtime/src"], "@koalaui/interop": ["../../interop/src"] diff --git a/incremental/demo-playground/package.json b/incremental/demo-playground/package.json index c43217fd2..a3d696974 100644 --- a/incremental/demo-playground/package.json +++ b/incremental/demo-playground/package.json @@ -20,7 +20,9 @@ "compile:run-unmemoized": "npm run compile -- --env tsconfig=tsconfig-run-unmemoized.json --env unmemoized=unmemoized", "compile:unmemoizing": "npm run compile:unmemoize && npm run compile:run-unmemoized", "compile:arkts": "bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig.json", - "compile:arkts:unmemoizing": "npm run compile:unmemoize && bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig-run-unmemoized.json", + "compile:arkts:unmemoize": "tsc -b tsconfig-unmemoize.json", + "compile:arkts:unmemoized": "bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig-run-unmemoized.json", + "compile:arkts:unmemoizing": "npm run compile:unmemoize && npm run compile:arkts:unmemoized", "run": "npm run compile && node lib/js/app.js", "run:unmemoizing": "npm run compile:unmemoizing && node lib/unmemoized/js/app.js", "run:panda": "bash ../tools/panda/arkts/ark build/abc/src/index.abc --ark-boot-files $(find ../compat/build/abc ../common/build/abc/ ../runtime/build/abc/ -name '*.abc' | paste -sd ':' -)", diff --git a/incremental/demo-playground/src/index.ts b/incremental/demo-playground/src/index.ts index 4caea538d..266e0ffe0 100644 --- a/incremental/demo-playground/src/index.ts +++ b/incremental/demo-playground/src/index.ts @@ -59,16 +59,80 @@ function demo(node: StringerNode): void { console.log(scope?.toHierarchy()) } -// memoRoot is the entry point here. -// It initializes the incremental runtime and computes the first frame. -// Have a look at its implementation. -const root = memoRoot(new StringerNode(0), demo) -console.log(root.value.toHierarchy()) // dump ui subtree +function main() { + // memoRoot is the entry point here. + // It initializes the incremental runtime and computes the first frame. + // Have a look at its implementation. + const root = memoRoot(new StringerNode(0), demo) + console.log(root.value.toHierarchy()) // dump ui subtree -updateStateManager() // Compute next frame. -console.log(root.value.toHierarchy()) + updateStateManager() // Compute next frame. + console.log(root.value.toHierarchy()) -state.value = 19 + state.value = 19 -updateStateManager() // Compute the next frame. -console.log(root.value.toHierarchy()) + updateStateManager() // Compute the next frame. + console.log(root.value.toHierarchy()) +} + +/** @memo */ +function Stringer_perf( + arg: string, + /** @memo */ + content?: () => void +): void { + NodeAttach(() => new StringerNode(5), (node: StringerNode): void => { + node.data = arg + content?.() + }) +} + +/** @memo */ +function demo_perf(node: StringerNode): void { + Stringer_perf("First", (): void => { + Stringer_perf(`Second ${state.value}`, (): void => { + Stringer_perf("Third") + }) + Stringer_perf("Fourth", (): void => { + Stringer_perf("5th") + }) + }) + + // This is to dump the complete managed incremental scope tree + const scope = contextLocalValue(CONTEXT_ROOT_SCOPE) +} + +function testTickComputable(root: ComputableState, withCallbacks: boolean = true) { + testTick(root as State, withCallbacks) +} + +export function main_perf() { + const ITERATIONS = 100000; + const root = memoRoot(new StringerNode(3), demo_perf) + + let start1 = Date.now(); + for (let i = 0; i < ITERATIONS; i++) { + testTickComputable(root) // Compute next frame. + } + let time1 = Date.now() - start1; + console.log("Compute next frame: " + time1 + " ms"); + + state.value = 19 + let start2 = Date.now(); + for (let i = 0; i < ITERATIONS; i++) { + state.value = 19; + testTickComputable(root) // Compute the next frame. + } + let time2 = Date.now() - start2; + console.log("Compute next frame with state.value = 19: " + time2 + " ms"); + + let start3 = Date.now(); + for (let i = 0; i < ITERATIONS; i++) { + state.value = i; + testTickComputable(root) // Compute the next frame. + } + let time3 = Date.now() - start3; + console.log("Compute next frame with state.value = i: " + time3 + " ms"); +} + +main() \ No newline at end of file diff --git a/incremental/runtime/package.json b/incremental/runtime/package.json index f72d92916..9df4271e6 100644 --- a/incremental/runtime/package.json +++ b/incremental/runtime/package.json @@ -20,7 +20,8 @@ "panda:sdk:install": "cd ../tools/panda && npm run panda:sdk:install", "compile:arkts": "bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig.json --ets-module", "compile:arkts:unmemoize": "../node_modules/typescript/bin/tsc -b arktsconfig-unmemoize.json", - "compile:arkts:unmemoizing": "npm run compile:arkts:unmemoize && bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig-run-unmemoized.json --ets-module", + "compile:arkts:unmemoized": "bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig-run-unmemoized.json --ets-module", + "compile:arkts:unmemoizing": "npm run compile:arkts:unmemoize && npm run compile:arkts:unmemoized", "arkts:compile:test:lib": "bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig-test-lib.json --ets-module", "arkts:compile:test:app": "find unmemoized/test-arkts -name '*.test.ts' -exec mkdir -p build/test/app/{} \\; -exec bash ../tools/panda/arkts/arktsc --arktsconfig arktsconfig-test-app.json --output build/test/app/{}/test.abc {} \\;", "arkts:run:test:harness": "find build/test/app -name test.abc -exec bash ../tools/panda/arkts/ark --ark-boot-files $(find ../compat/build/abc ../common/build/abc ./build/test/lib -name '*.abc' | paste -sd ':' -) {} \\;", diff --git a/incremental/tools/panda/arkts/ark.js b/incremental/tools/panda/arkts/ark.js index 19db415cb..523fb109a 100644 --- a/incremental/tools/panda/arkts/ark.js +++ b/incremental/tools/panda/arkts/ark.js @@ -43,6 +43,12 @@ const ARGS_SPEC = [ domain: 'string', default: '' }, + { + flag: '--ark-entry-point', + help: 'Entry point function in format like `ETSGLOBAL::main`', + domain: 'string', + default: 'ETSGLOBAL::main' + }, ...DEFAULT_DRIVER_FLAGS, ] const USAGE = getUsage("This runs ark to load and run panda bytecode", ARGS_SPEC) @@ -62,7 +68,7 @@ let cmd = [ '--boot-panda-files', args.flag('--ark-ets-stdlib') + ':' + arkBootFiles, ...rest, - 'ETSGLOBAL::main', + args.flag('--ark-entry-point'), ] if (args.flag('--driver-log') === 'info') { console.log(formatCommand(cmd.join(' '), process.cwd())) @@ -82,3 +88,9 @@ child.on('close', (code) => { process.exit(code) } }) +child.on('exit', (code, signal) => { + if (signal) { + console.log(`Received signal: ${signal} from '${formatCommand(cmd.join(' '), process.cwd())}'`) + process.exit(1) + } +}) -- Gitee