|
12 | 12 | // config settings |
13 | 13 | // capitalized so they can be thought of as "constants" in user scripts |
14 | 14 | // but what are constants really |
15 | | - var ERASE_CYCLES = 100 |
| 15 | + var ERASE_CYCLES |
16 | 16 | var BLOCK_SIZE |
17 | 17 | var BLOCK_COUNT |
18 | 18 | var STATIC_FILE_COUNT |
|
53 | 53 | var staticfilessizeinput |
54 | 54 | var dynamicfilescountinput |
55 | 55 | var dynamicfilessizeinput |
| 56 | + var erasecyclesinput |
56 | 57 | var simspeedinput |
57 | 58 |
|
58 | 59 | // editors |
|
74 | 75 | staticfilessizeinput = document.getElementById('static-files-size') |
75 | 76 | dynamicfilescountinput = document.getElementById('dynamic-files-count') |
76 | 77 | dynamicfilessizeinput = document.getElementById('dynamic-files-size') |
| 78 | + erasecyclesinput = document.getElementById('erase-cycles') |
77 | 79 | simspeedinput = document.getElementById('sim-speed') |
78 | 80 |
|
79 | 81 | document.getElementById('apply').addEventListener('click', apply) |
80 | 82 | document.getElementById('reset').addEventListener('click', reset) |
| 83 | + document.getElementById('step').addEventListener('click', step) |
81 | 84 | document.getElementById('simulate').addEventListener('click', simulate) |
82 | 85 |
|
83 | 86 | // setup googly charts |
|
173 | 176 | } |
174 | 177 |
|
175 | 178 | var redrawinflight = false |
| 179 | + var allowpending = false |
| 180 | + var pendingredraw = false |
176 | 181 | function redraw() { |
177 | 182 | // run in animation frame to avoid melting |
178 | 183 | if (redrawinflight) { |
| 184 | + if (allowpending) { |
| 185 | + pendingredraw = true |
| 186 | + } |
179 | 187 | return |
180 | 188 | } |
| 189 | + |
181 | 190 | redrawinflight = true |
| 191 | + allowpending = false |
| 192 | + pendingredraw = false |
182 | 193 |
|
183 | 194 | requestAnimationFrame(function() { |
| 195 | + var start = performance.now() |
| 196 | + |
184 | 197 | // update charts |
185 | 198 | for (var i = 0; i < BLOCK_COUNT; i++) { |
186 | 199 | erasedata.setCell(1+i, 1, erases[i] || 0); |
|
228 | 241 | readops = [] |
229 | 242 | progops = [] |
230 | 243 | eraseops = [] |
231 | | - redrawinflight = false; |
| 244 | + |
| 245 | + // give us some breathing room |
| 246 | + var time = performance.now() - start |
| 247 | + allowpending = true |
| 248 | + setTimeout(function() { |
| 249 | + redrawinflight = false |
| 250 | + if (pendingredraw) { |
| 251 | + redraw() |
| 252 | + } |
| 253 | + }, time) |
232 | 254 | }) |
233 | 255 | } |
234 | 256 |
|
|
272 | 294 | STATIC_FILE_SIZE = eval(staticfilessizeinput.value) |
273 | 295 | DYNAMIC_FILE_COUNT = eval(dynamicfilescountinput.value) |
274 | 296 | DYNAMIC_FILE_SIZE = eval(dynamicfilessizeinput.value) |
| 297 | + ERASE_CYCLES = eval(erasecyclesinput.value) |
275 | 298 | SIM_DELAY = 1000/eval(simspeedinput.value) |
276 | 299 |
|
277 | 300 | var gridlines = BLOCK_COUNT; |
|
302 | 325 | erasedata.addRow([i, 0]) |
303 | 326 | } |
304 | 327 | eraseoptions.hAxis.ticks = ticks |
| 328 | + eraseoptions.vAxis.viewWindow.max = ERASE_CYCLES |
305 | 329 |
|
306 | 330 | if (useddata.getNumberOfRows()-1 > BLOCK_COUNT) { |
307 | 331 | useddata.removeRows(1+BLOCK_COUNT, |
|
326 | 350 | fstep = Function(stepeditor.getValue()) |
327 | 351 |
|
328 | 352 | // setup filesystem and storage |
329 | | - finit() |
| 353 | + var err = finit() |
330 | 354 | boots += 1 |
| 355 | + if (err) { |
| 356 | + console.log('error:', err) |
| 357 | + } |
331 | 358 |
|
332 | 359 | // trigger first draw |
333 | 360 | redraw() |
|
352 | 379 | redraw() |
353 | 380 | } |
354 | 381 |
|
| 382 | + function step() { |
| 383 | + simulating = false |
| 384 | + |
| 385 | + var err = fstep() |
| 386 | + boots += 1 |
| 387 | + if (err < 0) { |
| 388 | + console.log('error:', err) |
| 389 | + } |
| 390 | + } |
| 391 | + |
355 | 392 | var simulating = false |
356 | 393 | function simulate() { |
357 | 394 | if (simulating) { |
|
367 | 404 | var err = fstep() |
368 | 405 | boots += 1 |
369 | 406 | if (err < 0) { |
| 407 | + console.log('error:', err) |
370 | 408 | simulating = false |
371 | 409 | } |
372 | 410 |
|
|
410 | 448 | <table style="float:left"> |
411 | 449 | <tr> |
412 | 450 | <td><label>block size:</label></td> |
413 | | - <td><input id="block-size" type="text" size="6" value="4096"> bytes</td> |
| 451 | + <td><input id="block-size" type="text" size="6" value="512"> bytes</td> |
414 | 452 | </tr> |
415 | 453 | <tr> |
416 | 454 | <td><label>storage size:</label></td> |
417 | | - <td><input id="storage-size" type="text" size="6" value="64*4096"> bytes</td> |
| 455 | + <td><input id="storage-size" type="text" size="6" value="64*512"> bytes</td> |
418 | 456 | </tr> |
419 | 457 | </table> |
420 | 458 | <table style="float:left; margin-left:15px"> |
421 | 459 | <tr> |
422 | 460 | <td><label>static files:</label></td> |
423 | | - <td><input id="static-files-count" type="text" size="2" value="4"> x <input id="static-files-size" type="text" size="6" value="1024"> bytes</td> |
| 461 | + <td><input id="static-files-count" type="text" size="2" value="3"> x <input id="static-files-size" type="text" size="6" value="512"> bytes</td> |
424 | 462 | </tr> |
425 | 463 | <tr> |
426 | 464 | <td><label>dynamic files:</label></td> |
427 | | - <td><input id="dynamic-files-count" type="text" size="2" value="4"> x <input id="dynamic-files-size" type="text" size="6" value="1024"> bytes</td> |
| 465 | + <td><input id="dynamic-files-count" type="text" size="2" value="3"> x <input id="dynamic-files-size" type="text" size="6" value="512"> bytes</td> |
428 | 466 | </tr> |
429 | 467 | </table> |
430 | 468 | <table style="float:left; margin-left:15px"> |
| 469 | + <tr> |
| 470 | + <td><label>erase cycles:</label></td> |
| 471 | + <td><input id="erase-cycles" type="text" size=6" value="100"></td> |
| 472 | + </tr> |
431 | 473 | <tr> |
432 | 474 | <td><label>simulation speed:</label></td> |
433 | 475 | <td><input id="sim-speed" type="text" size=6" value="60"> hz</td> |
|
436 | 478 | <div style="float:left; margin-left:15px; transform:translateY(50%)"> |
437 | 479 | <button id="apply">apply</button> |
438 | 480 | <button id="reset">reset</button> |
| 481 | + <button id="step">step</button> |
439 | 482 | <button id="simulate">simulate</button> |
440 | 483 | </div> |
441 | 484 | <div style="clear:both"></div> |
|
0 commit comments