1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5function moduleDidLoad() { 6} 7 8function postThreadFunc(numThreads) { 9 return function () { 10 common.naclModule.postMessage({'message' : 'set_threads', 11 'value' : numThreads}); 12 } 13} 14 15// Add event listeners after the NaCl module has loaded. These listeners will 16// forward messages to the NaCl module via postMessage() 17function attachListeners() { 18 document.getElementById('benchmark').addEventListener('click', 19 function() { 20 common.naclModule.postMessage({'message' : 'run benchmark'}); 21 common.updateStatus('BENCHMARKING... (please wait)'); 22 }); 23 var threads = [0, 1, 2, 4, 6, 8, 12, 16, 24, 32]; 24 for (var i = 0; i < threads.length; i++) { 25 document.getElementById('radio'+i).addEventListener('click', 26 postThreadFunc(threads[i])); 27 } 28 document.getElementById('zoomRange').addEventListener('input', 29 function() { 30 var value = parseFloat(document.getElementById('zoomRange').value); 31 common.naclModule.postMessage({'message' : 'set_zoom', 32 'value' : value}); 33 }); 34 document.getElementById('lightRange').addEventListener('input', 35 function() { 36 var value = parseFloat(document.getElementById('lightRange').value); 37 common.naclModule.postMessage({'message' : 'set_light', 38 'value' : value}); 39 }); 40} 41 42// Load a texture and send pixel data down to NaCl module. 43function loadTexture(name) { 44 // Load image from jpg, decompress into canvas. 45 var img = new Image(); 46 img.onload = function() { 47 var graph = document.createElement('canvas'); 48 graph.width = img.width; 49 graph.height = img.height; 50 var context = graph.getContext('2d'); 51 context.drawImage(img, 0, 0); 52 var imageData = context.getImageData(0, 0, img.width, img.height); 53 // Send NaCl module the raw image data obtained from canvas. 54 common.naclModule.postMessage({'message' : 'texture', 55 'name' : name, 56 'width' : img.width, 57 'height' : img.height, 58 'data' : imageData.data.buffer}); 59 } 60 img.src = name; 61} 62 63// Handle a message coming from the NaCl module. 64function handleMessage(message_event) { 65 if (message_event.data['message'] == 'benchmark_result') { 66 // benchmark result 67 var result = message_event.data['value']; 68 console.log('Benchmark result:' + result); 69 result = (Math.round(result * 1000) / 1000).toFixed(3); 70 document.getElementById('result').textContent = 71 'Result: ' + result + ' seconds'; 72 common.updateStatus('SUCCESS'); 73 } else if (message_event.data['message'] == 'set_zoom') { 74 // zoom slider 75 var zoom = message_event.data['value']; 76 document.getElementById('zoomRange').value = zoom; 77 } else if (message_event.data['message'] == 'set_light') { 78 // light slider 79 var light = message_event.data['value']; 80 document.getElementById('lightRange').value = light; 81 } else if (message_event.data['message'] == 'request_textures') { 82 // NaCl module is requesting a set of textures. 83 var names = message_event.data['names']; 84 for (var i = 0; i < names.length; i++) 85 loadTexture(names[i]); 86 } 87} 88 89