1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Redistribution and use in source and binary forms, with or without 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// modification, are permitted provided that the following conditions are 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// met: 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// * Redistributions of source code must retain the above copyright 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// notice, this list of conditions and the following disclaimer. 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// * Redistributions in binary form must reproduce the above 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// copyright notice, this list of conditions and the following 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// disclaimer in the documentation and/or other materials provided 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// with the distribution. 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// * Neither the name of Google Inc. nor the names of its 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// contributors may be used to endorse or promote products derived 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// from this software without specific prior written permission. 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar worker_scripts = [ 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../csvparser.js", 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../splaytree.js", 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../codemap.js", 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../consarray.js", 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../profile.js", 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../profile_view.js", 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../logreader.js", 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "../tickprocessor.js", 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "composer.js", 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "gnuplot-4.6.3-emscripten.js" 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch]; 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction plotWorker() { 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var worker = null; 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch function initialize() { 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.freeze(); 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worker = new Worker("worker.js"); 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch running = false; 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worker.postMessage({ "call" : "load scripts", 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "args" : worker_scripts }); 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worker.addEventListener("message", function(event) { 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var call = delegateList[event.data["call"]]; 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch call(event.data["args"]); 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }); 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch function scriptLoaded() { 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.thaw(); 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Public methods. 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.run = function(filename, 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch resx, resy, 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch distortion, 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch range_start, range_end) { 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var args = { 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'file' : filename, 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'resx' : resx, 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'resy' : resy, 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'distortion' : distortion, 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'range_start' : range_start, 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'range_end' : range_end 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worker.postMessage({ 'call' : 'run', 'args' : args }); 77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.reset = function() { 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (worker) worker.terminate(); 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch initialize(); 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var delegateList = { 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "log" : log, 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "error" : logError, 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "displayplot" : displayplot, 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "displayprof" : displayprof, 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "range" : setRange, 90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "script" : scriptLoaded, 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "reset" : this.reset 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 95b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction UIWrapper() { 97b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var input_elements = ["range_start", 98b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "range_end", 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "distortion", 100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "start", 101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "file"]; 102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var other_elements = ["log", 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "plot", 105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "prof", 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "instructions", 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "credits", 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "toggledisplay"]; 109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var i in input_elements) { 111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var id = input_elements[i]; 112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this[id] = document.getElementById(id); 113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var i in other_elements) { 116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var id = other_elements[i]; 117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this[id] = document.getElementById(id); 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.freeze = function() { 121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.plot.style.webkitFilter = "grayscale(1)"; 122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.prof.style.color = "#bbb"; 123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var i in input_elements) { 124b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this[input_elements[i]].disabled = true; 125b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 126b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.thaw = function() { 129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.plot.style.webkitFilter = ""; 130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.prof.style.color = "#000"; 131b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var i in input_elements) { 132b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this[input_elements[i]].disabled = false; 133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 136b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.reset = function() { 137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.thaw(); 138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.log.value = ""; 139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.range_start.value = "automatic"; 140b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.range_end.value = "automatic"; 141b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.toggle("plot"); 142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.plot.src = ""; 143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.prof.value = ""; 144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.toggle = function(mode) { 147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (mode) this.toggledisplay.next_mode = mode; 148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (this.toggledisplay.next_mode == "plot") { 149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.toggledisplay.next_mode = "prof"; 150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.plot.style.display = "block"; 151b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.prof.style.display = "none"; 152b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.toggledisplay.innerHTML = "Show profile"; 153b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else { 154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.toggledisplay.next_mode = "plot"; 155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.plot.style.display = "none"; 156b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.prof.style.display = "block"; 157b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.toggledisplay.innerHTML = "Show plot"; 158b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 159b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 160b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.info = function(field) { 162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var down_arrow = "\u25bc"; 163b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var right_arrow = "\u25b6"; 164b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (field && this[field].style.display != "none") field = null; // Toggle. 165b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.credits.style.display = "none"; 166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.instructions.style.display = "none"; 167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (!field) return; 168b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this[field].style.display = "block"; 169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 171b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 172b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction log(text) { 174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.log.value += text; 175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.log.scrollTop = ui.log.scrollHeight; 176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 178b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction logError(text) { 180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (ui.log.value.length > 0 && 181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.log.value[ui.log.value.length-1] != "\n") { 182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.log.value += "\n"; 183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 184b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.log.value += "ERROR: " + text + "\n"; 185b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.log.scrollTop = ui.log.scrollHeight; 186b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch error_logged = true; 187b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 188b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 189b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 190b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction displayplot(args) { 191b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (error_logged) { 192b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch log("Plot failed.\n\n"); 193b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else { 194b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch log("Displaying plot. Total time: " + 195b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (Date.now() - timer) / 1000 + "ms.\n\n"); 196b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var blob = new Blob([new Uint8Array(args.contents).buffer], 197b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { "type" : "image\/svg+xml" }); 198b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch window.URL = window.URL || window.webkitURL; 199b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.plot.src = window.URL.createObjectURL(blob); 200b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 201b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 202b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.thaw(); 203b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.toggle("plot"); 204b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 205b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 206b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction displayprof(args) { 208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (error_logged) return; 209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.prof.value = args; 210b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this.prof.style.color = ""; 211b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.toggle("prof"); 212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 213b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 214b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction start(event) { 216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch error_logged = false; 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.freeze(); 218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch try { 220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var file = getSelectedFile(); 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var distortion = getDistortion(); 222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var range = getRange(); 223b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } catch (e) { 224b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch logError(e.message); 225b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch display(); 226b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return; 227b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 228b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 229b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch timer = Date.now(); 230b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worker.run(file, kResX, kResY, distortion, range[0], range[1]); 231b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 233b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 234b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction getSelectedFile() { 235b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var file = ui.file.files[0]; 236b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (!file) throw Error("No valid file selected."); 237b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return file; 238b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 239b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 240b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 241b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction getDistortion() { 242b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var input_distortion = 243b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch parseInt(ui.distortion.value, 10); 244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (isNaN(input_distortion)) { 245b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch input_distortion = ui.distortion.value = 4500; 246b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return input_distortion / 1000000; 248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 249b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction getRange() { 252b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var input_start = 253b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch parseInt(ui.range_start.value, 10); 254b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (isNaN(input_start)) input_start = undefined; 255b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var input_end = 256b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch parseInt(ui.range_end.value, 10); 257b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (isNaN(input_end)) input_end = undefined; 258b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return [input_start, input_end]; 259b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 260b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 261b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 262b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction setRange(args) { 263b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.range_start.value = args.start.toFixed(1); 264b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.range_end.value = args.end.toFixed(1); 265b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 266b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 267b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 268b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction onload() { 269b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch kResX = 1200; 270b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch kResY = 600; 271b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch error_logged = false; 272b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui = new UIWrapper(); 273b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.reset(); 274b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ui.info(null); 275b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worker = new plotWorker(); 276b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worker.reset(); 277b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 278b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 279b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 280b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar kResX; 281b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar kResY; 282b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar error_logged; 283b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar ui; 284b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar worker; 285b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar timer; 286