1*cc02d7e2SAndroid Build Coastguard Worker<?php 2*cc02d7e2SAndroid Build Coastguard Worker/* 3*cc02d7e2SAndroid Build Coastguard Worker * 4*cc02d7e2SAndroid Build Coastguard Worker * Copyright 2017 gRPC authors. 5*cc02d7e2SAndroid Build Coastguard Worker * 6*cc02d7e2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 7*cc02d7e2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 8*cc02d7e2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 9*cc02d7e2SAndroid Build Coastguard Worker * 10*cc02d7e2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 11*cc02d7e2SAndroid Build Coastguard Worker * 12*cc02d7e2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 13*cc02d7e2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 14*cc02d7e2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*cc02d7e2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 16*cc02d7e2SAndroid Build Coastguard Worker * limitations under the License. 17*cc02d7e2SAndroid Build Coastguard Worker * 18*cc02d7e2SAndroid Build Coastguard Worker */ 19*cc02d7e2SAndroid Build Coastguard Worker 20*cc02d7e2SAndroid Build Coastguard Worker// Histogram class for use in performance testing and measurement 21*cc02d7e2SAndroid Build Coastguard Workerclass Histogram { 22*cc02d7e2SAndroid Build Coastguard Worker private $resolution; 23*cc02d7e2SAndroid Build Coastguard Worker private $max_possible; 24*cc02d7e2SAndroid Build Coastguard Worker private $sum; 25*cc02d7e2SAndroid Build Coastguard Worker private $sum_of_squares; 26*cc02d7e2SAndroid Build Coastguard Worker private $multiplier; 27*cc02d7e2SAndroid Build Coastguard Worker private $count; 28*cc02d7e2SAndroid Build Coastguard Worker private $min_seen; 29*cc02d7e2SAndroid Build Coastguard Worker private $max_seen; 30*cc02d7e2SAndroid Build Coastguard Worker private $buckets; 31*cc02d7e2SAndroid Build Coastguard Worker 32*cc02d7e2SAndroid Build Coastguard Worker private function bucket_for($value) { 33*cc02d7e2SAndroid Build Coastguard Worker return (int)(log($value) / log($this->multiplier)); 34*cc02d7e2SAndroid Build Coastguard Worker } 35*cc02d7e2SAndroid Build Coastguard Worker 36*cc02d7e2SAndroid Build Coastguard Worker public function __construct($resolution, $max_possible) { 37*cc02d7e2SAndroid Build Coastguard Worker $this->resolution = $resolution; 38*cc02d7e2SAndroid Build Coastguard Worker $this->max_possible = $max_possible; 39*cc02d7e2SAndroid Build Coastguard Worker $this->sum = 0; 40*cc02d7e2SAndroid Build Coastguard Worker $this->sum_of_squares = 0; 41*cc02d7e2SAndroid Build Coastguard Worker $this->multiplier = 1+$resolution; 42*cc02d7e2SAndroid Build Coastguard Worker $this->count = 0; 43*cc02d7e2SAndroid Build Coastguard Worker $this->min_seen = $max_possible; 44*cc02d7e2SAndroid Build Coastguard Worker $this->max_seen = 0; 45*cc02d7e2SAndroid Build Coastguard Worker $this->buckets = array_fill(0, $this->bucket_for($max_possible)+1, 0); 46*cc02d7e2SAndroid Build Coastguard Worker } 47*cc02d7e2SAndroid Build Coastguard Worker 48*cc02d7e2SAndroid Build Coastguard Worker public function add($value) { 49*cc02d7e2SAndroid Build Coastguard Worker $this->sum += $value; 50*cc02d7e2SAndroid Build Coastguard Worker $this->sum_of_squares += $value * $value; 51*cc02d7e2SAndroid Build Coastguard Worker $this->count += 1; 52*cc02d7e2SAndroid Build Coastguard Worker if ($value < $this->min_seen) { 53*cc02d7e2SAndroid Build Coastguard Worker $this->min_seen = $value; 54*cc02d7e2SAndroid Build Coastguard Worker } 55*cc02d7e2SAndroid Build Coastguard Worker if ($value > $this->max_seen) { 56*cc02d7e2SAndroid Build Coastguard Worker $this->max_seen = $value; 57*cc02d7e2SAndroid Build Coastguard Worker } 58*cc02d7e2SAndroid Build Coastguard Worker $this->buckets[$this->bucket_for($value)] += 1; 59*cc02d7e2SAndroid Build Coastguard Worker } 60*cc02d7e2SAndroid Build Coastguard Worker 61*cc02d7e2SAndroid Build Coastguard Worker public function minimum() { 62*cc02d7e2SAndroid Build Coastguard Worker return $this->min_seen; 63*cc02d7e2SAndroid Build Coastguard Worker } 64*cc02d7e2SAndroid Build Coastguard Worker 65*cc02d7e2SAndroid Build Coastguard Worker public function maximum() { 66*cc02d7e2SAndroid Build Coastguard Worker return $this->max_seen; 67*cc02d7e2SAndroid Build Coastguard Worker } 68*cc02d7e2SAndroid Build Coastguard Worker 69*cc02d7e2SAndroid Build Coastguard Worker public function sum() { 70*cc02d7e2SAndroid Build Coastguard Worker return $this->sum; 71*cc02d7e2SAndroid Build Coastguard Worker } 72*cc02d7e2SAndroid Build Coastguard Worker 73*cc02d7e2SAndroid Build Coastguard Worker public function sum_of_squares() { 74*cc02d7e2SAndroid Build Coastguard Worker return $this->sum_of_squares; 75*cc02d7e2SAndroid Build Coastguard Worker } 76*cc02d7e2SAndroid Build Coastguard Worker 77*cc02d7e2SAndroid Build Coastguard Worker public function count() { 78*cc02d7e2SAndroid Build Coastguard Worker return $this->count; 79*cc02d7e2SAndroid Build Coastguard Worker } 80*cc02d7e2SAndroid Build Coastguard Worker 81*cc02d7e2SAndroid Build Coastguard Worker public function contents() { 82*cc02d7e2SAndroid Build Coastguard Worker return $this->buckets; 83*cc02d7e2SAndroid Build Coastguard Worker } 84*cc02d7e2SAndroid Build Coastguard Worker 85*cc02d7e2SAndroid Build Coastguard Worker public function clean() { 86*cc02d7e2SAndroid Build Coastguard Worker $this->sum = 0; 87*cc02d7e2SAndroid Build Coastguard Worker $this->sum_of_squares = 0; 88*cc02d7e2SAndroid Build Coastguard Worker $this->count = 0; 89*cc02d7e2SAndroid Build Coastguard Worker $this->min_seen = $this->max_possible; 90*cc02d7e2SAndroid Build Coastguard Worker $this->max_seen = 0; 91*cc02d7e2SAndroid Build Coastguard Worker $this->buckets = array_fill(0, $this->bucket_for($this->max_possible)+1, 0); 92*cc02d7e2SAndroid Build Coastguard Worker } 93*cc02d7e2SAndroid Build Coastguard Worker} 94