xref: /aosp_15_r20/external/grpc-grpc/src/php/tests/qps/histogram.php (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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