1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file.
4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)function moduleDidLoad() {
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)function postThreadFunc(numThreads) {
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return function () {
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    common.naclModule.postMessage({'message' : 'set_threads',
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                   'value' : numThreads});
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Add event listeners after the NaCl module has loaded.  These listeners will
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// forward messages to the NaCl module via postMessage()
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)function attachListeners() {
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  document.getElementById('benchmark').addEventListener('click',
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    function() {
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      common.naclModule.postMessage({'message' : 'run_benchmark'});
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      common.updateStatus('BENCHMARKING... (please wait)');
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    });
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  document.getElementById('drawPoints').addEventListener('click',
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    function() {
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      var checked = document.getElementById('drawPoints').checked;
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      common.naclModule.postMessage({'message' : 'draw_points',
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                     'value' : checked});
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    });
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  document.getElementById('drawInteriors').addEventListener('click',
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    function() {
31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      var checked = document.getElementById('drawInteriors').checked;
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      common.naclModule.postMessage({'message' : 'draw_interiors',
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                     'value' : checked});
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    });
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  var threads = [0, 1, 2, 4, 6, 8, 12, 16, 24, 32];
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  for (var i = 0; i < threads.length; i++) {
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    document.getElementById('radio' + i).addEventListener('click',
38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        postThreadFunc(threads[i]));
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  document.getElementById('pointRange').addEventListener('input',
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    function() {
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      var value = parseFloat(document.getElementById('pointRange').value);
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      common.naclModule.postMessage({'message' : 'set_points',
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                     'value' : value});
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      document.getElementById('pointCount').textContent = value + ' points';
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    });
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Handle a message coming from the NaCl module.
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// In the Voronoi example, the only message will be the benchmark result.
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)function handleMessage(message_event) {
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (message_event.data['message'] == 'benchmark_result') {
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    var x = (Math.round(message_event.data['value'] * 1000) / 1000).toFixed(3);
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    document.getElementById('result').textContent =
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      'Result: ' + x + ' seconds';
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    common.updateStatus('SUCCESS')
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
60