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

Unified Diff: net/nqe/observation_buffer.h

Issue 2763853002: Use Android callback API to obtain cellular signal strength (Closed)
Patch Set: comments Created 3 years, 6 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 | « net/nqe/network_quality_observation.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/nqe/observation_buffer.h
diff --git a/net/nqe/observation_buffer.h b/net/nqe/observation_buffer.h
index 3fcb9cf70839bc71ebb29db00c087076e27c7e37..70441a28519096ece1f87e91dd38c373558142ac 100644
--- a/net/nqe/observation_buffer.h
+++ b/net/nqe/observation_buffer.h
@@ -6,6 +6,7 @@
#define NET_NQE_OBSERVATION_BUFFER_H_
#include <float.h>
+#include <stdint.h>
#include <algorithm>
#include <deque>
@@ -14,6 +15,7 @@
#include <vector>
#include "base/macros.h"
+#include "base/optional.h"
#include "base/time/default_tick_clock.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
@@ -33,16 +35,16 @@ template <typename ValueType>
class NET_EXPORT_PRIVATE ObservationBuffer {
public:
ObservationBuffer(double weight_multiplier_per_second,
- double weight_multiplier_per_dbm)
+ double weight_multiplier_per_signal_level)
: weight_multiplier_per_second_(weight_multiplier_per_second),
- weight_multiplier_per_dbm_(weight_multiplier_per_dbm),
+ weight_multiplier_per_signal_level_(weight_multiplier_per_signal_level),
tick_clock_(new base::DefaultTickClock()) {
static_assert(kMaximumObservationsBufferSize > 0U,
"Minimum size of observation buffer must be > 0");
DCHECK_LE(0.0, weight_multiplier_per_second_);
DCHECK_GE(1.0, weight_multiplier_per_second_);
- DCHECK_LE(0.0, weight_multiplier_per_dbm_);
- DCHECK_GE(1.0, weight_multiplier_per_dbm_);
+ DCHECK_LE(0.0, weight_multiplier_per_signal_level_);
+ DCHECK_GE(1.0, weight_multiplier_per_signal_level_);
}
~ObservationBuffer() {}
@@ -77,12 +79,11 @@ class NET_EXPORT_PRIVATE ObservationBuffer {
// value of all observations made on or after |begin_timestamp|. If the
// value is unavailable, false is returned and |result| is not modified.
// Percentile value is unavailable if all the values in observation buffer are
- // older than |begin_timestamp|. |current_signal_strength_dbm| is the current
- // signal strength in dBm.
- // |result| must not be null.
+ // older than |begin_timestamp|. |current_signal_strength| is the current
+ // signal strength. |result| must not be null.
// TODO(tbansal): Move out param |result| as the last param of the function.
bool GetPercentile(base::TimeTicks begin_timestamp,
- int32_t current_signal_strength_dbm,
+ const base::Optional<int32_t>& current_signal_strength,
ValueType* result,
int percentile,
const std::vector<NetworkQualityObservationSource>&
@@ -93,7 +94,7 @@ class NET_EXPORT_PRIVATE ObservationBuffer {
// Total weight of all observations in |weighted_observations|.
double total_weight = 0.0;
- ComputeWeightedObservations(begin_timestamp, current_signal_strength_dbm,
+ ComputeWeightedObservations(begin_timestamp, current_signal_strength,
&weighted_observations, &total_weight,
disallowed_observation_sources);
if (weighted_observations.empty())
@@ -125,20 +126,21 @@ class NET_EXPORT_PRIVATE ObservationBuffer {
// of all observations made on or after |begin_timestamp|. If the value is
// unavailable, false is returned and |result| is not modified. The unweighted
// average value is unavailable if all the values in the observation buffer
- // are older than |begin_timestamp|. |current_signal_strength_dbm| is the
- // current signal strength in dBm. |result| must not be null.
- bool GetWeightedAverage(base::TimeTicks begin_timestamp,
- int32_t current_signal_strength_dbm,
- const std::vector<NetworkQualityObservationSource>&
- disallowed_observation_sources,
- ValueType* result) const {
+ // are older than |begin_timestamp|. |current_signal_strength| is the
+ // current signal strength. |result| must not be null.
+ bool GetWeightedAverage(
+ base::TimeTicks begin_timestamp,
+ const base::Optional<int32_t>& current_signal_strength,
+ const std::vector<NetworkQualityObservationSource>&
+ disallowed_observation_sources,
+ ValueType* result) const {
// Stores weighted observations in increasing order by value.
std::vector<WeightedObservation<ValueType>> weighted_observations;
// Total weight of all observations in |weighted_observations|.
double total_weight = 0.0;
- ComputeWeightedObservations(begin_timestamp, current_signal_strength_dbm,
+ ComputeWeightedObservations(begin_timestamp, current_signal_strength,
&weighted_observations, &total_weight,
disallowed_observation_sources);
if (weighted_observations.empty())
@@ -162,20 +164,21 @@ class NET_EXPORT_PRIVATE ObservationBuffer {
// all observations made on or after |begin_timestamp|. If the value is
// unavailable, false is returned and |result| is not modified. The weighted
// average value is unavailable if all the values in the observation buffer
- // are older than |begin_timestamp|. |current_signal_strength_dbm| is the
- // current signal strength in dBm. |result| must not be null.
- bool GetUnweightedAverage(base::TimeTicks begin_timestamp,
- int32_t current_signal_strength_dbm,
- const std::vector<NetworkQualityObservationSource>&
- disallowed_observation_sources,
- ValueType* result) const {
+ // are older than |begin_timestamp|. |current_signal_strength| is the
+ // current signal strength. |result| must not be null.
+ bool GetUnweightedAverage(
+ base::TimeTicks begin_timestamp,
+ const base::Optional<int32_t>& current_signal_strength,
+ const std::vector<NetworkQualityObservationSource>&
+ disallowed_observation_sources,
+ ValueType* result) const {
// Stores weighted observations in increasing order by value.
std::vector<WeightedObservation<ValueType>> weighted_observations;
// Total weight of all observations in |weighted_observations|.
double total_weight = 0.0;
- ComputeWeightedObservations(begin_timestamp, current_signal_strength_dbm,
+ ComputeWeightedObservations(begin_timestamp, current_signal_strength,
&weighted_observations, &total_weight,
disallowed_observation_sources);
if (weighted_observations.empty())
@@ -218,14 +221,13 @@ class NET_EXPORT_PRIVATE ObservationBuffer {
// Computes the weighted observations and stores them in
// |weighted_observations| sorted by ascending |WeightedObservation.value|.
// Only the observations with timestamp later than |begin_timestamp| are
- // considered. |current_signal_strength_dbm| is the current signal strength
- // (in dBm) when the observation was taken, and is set to INT32_MIN if the
- // signal strength is currently unavailable. This method also sets
- // |total_weight| to the total weight of all observations. Should be called
- // only when there is at least one observation in the buffer.
+ // considered. |current_signal_strength| is the current signal strength
+ // when the observation was taken. This method also sets |total_weight| to
+ // the total weight of all observations. Should be called only when there is
+ // at least one observation in the buffer.
void ComputeWeightedObservations(
const base::TimeTicks& begin_timestamp,
- int32_t current_signal_strength_dbm,
+ const base::Optional<int32_t>& current_signal_strength,
std::vector<WeightedObservation<ValueType>>* weighted_observations,
double* total_weight,
const std::vector<NetworkQualityObservationSource>&
@@ -251,14 +253,12 @@ class NET_EXPORT_PRIVATE ObservationBuffer {
time_since_sample_taken.InSeconds());
double signal_strength_weight = 1.0;
- if (current_signal_strength_dbm != INT32_MIN &&
- observation.signal_strength_dbm != INT32_MIN &&
- current_signal_strength_dbm != INT32_MAX &&
- observation.signal_strength_dbm != INT32_MAX) {
- int32_t signal_strength_weight_diff = std::abs(
- current_signal_strength_dbm - observation.signal_strength_dbm);
- signal_strength_weight =
- pow(weight_multiplier_per_dbm_, signal_strength_weight_diff);
+ if (current_signal_strength && observation.signal_strength) {
+ int32_t signal_strength_weight_diff =
+ std::abs(current_signal_strength.value() -
+ observation.signal_strength.value());
+ signal_strength_weight = pow(weight_multiplier_per_signal_level_,
+ signal_strength_weight_diff);
}
double weight = time_weight * signal_strength_weight;
@@ -294,13 +294,13 @@ class NET_EXPORT_PRIVATE ObservationBuffer {
// weight_multiplier_per_second_ ^ kHalfLifeSeconds = 0.5
const double weight_multiplier_per_second_;
- // The factor by which the weight of an observation reduces for every dbM
+ // The factor by which the weight of an observation reduces for every unit
// difference in the current signal strength, and the signal strength at
// which the observation was taken.
- // For example, if the observation was taken at 90 dBm, and current signal
- // strength is 95 dBm, the weight of the observation would be:
- // |weight_multiplier_per_dbm_| ^ 5.
- const double weight_multiplier_per_dbm_;
+ // For example, if the observation was taken at 1 unit, and current signal
+ // strength is 4 units, the weight of the observation would be:
+ // |weight_multiplier_per_signal_level_| ^ 3.
+ const double weight_multiplier_per_signal_level_;
std::unique_ptr<base::TickClock> tick_clock_;
« no previous file with comments | « net/nqe/network_quality_observation.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698