diff --git a/doc/notes.txt b/doc/notes.txt index 8975f087..bc49385d 100644 --- a/doc/notes.txt +++ b/doc/notes.txt @@ -91,6 +91,7 @@ window methods: - global symbols - pixel editor / find comment (openBitmapEditorAtCursor) - update debug window (200 ms) +- inspect variable file store mirrors that on worker diff --git a/src/ui.js b/src/ui.js index 0617d0e4..ac1483d6 100644 --- a/src/ui.js +++ b/src/ui.js @@ -6,7 +6,6 @@ function installErrorHandler() { window.onerror = function (msgevent, url, line, col, error) { console.log(msgevent, url, line, col); console.log(error); - //$("#editor").hide(); if (window.location.host.endsWith('8bitworkshop.com')) { ga('send', 'exception', { 'exDescription': msgevent + " " + url + " " + " " + line + ":" + col + ", " + error, @@ -388,12 +387,6 @@ function updateSelector() { sel.off('change').change(function(e) { gotoPresetNamed($(this).val()); }); - $("#preset_prev").off('click').click(function() { - gotoPresetAt(current_preset_index - 1); - }); - $("#preset_next").off('click').click(function() { - gotoPresetAt(current_preset_index + 1); - }); } function loadFileDependencies(text, callback) { @@ -493,6 +486,7 @@ function setCompileOutput(data) { current_output = null; } else { // load ROM + // TODO: don't have to compare anymore; worker does it var rom = data.output; var rom_changed = false; if (rom && rom.code) @@ -1256,6 +1250,7 @@ var qs = (function (a) { return b; })(window.location.search.substr(1).split('&')); +// TODO: what if multiple files/tools? function preloadWorker(fileid) { var tool = platform.getToolForFilename(fileid); if (tool) worker.postMessage({preload:tool, platform:platform_id}); diff --git a/src/worker/workermain.js b/src/worker/workermain.js index 0ad6b738..e0bec20d 100644 --- a/src/worker/workermain.js +++ b/src/worker/workermain.js @@ -131,8 +131,9 @@ function endtime(msg) { _t2 = new Date(); console.log(msg, _t2.getTime() - _t1.g /// working file store and build steps var buildsteps = []; +var buildstartseq = 0; var workfs = {}; -var workerseq = 1; +var workerseq = 0; function compareData(a,b) { if (a.length != b.length) return false; @@ -151,12 +152,23 @@ function putWorkFile(path, data) { var encoding = (typeof data === 'string') ? 'utf8' : 'binary'; var entry = workfs[path]; if (!entry || !compareData(entry.data, data) || entry.encoding != encoding) { - workfs[path] = entry = {path:path, data:data, encoding:encoding, ts:workerseq++}; + workfs[path] = entry = {path:path, data:data, encoding:encoding, ts:++workerseq}; console.log('+++', entry.path, entry.encoding, entry.data.length, entry.ts); } return entry; } +// returns true if file changed during this build step +function wasChanged(entry) { + return entry.ts > buildstartseq; +} + +/*function anyFilesChanged() { + for (var key in workfs) + if (wasChanged(workfs[key])) return true; + return false; +}*/ + function populateEntry(fs, path, entry) { fs.writeFile(path, entry.data, {encoding:entry.encoding}); fs.utime(path, entry.ts, entry.ts); @@ -207,6 +219,7 @@ function populateFiles(step, fs, options) { function staleFiles(step, targets) { if (!step.maxts) throw "call populateFiles() first"; + // see if any target files are more recent than inputs for (var i=0; i entry.ts) @@ -606,6 +619,12 @@ function linkLD65(step) { var aout = FS.readFile("main", {encoding:'binary'}); var mapout = FS.readFile("main.map", {encoding:'utf8'}); var viceout = FS.readFile("main.vice", {encoding:'utf8'}); + putWorkFile("main", aout); + putWorkFile("main.map", mapout); + putWorkFile("main.vice", viceout); + // return unchanged if no files changed + if (!staleFiles(step, ["main", "main.map", "main.vice"])) + return; // parse symbol map (TODO: omit segments, constants) var symbolmap = {}; for (var s of viceout.split("\n")) { @@ -629,9 +648,6 @@ function linkLD65(step) { }; } } - putWorkFile("main", aout); - putWorkFile("main.map", mapout); - putWorkFile("main.vice", viceout); return { output:aout, //.slice(0), listings:listings, @@ -811,6 +827,12 @@ function linkSDLDZ80(step) execMain(step, LDZ80, args); var hexout = FS.readFile("main.ihx", {encoding:'utf8'}); var mapout = FS.readFile("main.noi", {encoding:'utf8'}); + putWorkFile("main.ihx", hexout); + putWorkFile("main.noi", mapout); + // return unchanged if no files changed + if (!staleFiles(step, ["main.ihx", "main.noi"])) + return; + var listings = {}; for (var fn of step.files) { if (fn.endsWith('.lst')) { @@ -834,7 +856,6 @@ function linkSDLDZ80(step) symbolmap[toks[1]] = parseInt(toks[2], 16); } } - putWorkFile("main.ihx", hexout); return { output:parseIHX(hexout, params.rom_start?params.rom_start:params.code_start, params.rom_size), listings:listings, @@ -1218,6 +1239,7 @@ var TOOL_PRELOADFS = { } function executeBuildSteps() { + buildstartseq = workerseq; while (buildsteps.length) { var step = buildsteps.shift(); // get top of array var code = step.code;