diff --git a/arkui-plugins/common/debug.ts b/arkui-plugins/common/debug.ts index f39940e8f7508e4286c59d687e42c1a4873a9b10..59d7982a75dd50df26d2fc22494023b828498b27 100644 --- a/arkui-plugins/common/debug.ts +++ b/arkui-plugins/common/debug.ts @@ -18,7 +18,7 @@ import * as arkts from '@koalaui/libarkts'; const isDebugLog: boolean = false; const isDebugDump: boolean = false; -const isPerformance: boolean = false; +const isPerformance: boolean = true; arkts.Performance.getInstance().skip(!isPerformance); export function getEnumName(enumType: any, value: number): string | undefined { diff --git a/arkui-plugins/common/plugin-context.ts b/arkui-plugins/common/plugin-context.ts index 95843cb7b6d27b7fc3af59a6669544741e0625da..33437e5f4a5048b81d51793da10ba9a4d3fb24c6 100644 --- a/arkui-plugins/common/plugin-context.ts +++ b/arkui-plugins/common/plugin-context.ts @@ -107,6 +107,7 @@ export interface Plugins { afterNew?: PluginHandler; parsed?: PluginHandler; scopeInited?: PluginHandler; + bound?: PluginHandler; checked?: PluginHandler; lowered?: PluginHandler; asmGenerated?: PluginHandler; diff --git a/arkui-plugins/common/program-visitor.ts b/arkui-plugins/common/program-visitor.ts index daf5cda208414dd5a4eb7a9a4a8735315ce74f62..cea1a398a14b3178b396630229f5dbf2d1970f77 100644 --- a/arkui-plugins/common/program-visitor.ts +++ b/arkui-plugins/common/program-visitor.ts @@ -174,7 +174,7 @@ export class ProgramVisitor extends AbstractVisitor { const visited = new Set(); const queue: arkts.Program[] = programQueue; this.getLegacyModule(); - arkts.Performance.getInstance().createEvent(`${this.state}-external-source`); + // arkts.Performance.getInstance().createEvent(`${this.state}-external-source`); while (queue.length > 0) { const currProgram = queue.shift()!; if (visited.has(currProgram.peer) || currProgram.isASTLowered()) { @@ -197,16 +197,16 @@ export class ProgramVisitor extends AbstractVisitor { this.visitNextProgramInQueue(queue, visited, externalSource); } } - arkts.Performance.getInstance().stopEvent(`${this.state}-external-source`, false); + // arkts.Performance.getInstance().stopEvent(`${this.state}-external-source`, false); } programVisitor(program: arkts.Program): arkts.Program { this.visitExternalSources(program, [program]); - arkts.Performance.getInstance().createEvent(`${this.state}-source`); + // arkts.Performance.getInstance().createEvent(`${this.state}-source`); let programScript = program.astNode; programScript = this.visitor(programScript, program, this.externalSourceName); - arkts.Performance.getInstance().stopEvent(`${this.state}-source`, false); + // arkts.Performance.getInstance().stopEvent(`${this.state}-source`, false); const visitorsToReset = flattenVisitorsInHooks(this.hooks, this.state); visitorsToReset.forEach((visitor) => visitor.reset()); @@ -247,7 +247,7 @@ export class ProgramVisitor extends AbstractVisitor { } visitor(node: arkts.AstNode, program?: arkts.Program, externalSourceName?: string): arkts.EtsScript { - arkts.Performance.getInstance().createEvent(`${this.state}-${externalSourceName ?? 'SOURCE'}`); + // arkts.Performance.getInstance().createEvent(`${this.state}-${externalSourceName ?? 'SOURCE'}`); let hook: ProgramHookLifeCycle | undefined; let script: arkts.EtsScript = node as arkts.EtsScript; @@ -264,9 +264,9 @@ export class ProgramVisitor extends AbstractVisitor { } this.visitTransformer(transformer, script, externalSourceName, program); transformer.reset(); - arkts.Performance.getInstance().createEvent('set-all-parent'); + // arkts.Performance.getInstance().createEvent('set-all-parent'); arkts.setAllParents(script); - arkts.Performance.getInstance().stopEvent('set-all-parent', false); + // arkts.Performance.getInstance().stopEvent('set-all-parent', false); if (!transformer.isExternal) { debugDump( script.dumpSrc(), @@ -283,7 +283,7 @@ export class ProgramVisitor extends AbstractVisitor { hook = isExternal ? this.hooks?.external : this.hooks?.source; this.postVisitor(hook, node, program, externalSourceName); - arkts.Performance.getInstance().stopEvent(`${this.state}-${externalSourceName ?? 'SOURCE'}`, false); + // arkts.Performance.getInstance().stopEvent(`${this.state}-${externalSourceName ?? 'SOURCE'}`, false); return script; } @@ -303,12 +303,12 @@ export class ProgramVisitor extends AbstractVisitor { externalSourceName?: string, program?: arkts.Program ): arkts.EtsScript { - arkts.Performance.getInstance().createEvent(transformer.constructor.name); + // arkts.Performance.getInstance().createEvent(transformer.constructor.name); transformer.isExternal = !!externalSourceName; transformer.externalSourceName = externalSourceName; transformer.program = program; const newScript = transformer.visitor(script) as arkts.EtsScript; - arkts.Performance.getInstance().stopEvent(transformer.constructor.name, false); + // arkts.Performance.getInstance().stopEvent(transformer.constructor.name, false); return newScript; } } diff --git a/arkui-plugins/ui-plugins/index.ts b/arkui-plugins/ui-plugins/index.ts index a50014ecfaaa4482de0f3059feb2b273b93a3327..72418ad52f5ae23ccaee93d80d3164478e37f368 100644 --- a/arkui-plugins/ui-plugins/index.ts +++ b/arkui-plugins/ui-plugins/index.ts @@ -26,6 +26,7 @@ export function uiTransform(): Plugins { return { name: 'ui-plugin', parsed: parsedTransform, + bound: boundTransform, checked: checkedTransform, clean() { arkts.arktsGlobal.clearContext(); @@ -78,6 +79,21 @@ function parsedTransform(this: PluginContext): arkts.EtsScript | undefined { return script; } +function boundTransform(this: PluginContext): arkts.EtsScript | undefined { + let script: arkts.EtsScript | undefined; + console.log('[UI PLUGIN] AFTER BOUND ENTER'); + const contextPtr = this.getContextPtr() ?? arkts.arktsGlobal.compilerContext?.peer; + if (!!contextPtr) { + let program = arkts.getOrUpdateGlobalContext(contextPtr).program; + script = program.astNode; + arkts.Performance.getInstance().createEvent('rebind'); + arkts.rebindSubtree(script) + arkts.Performance.getInstance().stopEvent('rebind', false); + console.log('[UI PLUGIN] AFTER BOUND EXIT'); + } + return script; +} + function checkedTransform(this: PluginContext): arkts.EtsScript | undefined { let script: arkts.EtsScript | undefined; console.log('[UI PLUGIN] AFTER CHECKED ENTER');