Home | History | Annotate | Download | only in earth_simd
      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 
      5 function moduleDidLoad() {
      6 }
      7 
      8 function 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()
     17 function 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.
     43 function 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.
     64 function 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