Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / third_party / tvcm / src / tvcm / statistics.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7 <link rel="import" href="/tvcm/range.html">
8 <script>
9 'use strict';
10
11 tvcm.exportTo('tvcm', function() {
12
13   function identity(d) {
14     return d;
15   }
16
17   function Statistics() {
18   }
19
20   Statistics.sum = function(ary, opt_func, opt_this) {
21     var func = opt_func || identity;
22     var ret = 0;
23     for (var i = 0; i < ary.length; i++)
24       ret += func.call(opt_this, ary[i], i);
25     return ret;
26   };
27
28   Statistics.mean = function(ary, opt_func, opt_this) {
29     return Statistics.sum(ary, opt_func, opt_this) / ary.length;
30   };
31
32   Statistics.variance = function(ary, opt_func, opt_this) {
33     var func = opt_func || identity;
34     var mean = Statistics.mean(ary, func, opt_this);
35     var sumOfSuaredDistances = Statistics.sum(
36         ary,
37         function(d, i) {
38           var v = func.call(this, d, i) - mean;
39           return v * v;
40         },
41         opt_this);
42     return sumOfSuaredDistances / (ary.length - 1);
43   };
44
45   Statistics.variance = function(ary, opt_func, opt_this) {
46     return Math.sqrt(
47         Statistics.variance(ary, opt_func, opt_this));
48   };
49
50   Statistics.max = function(ary, opt_func, opt_this) {
51     var func = opt_func || identity;
52     var ret = -Infinity;
53     for (var i = 0; i < ary.length; i++)
54       ret = Math.max(ret, func.call(opt_this, ary[i], i));
55     return ret;
56   };
57
58   Statistics.min = function(ary, opt_func, opt_this) {
59     var func = opt_func || identity;
60     var ret = Infinity;
61     for (var i = 0; i < ary.length; i++)
62       ret = Math.min(ret, func.call(opt_this, ary[i], i));
63     return ret;
64   };
65
66   Statistics.range = function(ary, opt_func, opt_this) {
67     var func = opt_func || identity;
68     var ret = new tvcm.Range();
69     for (var i = 0; i < ary.length; i++)
70       ret.addValue(func.call(opt_this, ary[i], i));
71     return ret;
72   }
73
74   Statistics.percentile = function(ary, percent, opt_func, opt_this) {
75     if (!(percent >= 0 && percent <= 1))
76       throw new Error('percent must be [0,1]');
77
78     var func = opt_func || identity;
79     var tmp = new Array(ary.length);
80     for (var i = 0; i < ary.length; i++)
81       tmp[i] = func.call(opt_this, ary[i], i);
82     tmp.sort();
83     var idx = Math.floor((ary.length - 1) * percent);
84     return tmp[idx];
85   };
86
87   return {
88     Statistics: Statistics
89   };
90 });
91 </script>