mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 09:37:26 +08:00
This commit is contained in:
1 parent
ce9de329d9
commit
f3577afd22
1 file changed
+2
-21
+2
-21
@@ -1533,10 +1533,10 @@ function schedulePageRender() {
|
|||||||
|
|
||||||
async function processPageRenderQueue() {
|
async function processPageRenderQueue() {
|
||||||
try {
|
try {
|
||||||
|
await nextFrame();
|
||||||
while (state.pageRenderQueue.length) {
|
while (state.pageRenderQueue.length) {
|
||||||
state.pageRenderQueue.sort(comparePageRenderTask);
|
state.pageRenderQueue.sort(comparePageRenderTask);
|
||||||
const task = state.pageRenderQueue.shift();
|
const task = state.pageRenderQueue.shift();
|
||||||
let delayed = false;
|
|
||||||
try {
|
try {
|
||||||
if (task.openSeq !== state.openSeq) {
|
if (task.openSeq !== state.openSeq) {
|
||||||
task.resolve(null);
|
task.resolve(null);
|
||||||
@@ -1546,16 +1546,6 @@ async function processPageRenderQueue() {
|
|||||||
task.resolve(state.pageCache.get(task.index));
|
task.resolve(state.pageCache.get(task.index));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
await nextFrame();
|
|
||||||
if (task.openSeq !== state.openSeq) {
|
|
||||||
task.resolve(null);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (shouldDelayPageTask(task)) {
|
|
||||||
state.pageRenderQueue.push(task);
|
|
||||||
delayed = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const page = await callWASM("ofdgoRenderPage", task.index);
|
const page = await callWASM("ofdgoRenderPage", task.index);
|
||||||
if (task.openSeq === state.openSeq) {
|
if (task.openSeq === state.openSeq) {
|
||||||
state.pageCache.set(task.index, page);
|
state.pageCache.set(task.index, page);
|
||||||
@@ -1565,23 +1555,14 @@ async function processPageRenderQueue() {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
task.reject(err);
|
task.reject(err);
|
||||||
} finally {
|
} finally {
|
||||||
if (!delayed) {
|
state.pageInFlight.delete(task.key);
|
||||||
state.pageInFlight.delete(task.key);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
state.pageRenderRunning = false;
|
state.pageRenderRunning = false;
|
||||||
if (state.pageRenderQueue.length) {
|
|
||||||
schedulePageRender();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function shouldDelayPageTask(task) {
|
|
||||||
return state.pageRenderQueue.some((next) => next.openSeq === state.openSeq && comparePageRenderTask(next, task) < 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function comparePageRenderTask(a, b) {
|
function comparePageRenderTask(a, b) {
|
||||||
return a.priority - b.priority || Math.abs(a.index - state.pageIndex) - Math.abs(b.index - state.pageIndex);
|
return a.priority - b.priority || Math.abs(a.index - state.pageIndex) - Math.abs(b.index - state.pageIndex);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user