mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 00:06:09 +03:00
60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
// 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.
|
|
|
|
#ifndef NET_BASE_PERCENTILE_ESTIMATOR_H_
|
|
#define NET_BASE_PERCENTILE_ESTIMATOR_H_
|
|
|
|
#include "base/callback.h"
|
|
#include "base/macros.h"
|
|
#include "net/base/net_export.h"
|
|
|
|
namespace net {
|
|
|
|
// This class estimates statistical percentiles (e.g. 10%l, 50%l) for
|
|
// integer distributions presented in stream form. These estimates
|
|
// adjust automatically when the stream distribution changes.
|
|
// TODO(rdsmith): Expand the class to maintain floating point
|
|
// estimates rather than integer estimates, when there's a use case
|
|
// for that that deserves the extra complexity and pitfalls of
|
|
// floating point arithmetic.
|
|
class NET_EXPORT PercentileEstimator {
|
|
public:
|
|
using RandomNumberCallback = base::Callback<int(void)>;
|
|
|
|
static const int kMedianPercentile = 50;
|
|
|
|
// |percentile| is a number between 0 and 100 indicating what percentile
|
|
// should be estimated (e.g. 50 would be a median estimate).
|
|
// |initial_estimate| is the value the class is seeded with; in other
|
|
// words, if AddSample() is never called,
|
|
// |CurrentEstimate() == initial_estimate|.
|
|
PercentileEstimator(int percentile, int initial_estimate);
|
|
|
|
~PercentileEstimator();
|
|
|
|
int current_estimate() const { return current_estimate_; }
|
|
void AddSample(int sample);
|
|
|
|
// Specify a callback that will generate a "random" number
|
|
// in the range [0,99] on each call. Used so that tests can
|
|
// rely on reproducible behavior.
|
|
void SetRandomNumberGeneratorForTesting(
|
|
RandomNumberCallback generator_callback);
|
|
|
|
private:
|
|
const int percentile_;
|
|
|
|
bool sign_positive_;
|
|
int current_estimate_;
|
|
int current_step_;
|
|
|
|
RandomNumberCallback generator_callback_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(PercentileEstimator);
|
|
};
|
|
|
|
} // namespace net
|
|
|
|
#endif // NET_BASE_PERCENTILE_ESTIMATOR_H_
|