mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-09-12 20:57:42 +02:00
[eric] browser: settle-aware in-batch wait and a terminal read sub-action
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
// Renderer-side mirror of the backend's smart-wait (browser_wait.py): a `wait`
|
||||
// that returns the instant the page's network goes quiet instead of blind-sleeping
|
||||
// the full duration. A top-level BrowserWait already gets this on the backend, but
|
||||
// a `wait` INSIDE a BrowserBatch runs entirely here in the renderer, so without
|
||||
// this it would fall back to a dumb sleep and make batching slower than not batching.
|
||||
|
||||
export const SETTLE_FLOOR_MS = 250; // never settle before this (a momentary gap isn't 'settled')
|
||||
export const SETTLE_QUIET_MS = 400; // network must be silent this long to count as settled
|
||||
export const SETTLE_POLL_MS = 150;
|
||||
|
||||
// One probe: is the document complete, and how long since the last network resource
|
||||
// finished/started? Returns a JSON string. No interpolation, so it's injection-safe.
|
||||
export const SETTLE_PROBE_JS =
|
||||
"(()=>{const n=performance.now();" +
|
||||
"const es=performance.getEntriesByType('resource');let last=0;" +
|
||||
"for(const e of es){const t=Math.max(e.responseEnd||0,e.startTime||0);if(t>last)last=t;}" +
|
||||
"return JSON.stringify({ready:document.readyState==='complete',quiet:Math.round(n-last)});})()";
|
||||
|
||||
// Pure decision: stop waiting once we're past the floor AND the document is complete
|
||||
// AND the network has been quiet for the settle window.
|
||||
export function shouldStopWaiting(
|
||||
ready: boolean,
|
||||
quietMs: number,
|
||||
elapsedMs: number,
|
||||
floorMs = SETTLE_FLOOR_MS,
|
||||
quietWindowMs = SETTLE_QUIET_MS,
|
||||
): boolean {
|
||||
if (elapsedMs < floorMs) return false;
|
||||
return !!ready && (quietMs || 0) >= quietWindowMs;
|
||||
}
|
||||
Reference in New Issue
Block a user