Avoid nested calls to postFrameCallback, which will continuously request VSync frames, causing invalid rendering.
// code-linter.json5
{
"rules": {
"@performance/nested-post-frame-callback-check": "suggestion",
}
} import {FrameCallback } from '@kit.ArkUI';
class MyFrameCallback extends FrameCallback {
private tag: string;
constructor(tag: string) {
super();
this.tag = tag;
}
onFrame(frameTimeNanos: number) {
console.info('MyFrameCallback ' + this.tag + ' ' + frameTimeNanos.toString());
}
}
@Entry
@Component
struct Index {
build() {
Row() {
Button('Invoke postFrameCallback')
.onClick(() => {
this.getUIContext().postFrameCallback(new MyFrameCallback("normTask"));
})
}
}
} import { FrameCallback, UIContext } from '@kit.ArkUI';
class MyFrameCallback extends FrameCallback {
private tag: string;
constructor(tag: string) {
super();
this.tag = tag;
const uiContext = new UIContext();
uiContext.postFrameCallback(new MyFrameCallback1("normTask1"));
}
onFrame(frameTimeNanos: number) {
new UIContext().postFrameCallback(new MyFrameCallback1("normTask1"));
console.info('MyFrameCallback ' + this.tag + ' ' + frameTimeNanos.toString());
}
}
class MyFrameCallback1 extends FrameCallback {
private tag: string;
constructor(tag: string) {
super();
this.tag = tag;
}
onFrame(frameTimeNanos: number) {
console.info('MyFrameCallback1 ' + this.tag + ' ' + frameTimeNanos.toString());
}
}
@Entry
@Component
struct Index {
build() {
Row() {
Button('Nested postFrameCallback')
.onClick(() => {
this.getUIContext().postFrameCallback(new MyFrameCallback("normTask"));
})
}
}
} plugin:@performance/all
For details about how to configure Code Linter check rules, see Code Linter.