Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Unified Diff: tracing/tracing/base/running_statistics.html

Issue 2771723003: [tracing] Move math utilities from base into their own subdirectory (attempt 2) (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tracing/tracing/base/rect_test.html ('k') | tracing/tracing/base/running_statistics_test.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tracing/tracing/base/running_statistics.html
diff --git a/tracing/tracing/base/running_statistics.html b/tracing/tracing/base/running_statistics.html
deleted file mode 100644
index 6ebc3d06c9f1767c2326017a7c59d1b86f96b214..0000000000000000000000000000000000000000
--- a/tracing/tracing/base/running_statistics.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/base/base.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.b', function() {
- /**
- * An object of this class computes basic statistics online in O(1).
- * Usage:
- * 1. Create an instance.
- * 2. Add numbers using the |add| method.
- * 3. Query statistics.
- * 4. Repeat from step 2.
- */
- class RunningStatistics {
- constructor() {
- this.mean_ = 0;
- this.count_ = 0;
- this.max_ = -Infinity;
- this.min_ = Infinity;
- this.sum_ = 0;
- this.variance_ = 0;
-
- // Mean of logarithms of absolute values of samples, or undefined if any
- // samples were <= 0.
- this.meanlogs_ = 0;
- }
-
- get count() {
- return this.count_;
- }
-
- get geometricMean() {
- if (this.meanlogs_ === undefined)
- return 0;
- return Math.exp(this.meanlogs_);
- }
-
- get mean() {
- if (this.count_ === 0)
- return undefined;
- return this.mean_;
- }
-
- get max() {
- return this.max_;
- }
-
- get min() {
- return this.min_;
- }
-
- get sum() {
- return this.sum_;
- }
-
- get variance() {
- if (this.count_ === 0)
- return undefined;
- if (this.count_ === 1)
- return 0;
- return this.variance_ / (this.count_ - 1);
- }
-
- get stddev() {
- if (this.count_ === 0)
- return undefined;
- return Math.sqrt(this.variance);
- }
-
- add(x) {
- this.count_++;
- this.max_ = Math.max(this.max_, x);
- this.min_ = Math.min(this.min_, x);
- this.sum_ += x;
-
- // The geometric mean is computed using the arithmetic mean of logarithms.
- if (x <= 0)
- this.meanlogs_ = undefined;
- else if (this.meanlogs_ !== undefined)
- this.meanlogs_ += (Math.log(Math.abs(x)) - this.meanlogs_) / this.count;
-
- // The following uses Welford's algorithm for computing running mean
- // and variance. See http://www.johndcook.com/blog/standard_deviation.
- if (this.count_ === 1) {
- this.mean_ = x;
- this.variance_ = 0;
- } else {
- var oldMean = this.mean_;
- var oldVariance = this.variance_;
- // Using the 2nd formula for updating the mean yields better precision
- // but it doesn't work for the case oldMean is Infinity. Hence we handle
- // that case separately.
- if (oldMean === Infinity || oldMean === -Infinity) {
- this.mean_ = this.sum_ / this.count_;
- } else {
- this.mean_ = oldMean + (x - oldMean) / this.count_;
- }
- this.variance_ = oldVariance + (x - oldMean) * (x - this.mean_);
- }
- }
-
- merge(other) {
- var result = new RunningStatistics();
- result.count_ = this.count_ + other.count_;
- result.sum_ = this.sum_ + other.sum_;
- result.min_ = Math.min(this.min_, other.min_);
- result.max_ = Math.max(this.max_, other.max_);
- if (result.count === 0) {
- result.mean_ = 0;
- result.variance_ = 0;
- result.meanlogs_ = 0;
- } else {
- // Combine the mean and the variance using the formulas from
- // https://goo.gl/ddcAep.
- result.mean_ = result.sum / result.count;
- var deltaMean = (this.mean || 0) - (other.mean || 0);
- result.variance_ = this.variance_ + other.variance_ +
- (this.count * other.count * deltaMean * deltaMean / result.count);
-
- // Merge the arithmetic means of logarithms of absolute values of
- // samples, weighted by counts.
- if (this.meanlogs_ === undefined || other.meanlogs_ === undefined) {
- result.meanlogs_ = undefined;
- } else {
- result.meanlogs_ = (this.count * this.meanlogs_ +
- other.count * other.meanlogs_) / result.count;
- }
- }
- return result;
- }
-
- asDict() {
- if (!this.count) {
- return [];
- }
- // It's more efficient to serialize these fields in an array. If you
- // add any other fields, you should re-evaluate whether it would be more
- // efficient to serialize as a dict.
- return [
- this.count_,
- this.max_,
- this.meanlogs_,
- this.mean_,
- this.min_,
- this.sum_,
- this.variance_,
- ];
- }
-
- static fromDict(dict) {
- var result = new RunningStatistics();
- if (dict.length !== 7) {
- return result;
- }
- [
- result.count_,
- result.max_,
- result.meanlogs_,
- result.mean_,
- result.min_,
- result.sum_,
- result.variance_,
- ] = dict;
- return result;
- }
- }
-
- return {
- RunningStatistics,
- };
-});
-</script>
« no previous file with comments | « tracing/tracing/base/rect_test.html ('k') | tracing/tracing/base/running_statistics_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698