From 4c15e2e64827f39a4b15a1fdf245798c4ab271fd Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Thu, 11 Sep 2025 18:56:14 +0300 Subject: [PATCH 1/2] Node filetering being used Signed-off-by: Nikolay Igotti --- ui2abc/libarkts/native/src/common.cc | 11 ++- ui2abc/libarkts/src-host/es2panda.ts | 2 +- ui2abc/memo-plugin-ng/package.json | 2 +- .../src/analysis/AnalysisVisitor.ts | 15 ++-- ui2abc/perf-tests/package.json | 4 +- ui2abc/perf-tests/ui2abcconfig-joint.json | 69 +++++++++++++++++++ 6 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 ui2abc/perf-tests/ui2abcconfig-joint.json diff --git a/ui2abc/libarkts/native/src/common.cc b/ui2abc/libarkts/native/src/common.cc index e8a2cf8680..81cf45c448 100644 --- a/ui2abc/libarkts/native/src/common.cc +++ b/ui2abc/libarkts/native/src/common.cc @@ -389,7 +389,6 @@ struct Pattern { switch (type) { case Es2pandaAstNodeType::AST_NODE_TYPE_METHOD_DEFINITION: case Es2pandaAstNodeType::AST_NODE_TYPE_SCRIPT_FUNCTION: - return value == "method"; case Es2pandaAstNodeType::AST_NODE_TYPE_STRUCT_DECLARATION: return value == "struct"; @@ -407,17 +406,23 @@ struct Pattern { result = impl->FunctionDeclarationAnnotations(context, function, &length); break; } - case Es2pandaAstNodeType::AST_NODE_TYPE_FUNCTION_DECLARATION: + case Es2pandaAstNodeType::AST_NODE_TYPE_FUNCTION_DECLARATION: { result = impl->FunctionDeclarationAnnotations(context, node, &length); break; + } case AST_NODE_TYPE_ARROW_FUNCTION_EXPRESSION: { auto function = impl->ArrowFunctionExpressionFunction(context, node); result = impl->FunctionDeclarationAnnotations(context, function, &length); break; } - case Es2pandaAstNodeType::AST_NODE_TYPE_CLASS_PROPERTY: + case Es2pandaAstNodeType::AST_NODE_TYPE_CLASS_PROPERTY: { result = impl->ClassPropertyAnnotations(context, node, &length); break; + } + case Es2pandaAstNodeType::AST_NODE_TYPE_ETS_PARAMETER_EXPRESSION: { + result = impl->ETSParameterExpressionAnnotations(context, node, &length); + break; + } default: return false; } diff --git a/ui2abc/libarkts/src-host/es2panda.ts b/ui2abc/libarkts/src-host/es2panda.ts index 600e8aa923..c7440f0d28 100644 --- a/ui2abc/libarkts/src-host/es2panda.ts +++ b/ui2abc/libarkts/src-host/es2panda.ts @@ -101,7 +101,7 @@ function insertPlugin(pluginEntry: PluginEntry, state: Es2pandaContextState, dum const hooks = new DumpingHooks(state, pluginName, dumpAst); const pluginContext = new PluginContextImpl(); - if (true) { + if (false) { pluginContext.setProjectConfig({ bundleName: 'bundle', moduleName: 'module', diff --git a/ui2abc/memo-plugin-ng/package.json b/ui2abc/memo-plugin-ng/package.json index 7b2b70178d..9ac91aa526 100644 --- a/ui2abc/memo-plugin-ng/package.json +++ b/ui2abc/memo-plugin-ng/package.json @@ -8,7 +8,7 @@ "runtime:prepare": "npm run annotate --prefix ../../incremental/runtime && npm run build --prefix ../../incremental", "compile:libarkts": "npm run compile --prefix ../libarkts", "demo:clean": "npm run clean --prefix demo", - "demo:run:light": "npm run compile --prefix demo && npm run run --prefix demo", + "demo:run:light": "npm run clean --prefix demo && npm run compile --prefix demo && npm run run --prefix demo", "demo:run": "npm run compile:libarkts && npm run compile && npm run demo:run:light", "demo:disasm": "npm run disasm --prefix demo", "compile:deps:harness": "cd ../../incremental/harness && npm run compile && npm run build", diff --git a/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts b/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts index 26b9bd5dcc..7bed9a3b29 100644 --- a/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts +++ b/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts @@ -67,13 +67,20 @@ class AnalysisVisitor extends arkts.AbstractVisitor { useFilterNodes = false process(node: arkts.AstNode, options?: AnalysisVisitorOptions): arkts.AstNode { - if (this.useFilterNodes) { + if (arkts.isETSModule(node) && this.useFilterNodes) { + let isInteresting = false const memoNodes = arkts.filterNodes(node, "annotation=memo.*") const processNode = new Set() memoNodes.forEach(it => { - processNode.add(this.findProperParent(it) ?? it) + if (isInteresting) { + console.log(`we found ${it.dumpSrc()}`) + } + processNode.add(this.findProperParent(it)) }) processNode.forEach(it => { + if (isInteresting) { + console.log(`we process ${it.dumpSrc()}`) + } this.visitor(it) }) return node @@ -83,7 +90,7 @@ class AnalysisVisitor extends arkts.AbstractVisitor { } - private findProperParent(node: arkts.AstNode): arkts.AstNode | undefined { + private findProperParent(node: arkts.AstNode): arkts.AstNode { let current: arkts.AstNode | undefined = node while (current) { if (arkts.isClassDeclaration(current) || arkts.isTSInterfaceDeclaration(current) || arkts.isETSFunctionType(current)) { @@ -91,7 +98,7 @@ class AnalysisVisitor extends arkts.AbstractVisitor { } current = current.parent } - return undefined + return node } visitor(node: arkts.AstNode, options?: AnalysisVisitorOptions) { diff --git a/ui2abc/perf-tests/package.json b/ui2abc/perf-tests/package.json index b443c2e963..0b3f2c7cd3 100644 --- a/ui2abc/perf-tests/package.json +++ b/ui2abc/perf-tests/package.json @@ -8,6 +8,8 @@ "check:inc:separate": "node ../fast-arktsc --config ./ui2abcconfig.json --compiler ../../incremental/tools/panda/arkts/ui2abc --link-name ./build/out-recheck.abc && time ninja ${NINJA_OPTIONS} -f build/build.ninja", "check:inc": "node ../fast-arktsc --simultaneous --config ./ui2abcconfig.json --compiler ../../incremental/tools/panda/arkts/ui2abc --link-name ./build/out-recheck.abc && time ninja ${NINJA_OPTIONS} -f build/build.ninja", "check:separate": "npm run clean && npm run check:inc:separate", - "check": "npm run clean && npm run check:inc" + "check": "npm run clean && npm run check:inc", + "check:joint:inc": "node ../fast-arktsc --simultaneous --config ./ui2abcconfig-joint.json --compiler ../../incremental/tools/panda/arkts/ui2abc --link-name ./build/out.abc && time ninja ${NINJA_OPTIONS} -f build/build.ninja", + "check:joint": "npm run clean && npm run check:joint:inc" } } \ No newline at end of file diff --git a/ui2abc/perf-tests/ui2abcconfig-joint.json b/ui2abc/perf-tests/ui2abcconfig-joint.json new file mode 100644 index 0000000000..46c9961e0d --- /dev/null +++ b/ui2abc/perf-tests/ui2abcconfig-joint.json @@ -0,0 +1,69 @@ +{ + "compilerOptions": { + "package": "@ohos.arkui.perf-tests", + "outDir": "build", + "baseUrl": ".", + "paths": { + "arkui": ["../../arkoala-arkts/arkui/sdk/prepared"], + "@ohos.arkui.component": ["../../arkoala-arkts/arkui/@ohos.arkui.component"], + "global": ["../../arkoala-arkts/modules/global.resource/src"], + "global.resource": ["../../arkoala-arkts/modules/global.resource/src/resource"], + "@ohos.font": ["../../arkoala-arkts/modules/ohos/src/font"], + "@ohos.multimedia.image": ["../../arkoala-arkts/modules/ohos/src/multimedia.image"], + "@ohos.data.uniformTypeDescriptor": ["../../arkoala-arkts/modules/ohos/src/data.uniformTypeDescriptor"], + "@ohos.data.unifiedDataChannel": ["../../arkoala-arkts/modules/ohos/src/data.unifiedDataChannel"], + "@ohos.arkui.stateManagement": ["../../arkoala-arkts/arkui/@ohos.arkui.stateManagement"], + "@ohos.arkui.inspector": ["../../arkoala-arkts/arkui/@ohos.arkui.inspector"], + "@ohos.arkui.theme": ["../../arkoala-arkts/arkui/@ohos.arkui.theme"], + "@ohos.arkui.node": ["../../arkoala-arkts/arkui/@ohos.arkui.node"], + "@ohos.arkui.dragController": ["../../arkoala-arkts/arkui/@ohos.arkui.dragController"], + "@ohos.arkui.UIContext": ["../../arkoala-arkts/arkui/@ohos.arkui.UIContext"], + "@ohos.arkui": ["../../arkoala-arkts/arkui/@ohos.arkui"], + "@ohos.router": ["../../arkoala-arkts/arkui/@ohos.router"], + "@koalaui/builderLambda": ["../../arkoala-arkts/arkui/sdk/prepared/stateAnnotations"], + "@koalaui/interop": ["../../interop/src/arkts"], + "@koalaui/compat": [ "../../incremental/compat/src/arkts" ], + "#platform": [ "../../incremental/compat/src/arkts" ], + "@koalaui/common": [ "../../incremental/common/src" ], + "@koalaui/runtime": [ "../../incremental/runtime/ets" ], + "@koalaui/runtime/annotations": [ "../../incremental/runtime/annotations" ] + }, + "plugins": [ + { + "transform": "@ohos/arkui-plugins/ui-syntax", + "state": "parsed", + "name": "ui-syntax" + }, + { + "transform": "@ohos/arkui-plugins/ui", + "state": "parsed", + "name": "ui" + }, + { + "transform": "@ohos/arkui-plugins/ui-syntax", + "state": "checked", + "name": "ui-syntax" + }, + { + "transform": "@ohos/arkui-plugins/ui", + "state": "checked", + "name": "ui" + }, + { + "transform": "@ohos/arkui-plugins/memo", + "state": "checked", + "name": "memo" + } + ] + }, + "include": [ + "./src/stateVariables.ets" + ], + "exclude": [ + "./src/positionalMemoization.ets", + "./src/customComponents.ets", + "./src/manyImportsMain.ets", + "./src/manyImports/*.ets", + "./src/1.1/**/*.ets" + ] +} -- Gitee From 1273f9297d323efee105ff29744e3c45c4490b26 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Thu, 11 Sep 2025 19:01:13 +0300 Subject: [PATCH 2/2] Use node filtering in analysis Signed-off-by: Nikolay Igotti --- ui2abc/libarkts/native/src/common.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ui2abc/libarkts/native/src/common.cc b/ui2abc/libarkts/native/src/common.cc index 81cf45c448..4519645af8 100644 --- a/ui2abc/libarkts/native/src/common.cc +++ b/ui2abc/libarkts/native/src/common.cc @@ -375,12 +375,18 @@ struct Pattern { std::string key; std::string value; es2panda_Impl* impl; + bool isWildcard; + regex_t regex; Pattern(es2panda_Context* context, const std::string& part) : context(context), impl(GetImpl()) { std::istringstream stream(part); std::getline(stream, key, '='); std::getline(stream, value, '='); + isWildcard = value.find('*') != std::string::npos; + if (isWildcard) { + regcomp(®ex, value.c_str(), REG_NEWLINE); + } } bool match(es2panda_AstNode* node) { @@ -439,12 +445,10 @@ struct Pattern { bool matchWildcard(const std::string& pattern, const char* value) { - if (pattern.find('*') == std::string::npos) { + if (!isWildcard) { return pattern == value; } - regex_t regex; regmatch_t match[1]; - regcomp(®ex, pattern.c_str(), REG_NEWLINE); return regexec(®ex, value, 1, match, 0) != REG_NOMATCH; } }; -- Gitee