Commit
·
b285a5d
1
Parent(s):
bcfe0f0
cleaning up logs in html demo
Browse files- magentaRT_rt_tester.html +33 -5
magentaRT_rt_tester.html
CHANGED
|
@@ -243,6 +243,11 @@
|
|
| 243 |
const queueEl = $("queue");
|
| 244 |
const logEl = $("log");
|
| 245 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 246 |
const rngMean = $("rngMean"), numMean = $("numMean");
|
| 247 |
const rngC1 = $("rngC1"), numC1 = $("numC1");
|
| 248 |
const rngC2 = $("rngC2"), numC2 = $("numC2");
|
|
@@ -307,12 +312,35 @@ function beginPlaybackFromPending() {
|
|
| 307 |
let connected = false;
|
| 308 |
let autoUpdateTimer = null;
|
| 309 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 310 |
function log(msg, cls) {
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
if (
|
| 314 |
-
|
| 315 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 316 |
}
|
| 317 |
|
| 318 |
function setStatus(txt) {
|
|
|
|
| 243 |
const queueEl = $("queue");
|
| 244 |
const logEl = $("log");
|
| 245 |
|
| 246 |
+
// --- Ring buffer logging (batched with rAF) ---
|
| 247 |
+
const LOG_MAX = 200; // keep last N lines
|
| 248 |
+
let logBuf = []; // [{msg, cls}]
|
| 249 |
+
let logFlushScheduled = false;
|
| 250 |
+
|
| 251 |
const rngMean = $("rngMean"), numMean = $("numMean");
|
| 252 |
const rngC1 = $("rngC1"), numC1 = $("numC1");
|
| 253 |
const rngC2 = $("rngC2"), numC2 = $("numC2");
|
|
|
|
| 312 |
let connected = false;
|
| 313 |
let autoUpdateTimer = null;
|
| 314 |
|
| 315 |
+
/**
|
| 316 |
+
* Push a line into the log ring and schedule a single repaint via rAF.
|
| 317 |
+
* This avoids per-append DOM work and forced reflow during capture.
|
| 318 |
+
*/
|
| 319 |
function log(msg, cls) {
|
| 320 |
+
logBuf.push({ msg: String(msg), cls: cls || "" });
|
| 321 |
+
// Trim oldest if we exceed capacity
|
| 322 |
+
if (logBuf.length > LOG_MAX) {
|
| 323 |
+
logBuf.splice(0, logBuf.length - LOG_MAX);
|
| 324 |
+
}
|
| 325 |
+
if (!logFlushScheduled) {
|
| 326 |
+
logFlushScheduled = true;
|
| 327 |
+
requestAnimationFrame(flushLog);
|
| 328 |
+
}
|
| 329 |
+
}
|
| 330 |
+
function flushLog() {
|
| 331 |
+
logFlushScheduled = false;
|
| 332 |
+
// If user is already at bottom, keep them there after the flush
|
| 333 |
+
const atBottom = (logEl.scrollTop + logEl.clientHeight + 4) >= logEl.scrollHeight;
|
| 334 |
+
// Rebuild using a fragment (fast for ~200 nodes)
|
| 335 |
+
const frag = document.createDocumentFragment();
|
| 336 |
+
for (const {msg, cls} of logBuf) {
|
| 337 |
+
const div = document.createElement("div");
|
| 338 |
+
if (cls) div.className = cls;
|
| 339 |
+
div.textContent = msg;
|
| 340 |
+
frag.appendChild(div);
|
| 341 |
+
}
|
| 342 |
+
logEl.replaceChildren(frag);
|
| 343 |
+
if (atBottom) logEl.scrollTop = logEl.scrollHeight;
|
| 344 |
}
|
| 345 |
|
| 346 |
function setStatus(txt) {
|