xref: /aosp_15_r20/external/cronet/net/nqe/network_quality_observation.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/nqe/network_quality_observation.h"
6 
7 #include "base/check.h"
8 #include "base/notreached.h"
9 
10 namespace net::nqe::internal {
11 
Observation(int32_t value,base::TimeTicks timestamp,int32_t signal_strength,NetworkQualityObservationSource source)12 Observation::Observation(int32_t value,
13                          base::TimeTicks timestamp,
14                          int32_t signal_strength,
15                          NetworkQualityObservationSource source)
16     : Observation(value, timestamp, signal_strength, source, std::nullopt) {}
17 
Observation(int32_t value,base::TimeTicks timestamp,int32_t signal_strength,NetworkQualityObservationSource source,const std::optional<IPHash> & host)18 Observation::Observation(int32_t value,
19                          base::TimeTicks timestamp,
20                          int32_t signal_strength,
21                          NetworkQualityObservationSource source,
22                          const std::optional<IPHash>& host)
23     : value_(value),
24       timestamp_(timestamp),
25       signal_strength_(signal_strength),
26       source_(source),
27       host_(host) {
28   DCHECK(!timestamp_.is_null());
29   DCHECK(signal_strength_ == INT32_MIN ||
30          (signal_strength_ >= 0 && signal_strength_ <= 4));
31 }
32 
33 Observation::Observation(const Observation& other) = default;
34 
35 Observation& Observation::operator=(const Observation& other) = default;
36 
37 Observation::~Observation() = default;
38 
GetObservationCategories() const39 std::vector<ObservationCategory> Observation::GetObservationCategories() const {
40   std::vector<ObservationCategory> observation_categories;
41   switch (source_) {
42     case NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP:
43     case NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE:
44     case NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_HTTP_FROM_PLATFORM:
45     case DEPRECATED_NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE:
46       observation_categories.push_back(
47           ObservationCategory::OBSERVATION_CATEGORY_HTTP);
48       return observation_categories;
49     case NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE:
50     case NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_TRANSPORT_FROM_PLATFORM:
51     case NETWORK_QUALITY_OBSERVATION_SOURCE_TCP:
52       observation_categories.push_back(
53           ObservationCategory::OBSERVATION_CATEGORY_TRANSPORT);
54       return observation_categories;
55     case NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC:
56     case NETWORK_QUALITY_OBSERVATION_SOURCE_H2_PINGS:
57       observation_categories.push_back(
58           ObservationCategory::OBSERVATION_CATEGORY_TRANSPORT);
59       observation_categories.push_back(
60           ObservationCategory::OBSERVATION_CATEGORY_END_TO_END);
61       return observation_categories;
62     case NETWORK_QUALITY_OBSERVATION_SOURCE_MAX:
63       NOTREACHED();
64       return observation_categories;
65   }
66   NOTREACHED();
67   return observation_categories;
68 }
69 
70 }  // namespace net::nqe::internal
71