1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var itrMax = 1000;
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var itrCount = 0;
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var itrSend = new Float64Array(itrMax);
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var itrNaCl = new Float64Array(itrMax);
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var itrRecv = new Float64Array(itrMax);
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var delay = 0;
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)function getTimeInMilliseconds() {
13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return (new Date()).getTime();
14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function attachListeners() {
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  document.getElementById('start').addEventListener('click', startTest);
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  countEl = document.getElementById('count');
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  countEl.textContent = itrMax;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function startTest() {
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (common.naclModule) {
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    var startEl = document.getElementById('start');
25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    startEl.disabled = true;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    var delayEl = document.getElementById('delay');
28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    delay = parseInt(delayEl.value, 10);
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    common.updateStatus('Running Test');
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    itrCount = 0;
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    itrSend[0] = getTimeInMilliseconds();
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    common.naclModule.postMessage(delay);
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function setStats(nacl, compute, total) {
38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  var statNaClEl = document.getElementById('NaCl');
39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  var statRoundEl = document.getElementById('Round');
40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  var statTotalEl = document.getElementById('Total');
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  statNaClEl.textContent = (nacl / itrMax) + ' ms';
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  statRoundEl.textContent = (compute / itrMax) + ' ms';
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  statTotalEl.textContent = (total / itrMax) + ' ms';
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Called by the common.js module.
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function handleMessage(message_event) {
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Convert NaCl Seconds elapsed to MS
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  itrNaCl[itrCount] = message_event.data * 1000.0;
51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  itrRecv[itrCount] = getTimeInMilliseconds();
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  itrCount++;
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (itrCount === itrMax) {
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    common.updateStatus('Test Finished');
56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    var startEl = document.getElementById('start');
57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    startEl.disabled = false;
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    var naclMS = 0.0;
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    var computeMS = 0.0;
61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    for (var i = 0; i < itrMax; i++) {
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      naclMS += itrNaCl[i];
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      computeMS += itrRecv[i] - itrSend[i];
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    setStats(naclMS, computeMS, itrRecv[itrMax - 1] - itrSend[0]);
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else {
68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    itrSend[itrCount] = getTimeInMilliseconds();
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    common.naclModule.postMessage(delay);
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
72