Optimize unify panel hook after code
This commit is contained in:
parent
dd4e8db3ad
commit
6046bf6163
@ -1275,18 +1275,32 @@ var Panel = /** @class */ (function () {
|
||||
return this.context.callNative("shader", "render", model);
|
||||
};
|
||||
Panel.prototype.hookBeforeNativeCall = function () {
|
||||
};
|
||||
Panel.prototype.hookAfterNativeCall = function () {
|
||||
var e_2, _a, e_3, _b;
|
||||
if (Environment.platform !== 'web') {
|
||||
var _this = this;
|
||||
if (this.destroyed) {
|
||||
return;
|
||||
}
|
||||
var promises = [];
|
||||
if (this.__root__.isDirty()) {
|
||||
var model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
this.__root__.clean();
|
||||
}
|
||||
try {
|
||||
for (var _c = __values$3(this.headviews.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
|
||||
var map = _d.value;
|
||||
try {
|
||||
for (var _e = (e_3 = void 0, __values$3(map.values())), _f = _e.next(); !_f.done; _f = _e.next()) {
|
||||
var v = _f.value;
|
||||
if (v.isDirty()) {
|
||||
var model = v.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
v.clean();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
||||
finally {
|
||||
try {
|
||||
@ -1303,50 +1317,6 @@ var Panel = /** @class */ (function () {
|
||||
}
|
||||
finally { if (e_2) { throw e_2.error; } }
|
||||
}
|
||||
}
|
||||
};
|
||||
Panel.prototype.hookAfterNativeCall = function () {
|
||||
var e_4, _a, e_5, _b;
|
||||
var _this = this;
|
||||
if (this.destroyed) {
|
||||
return;
|
||||
}
|
||||
var promises = [];
|
||||
if (Environment.platform !== 'web') {
|
||||
//Here insert a native call to ensure the promise is resolved done.
|
||||
//nativeEmpty()
|
||||
if (this.__root__.isDirty()) {
|
||||
var model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
try {
|
||||
for (var _c = __values$3(this.headviews.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
|
||||
var map = _d.value;
|
||||
try {
|
||||
for (var _e = (e_5 = void 0, __values$3(map.values())), _f = _e.next(); !_f.done; _f = _e.next()) {
|
||||
var v = _f.value;
|
||||
if (v.isDirty()) {
|
||||
var model = v.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (_f && !_f.done && (_b = _e.return)) { _b.call(_e); }
|
||||
}
|
||||
finally { if (e_5) { throw e_5.error; } }
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (_d && !_d.done && (_a = _c.return)) { _a.call(_c); }
|
||||
}
|
||||
finally { if (e_4) { throw e_4.error; } }
|
||||
}
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(function (_) {
|
||||
@ -1359,55 +1329,6 @@ var Panel = /** @class */ (function () {
|
||||
_this.onRenderFinished();
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
return;
|
||||
}
|
||||
this.__rendering__ = true;
|
||||
Function("return this")().setTimeout(function () {
|
||||
var e_6, _a, e_7, _b;
|
||||
if (_this.__root__.isDirty()) {
|
||||
var model = _this.__root__.toModel();
|
||||
promises.push(_this.nativeRender(model));
|
||||
_this.__root__.clean();
|
||||
}
|
||||
try {
|
||||
for (var _c = __values$3(_this.headviews.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
|
||||
var map = _d.value;
|
||||
try {
|
||||
for (var _e = (e_7 = void 0, __values$3(map.values())), _f = _e.next(); !_f.done; _f = _e.next()) {
|
||||
var v = _f.value;
|
||||
if (v.isDirty()) {
|
||||
var model = v.toModel();
|
||||
promises.push(_this.nativeRender(model));
|
||||
v.clean();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (_f && !_f.done && (_b = _e.return)) { _b.call(_e); }
|
||||
}
|
||||
finally { if (e_7) { throw e_7.error; } }
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
||||
finally {
|
||||
try {
|
||||
if (_d && !_d.done && (_a = _c.return)) { _a.call(_c); }
|
||||
}
|
||||
finally { if (e_6) { throw e_6.error; } }
|
||||
}
|
||||
_this.__rendering__ = false;
|
||||
Promise.all(promises).then(function (_) {
|
||||
_this.onRenderFinished();
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
};
|
||||
Panel.prototype.onRenderFinished = function () {
|
||||
this.onRenderFinishedCallback.forEach(function (e) {
|
||||
|
@ -980,55 +980,12 @@ class Panel {
|
||||
return this.context.callNative("shader", "render", model);
|
||||
}
|
||||
hookBeforeNativeCall() {
|
||||
if (Environment.platform !== 'web') {
|
||||
this.__root__.clean();
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
v.clean();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
hookAfterNativeCall() {
|
||||
if (this.destroyed) {
|
||||
return;
|
||||
}
|
||||
const promises = [];
|
||||
if (Environment.platform !== 'web') {
|
||||
//Here insert a native call to ensure the promise is resolved done.
|
||||
//nativeEmpty()
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
if (v.isDirty()) {
|
||||
const model = v.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
return;
|
||||
}
|
||||
this.__rendering__ = true;
|
||||
Function("return this")().setTimeout(() => {
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
@ -1043,11 +1000,17 @@ class Panel {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.__rendering__ = false;
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
onRenderFinished() {
|
||||
|
@ -1222,7 +1222,7 @@ var doric = (function (exports) {
|
||||
*/
|
||||
function hookBeforeNativeCall(context) {
|
||||
if (context) {
|
||||
Reflect.defineMetadata('__doric_context__', context, global$2);
|
||||
setContext(context);
|
||||
context.hookBeforeNativeCall();
|
||||
}
|
||||
}
|
||||
|
@ -1200,7 +1200,7 @@ var doric = (function (exports) {
|
||||
*/
|
||||
function hookBeforeNativeCall(context) {
|
||||
if (context) {
|
||||
Reflect.defineMetadata('__doric_context__', context, global$1);
|
||||
setContext(context);
|
||||
context.hookBeforeNativeCall();
|
||||
}
|
||||
}
|
||||
|
@ -1229,7 +1229,7 @@ var Reflect$1;
|
||||
*/
|
||||
function hookBeforeNativeCall(context) {
|
||||
if (context) {
|
||||
Reflect.defineMetadata('__doric_context__', context, global$2);
|
||||
setContext(context);
|
||||
context.hookBeforeNativeCall();
|
||||
}
|
||||
}
|
||||
@ -2501,55 +2501,12 @@ class Panel {
|
||||
return this.context.callNative("shader", "render", model);
|
||||
}
|
||||
hookBeforeNativeCall() {
|
||||
if (Environment.platform !== 'web') {
|
||||
this.__root__.clean();
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
v.clean();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
hookAfterNativeCall() {
|
||||
if (this.destroyed) {
|
||||
return;
|
||||
}
|
||||
const promises = [];
|
||||
if (Environment.platform !== 'web') {
|
||||
//Here insert a native call to ensure the promise is resolved done.
|
||||
//nativeEmpty()
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
if (v.isDirty()) {
|
||||
const model = v.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
return;
|
||||
}
|
||||
this.__rendering__ = true;
|
||||
Function("return this")().setTimeout(() => {
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
@ -2564,11 +2521,17 @@ class Panel {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.__rendering__ = false;
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
onRenderFinished() {
|
||||
|
@ -18,7 +18,7 @@ import { loge } from "../util/log";
|
||||
import "reflect-metadata";
|
||||
function hookBeforeNativeCall(context) {
|
||||
if (context) {
|
||||
Reflect.defineMetadata('__doric_context__', context, global);
|
||||
setContext(context);
|
||||
context.hookBeforeNativeCall();
|
||||
}
|
||||
}
|
||||
|
@ -166,55 +166,12 @@ export class Panel {
|
||||
return this.context.callNative("shader", "render", model);
|
||||
}
|
||||
hookBeforeNativeCall() {
|
||||
if (Environment.platform !== 'web') {
|
||||
this.__root__.clean();
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
v.clean();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
hookAfterNativeCall() {
|
||||
if (this.destroyed) {
|
||||
return;
|
||||
}
|
||||
const promises = [];
|
||||
if (Environment.platform !== 'web') {
|
||||
//Here insert a native call to ensure the promise is resolved done.
|
||||
//nativeEmpty()
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
if (v.isDirty()) {
|
||||
const model = v.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
return;
|
||||
}
|
||||
this.__rendering__ = true;
|
||||
Function("return this")().setTimeout(() => {
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
@ -229,11 +186,17 @@ export class Panel {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.__rendering__ = false;
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
onRenderFinished() {
|
||||
|
@ -54,7 +54,7 @@ declare function nativeClearTimer(timerId: number): void
|
||||
|
||||
function hookBeforeNativeCall(context?: Context) {
|
||||
if (context) {
|
||||
Reflect.defineMetadata('__doric_context__', context, global)
|
||||
setContext(context)
|
||||
context.hookBeforeNativeCall()
|
||||
}
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ declare function nativeClearTimer(timerId: number): void
|
||||
|
||||
function hookBeforeNativeCall(context?: Context) {
|
||||
if (context) {
|
||||
Reflect.defineMetadata('__doric_context__', context, global)
|
||||
setContext(context)
|
||||
context.hookBeforeNativeCall()
|
||||
}
|
||||
}
|
||||
|
@ -195,14 +195,6 @@ export abstract class Panel {
|
||||
}
|
||||
|
||||
private hookBeforeNativeCall() {
|
||||
if (Environment.platform !== 'web') {
|
||||
this.__root__.clean()
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
v.clean()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private hookAfterNativeCall() {
|
||||
@ -210,39 +202,6 @@ export abstract class Panel {
|
||||
return
|
||||
}
|
||||
const promises: Promise<any>[] = []
|
||||
if (Environment.platform !== 'web') {
|
||||
//Here insert a native call to ensure the promise is resolved done.
|
||||
//nativeEmpty()
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel()
|
||||
promises.push(this.nativeRender(model))
|
||||
}
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
if (v.isDirty()) {
|
||||
const model = v.toModel()
|
||||
promises.push(this.nativeRender(model))
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
})
|
||||
} else {
|
||||
this.__rendering__ = true
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false
|
||||
this.onRenderFinished()
|
||||
})
|
||||
}
|
||||
} else {
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
return;
|
||||
}
|
||||
this.__rendering__ = true
|
||||
Function("return this")().setTimeout(() => {
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel()
|
||||
promises.push(this.nativeRender(model))
|
||||
@ -257,11 +216,16 @@ export abstract class Panel {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.__rendering__ = false
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
})
|
||||
} else {
|
||||
this.__rendering__ = true
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false
|
||||
this.onRenderFinished()
|
||||
})
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
|
||||
|
77
doric-web/dist/index.js
vendored
77
doric-web/dist/index.js
vendored
@ -1202,7 +1202,7 @@ var doric = (function (exports) {
|
||||
*/
|
||||
function hookBeforeNativeCall(context) {
|
||||
if (context) {
|
||||
Reflect.defineMetadata('__doric_context__', context, global$1);
|
||||
setContext(context);
|
||||
context.hookBeforeNativeCall();
|
||||
}
|
||||
}
|
||||
@ -2555,55 +2555,12 @@ class Panel {
|
||||
return this.context.callNative("shader", "render", model);
|
||||
}
|
||||
hookBeforeNativeCall() {
|
||||
if (Environment.platform !== 'web') {
|
||||
this.__root__.clean();
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
v.clean();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
hookAfterNativeCall() {
|
||||
if (this.destroyed) {
|
||||
return;
|
||||
}
|
||||
const promises = [];
|
||||
if (Environment.platform !== 'web') {
|
||||
//Here insert a native call to ensure the promise is resolved done.
|
||||
//nativeEmpty()
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
for (let map of this.headviews.values()) {
|
||||
for (let v of map.values()) {
|
||||
if (v.isDirty()) {
|
||||
const model = v.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
return;
|
||||
}
|
||||
this.__rendering__ = true;
|
||||
Function("return this")().setTimeout(() => {
|
||||
if (this.__root__.isDirty()) {
|
||||
const model = this.__root__.toModel();
|
||||
promises.push(this.nativeRender(model));
|
||||
@ -2618,11 +2575,17 @@ class Panel {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.__rendering__ = false;
|
||||
if (this.__rendering__) {
|
||||
//skip
|
||||
Promise.all(promises).then(_ => {
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.__rendering__ = true;
|
||||
Promise.all(promises).then(_ => {
|
||||
this.__rendering__ = false;
|
||||
this.onRenderFinished();
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
onRenderFinished() {
|
||||
@ -7525,7 +7488,6 @@ ${content}
|
||||
injectGlobalObject("Environment", {
|
||||
platform: "web"
|
||||
});
|
||||
injectGlobalObject("nativeEmpty", () => undefined);
|
||||
injectGlobalObject('nativeLog', (type, message) => {
|
||||
switch (type) {
|
||||
case 'd':
|
||||
@ -7578,13 +7540,16 @@ ${content}
|
||||
if (ret instanceof Promise) {
|
||||
ret.then(e => {
|
||||
sandbox.jsCallResolve(contextId, callbackId, e);
|
||||
markNeedHook();
|
||||
}, e => {
|
||||
sandbox.jsCallReject(contextId, callbackId, e);
|
||||
markNeedHook();
|
||||
});
|
||||
}
|
||||
else if (ret !== undefined) {
|
||||
Promise.resolve(ret).then((ret) => {
|
||||
sandbox.jsCallResolve(contextId, callbackId, ret);
|
||||
markNeedHook();
|
||||
});
|
||||
}
|
||||
return true;
|
||||
@ -7593,12 +7558,14 @@ ${content}
|
||||
if (repeat) {
|
||||
const handleId = originSetInterval(() => {
|
||||
sandbox.jsCallbackTimer(timerId);
|
||||
markNeedHook();
|
||||
}, time);
|
||||
timers.set(timerId, { handleId, repeat });
|
||||
}
|
||||
else {
|
||||
const handleId = originSetTimeout(() => {
|
||||
sandbox.jsCallbackTimer(timerId);
|
||||
markNeedHook();
|
||||
}, time);
|
||||
timers.set(timerId, { handleId, repeat });
|
||||
}
|
||||
@ -7625,6 +7592,17 @@ ${content}
|
||||
document.body.removeChild(scriptElement);
|
||||
}
|
||||
}
|
||||
let requesting = false;
|
||||
function markNeedHook() {
|
||||
if (requesting) {
|
||||
return;
|
||||
}
|
||||
requesting = true;
|
||||
requestAnimationFrame(() => {
|
||||
sandbox.jsHookAfterNativeCall();
|
||||
requesting = false;
|
||||
});
|
||||
}
|
||||
initDoric();
|
||||
|
||||
const doricContexts = new Map;
|
||||
@ -7663,7 +7641,9 @@ ${content}
|
||||
for (let i = 0; i < arguments.length; i++) {
|
||||
argumentsList.push(arguments[i]);
|
||||
}
|
||||
return Reflect.apply(sandbox.jsCallEntityMethod, this.panel, argumentsList);
|
||||
const ret = Reflect.apply(sandbox.jsCallEntityMethod, this.panel, argumentsList);
|
||||
markNeedHook();
|
||||
return ret;
|
||||
}
|
||||
pureInvokeEntityMethod(method, ...otherArgs) {
|
||||
const argumentsList = [this.contextId];
|
||||
@ -7841,6 +7821,7 @@ ${content}
|
||||
exports.destroyContext = destroyContext;
|
||||
exports.injectGlobalObject = injectGlobalObject;
|
||||
exports.loadJS = loadJS;
|
||||
exports.markNeedHook = markNeedHook;
|
||||
exports.pixelString2Number = pixelString2Number;
|
||||
exports.registerJSBundle = registerJSBundle;
|
||||
exports.registerPlugin = registerPlugin;
|
||||
|
2
doric-web/dist/index.js.map
vendored
2
doric-web/dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
||||
import { jsObtainContext, jsCallEntityMethod, pureCallEntityMethod } from 'doric/src/runtime/sandbox'
|
||||
import { Panel } from 'doric'
|
||||
import { DoricPlugin } from "./DoricPlugin"
|
||||
import { createContext, destroyContext } from "./DoricDriver"
|
||||
import { createContext, destroyContext, markNeedHook } from "./DoricDriver"
|
||||
import { DoricStackNode } from './shader/DoricStackNode'
|
||||
import { DoricViewNode } from './shader/DoricViewNode'
|
||||
const doricContexts: Map<string, DoricContext> = new Map
|
||||
@ -51,7 +51,9 @@ export class DoricContext {
|
||||
for (let i = 0; i < arguments.length; i++) {
|
||||
argumentsList.push(arguments[i])
|
||||
}
|
||||
return Reflect.apply(jsCallEntityMethod, this.panel, argumentsList)
|
||||
const ret = Reflect.apply(jsCallEntityMethod, this.panel, argumentsList)
|
||||
markNeedHook()
|
||||
return ret
|
||||
}
|
||||
|
||||
pureInvokeEntityMethod(method: string, ...otherArgs: any) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { jsCallResolve, jsCallReject, jsCallbackTimer, jsReleaseContext } from 'doric/src/runtime/sandbox'
|
||||
import { jsCallResolve, jsCallReject, jsCallbackTimer, jsReleaseContext, jsHookAfterNativeCall } from 'doric/src/runtime/sandbox'
|
||||
import { acquireJSBundle, acquirePlugin } from './DoricRegistry'
|
||||
import { getDoricContext } from './DoricContext'
|
||||
import { DoricPlugin } from './DoricPlugin'
|
||||
@ -44,8 +44,6 @@ function initDoric() {
|
||||
platform: "web"
|
||||
})
|
||||
|
||||
injectGlobalObject("nativeEmpty", () => undefined)
|
||||
|
||||
injectGlobalObject('nativeLog', (type: 'd' | 'w' | 'e', message: string) => {
|
||||
switch (type) {
|
||||
case 'd':
|
||||
@ -99,13 +97,16 @@ function initDoric() {
|
||||
ret.then(
|
||||
e => {
|
||||
jsCallResolve(contextId, callbackId, e)
|
||||
markNeedHook()
|
||||
},
|
||||
e => {
|
||||
jsCallReject(contextId, callbackId, e)
|
||||
markNeedHook()
|
||||
})
|
||||
} else if (ret !== undefined) {
|
||||
Promise.resolve(ret).then((ret) => {
|
||||
jsCallResolve(contextId, callbackId, ret)
|
||||
markNeedHook()
|
||||
})
|
||||
}
|
||||
return true
|
||||
@ -115,11 +116,13 @@ function initDoric() {
|
||||
if (repeat) {
|
||||
const handleId = originSetInterval(() => {
|
||||
jsCallbackTimer(timerId)
|
||||
markNeedHook()
|
||||
}, time)
|
||||
timers.set(timerId, { handleId, repeat })
|
||||
} else {
|
||||
const handleId = originSetTimeout(() => {
|
||||
jsCallbackTimer(timerId)
|
||||
markNeedHook()
|
||||
}, time)
|
||||
timers.set(timerId, { handleId, repeat })
|
||||
}
|
||||
@ -146,4 +149,17 @@ export function destroyContext(contextId: string) {
|
||||
document.body.removeChild(scriptElement)
|
||||
}
|
||||
}
|
||||
|
||||
let requesting = false
|
||||
|
||||
export function markNeedHook() {
|
||||
if (requesting) {
|
||||
return
|
||||
}
|
||||
requesting = true
|
||||
requestAnimationFrame(() => {
|
||||
jsHookAfterNativeCall()
|
||||
requesting = false
|
||||
})
|
||||
}
|
||||
initDoric()
|
Reference in New Issue
Block a user