feat:Check dirty use Promise to scheme it to micro queue
This commit is contained in:
parent
4b1fcc439d
commit
665d11f8be
@ -736,40 +736,23 @@ class Panel {
|
|||||||
this.context.shader.render(model);
|
this.context.shader.render(model);
|
||||||
}
|
}
|
||||||
hookBeforeNativeCall() {
|
hookBeforeNativeCall() {
|
||||||
this.__root__.clean();
|
|
||||||
for (let v of this.headviews.values()) {
|
|
||||||
v.clean();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
hookAfterNativeCall() {
|
hookAfterNativeCall() {
|
||||||
//Here insert a native call to ensure the promise is resolved done.
|
//Here insert a native call to ensure the promise is resolved done.
|
||||||
if (Environment.platform === 'h5') {
|
Promise.resolve().then(() => {
|
||||||
setTimeout(() => {
|
|
||||||
if (this.__root__.isDirty()) {
|
|
||||||
const model = this.__root__.toModel();
|
|
||||||
this.nativeRender(model);
|
|
||||||
}
|
|
||||||
for (let v of this.headviews.values()) {
|
|
||||||
if (v.isDirty()) {
|
|
||||||
const model = v.toModel();
|
|
||||||
this.nativeRender(model);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
nativeEmpty();
|
|
||||||
if (this.__root__.isDirty()) {
|
if (this.__root__.isDirty()) {
|
||||||
const model = this.__root__.toModel();
|
const model = this.__root__.toModel();
|
||||||
this.nativeRender(model);
|
this.nativeRender(model);
|
||||||
|
this.__root__.clean();
|
||||||
}
|
}
|
||||||
for (let v of this.headviews.values()) {
|
for (let v of this.headviews.values()) {
|
||||||
if (v.isDirty()) {
|
if (v.isDirty()) {
|
||||||
const model = v.toModel();
|
const model = v.toModel();
|
||||||
this.nativeRender(model);
|
this.nativeRender(model);
|
||||||
|
v.clean();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__decorate$2([
|
__decorate$2([
|
||||||
|
@ -2184,40 +2184,23 @@ class Panel {
|
|||||||
this.context.shader.render(model);
|
this.context.shader.render(model);
|
||||||
}
|
}
|
||||||
hookBeforeNativeCall() {
|
hookBeforeNativeCall() {
|
||||||
this.__root__.clean();
|
|
||||||
for (let v of this.headviews.values()) {
|
|
||||||
v.clean();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
hookAfterNativeCall() {
|
hookAfterNativeCall() {
|
||||||
//Here insert a native call to ensure the promise is resolved done.
|
//Here insert a native call to ensure the promise is resolved done.
|
||||||
if (Environment.platform === 'h5') {
|
Promise.resolve().then(() => {
|
||||||
setTimeout(() => {
|
|
||||||
if (this.__root__.isDirty()) {
|
|
||||||
const model = this.__root__.toModel();
|
|
||||||
this.nativeRender(model);
|
|
||||||
}
|
|
||||||
for (let v of this.headviews.values()) {
|
|
||||||
if (v.isDirty()) {
|
|
||||||
const model = v.toModel();
|
|
||||||
this.nativeRender(model);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
nativeEmpty();
|
|
||||||
if (this.__root__.isDirty()) {
|
if (this.__root__.isDirty()) {
|
||||||
const model = this.__root__.toModel();
|
const model = this.__root__.toModel();
|
||||||
this.nativeRender(model);
|
this.nativeRender(model);
|
||||||
|
this.__root__.clean();
|
||||||
}
|
}
|
||||||
for (let v of this.headviews.values()) {
|
for (let v of this.headviews.values()) {
|
||||||
if (v.isDirty()) {
|
if (v.isDirty()) {
|
||||||
const model = v.toModel();
|
const model = v.toModel();
|
||||||
this.nativeRender(model);
|
this.nativeRender(model);
|
||||||
|
v.clean();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__decorate$2([
|
__decorate$2([
|
||||||
|
@ -20,7 +20,6 @@ import { Model } from '../util/types'
|
|||||||
import { Root } from '../widget/layouts'
|
import { Root } from '../widget/layouts'
|
||||||
import { BridgeContext } from '../runtime/global'
|
import { BridgeContext } from '../runtime/global'
|
||||||
|
|
||||||
|
|
||||||
export function NativeCall(target: Panel, propertyKey: string, descriptor: PropertyDescriptor) {
|
export function NativeCall(target: Panel, propertyKey: string, descriptor: PropertyDescriptor) {
|
||||||
const originVal = descriptor.value
|
const originVal = descriptor.value
|
||||||
descriptor.value = function () {
|
descriptor.value = function () {
|
||||||
@ -32,8 +31,6 @@ export function NativeCall(target: Panel, propertyKey: string, descriptor: Prope
|
|||||||
|
|
||||||
type Frame = { width: number, height: number }
|
type Frame = { width: number, height: number }
|
||||||
|
|
||||||
declare function nativeEmpty(): void
|
|
||||||
|
|
||||||
export abstract class Panel {
|
export abstract class Panel {
|
||||||
context!: BridgeContext
|
context!: BridgeContext
|
||||||
onCreate() { }
|
onCreate() { }
|
||||||
@ -144,40 +141,24 @@ export abstract class Panel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private hookBeforeNativeCall() {
|
private hookBeforeNativeCall() {
|
||||||
this.__root__.clean()
|
|
||||||
for (let v of this.headviews.values()) {
|
|
||||||
v.clean()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private hookAfterNativeCall() {
|
private hookAfterNativeCall() {
|
||||||
//Here insert a native call to ensure the promise is resolved done.
|
//Here insert a native call to ensure the promise is resolved done.
|
||||||
if (Environment.platform === 'h5') {
|
Promise.resolve().then(() => {
|
||||||
setTimeout(() => {
|
|
||||||
if (this.__root__.isDirty()) {
|
|
||||||
const model = this.__root__.toModel()
|
|
||||||
this.nativeRender(model)
|
|
||||||
}
|
|
||||||
for (let v of this.headviews.values()) {
|
|
||||||
if (v.isDirty()) {
|
|
||||||
const model = v.toModel()
|
|
||||||
this.nativeRender(model)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 0)
|
|
||||||
} else {
|
|
||||||
nativeEmpty()
|
|
||||||
if (this.__root__.isDirty()) {
|
if (this.__root__.isDirty()) {
|
||||||
const model = this.__root__.toModel()
|
const model = this.__root__.toModel()
|
||||||
this.nativeRender(model)
|
this.nativeRender(model)
|
||||||
|
this.__root__.clean()
|
||||||
}
|
}
|
||||||
for (let v of this.headviews.values()) {
|
for (let v of this.headviews.values()) {
|
||||||
if (v.isDirty()) {
|
if (v.isDirty()) {
|
||||||
const model = v.toModel()
|
const model = v.toModel()
|
||||||
this.nativeRender(model)
|
this.nativeRender(model)
|
||||||
|
v.clean()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user