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

Side by Side Diff: net/nqe/network_quality_store.cc

Issue 2128793003: Factor out NetworkID and caching mechanism from n_q_e.{h,cc} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed asvitkine comments Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « net/nqe/network_quality_store.h ('k') | net/nqe/network_quality_store_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
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_store.h"
6
7 #include "net/base/network_change_notifier.h"
8
9 namespace net {
10
11 namespace nqe {
12
13 namespace internal {
14
15 NetworkQualityStore::NetworkQualityStore() {
16 static_assert(kMaximumNetworkQualityCacheSize > 0,
17 "Size of the network quality cache must be > 0");
18 // This limit should not be increased unless the logic for removing the
19 // oldest cache entry is rewritten to use a doubly-linked-list LRU queue.
20 static_assert(kMaximumNetworkQualityCacheSize <= 10,
21 "Size of the network quality cache must <= 10");
22 }
23
24 NetworkQualityStore::~NetworkQualityStore() {
25 DCHECK(thread_checker_.CalledOnValidThread());
26 }
27
28 void NetworkQualityStore::Add(
29 const nqe::internal::NetworkID& network_id,
30 const nqe::internal::CachedNetworkQuality& cached_network_quality) {
31 DCHECK(thread_checker_.CalledOnValidThread());
32 DCHECK_LE(cached_network_qualities_.size(),
33 static_cast<size_t>(kMaximumNetworkQualityCacheSize));
34
35 // If the network name is unavailable, caching should not be performed.
36 if (network_id.type != net::NetworkChangeNotifier::CONNECTION_ETHERNET &&
37 network_id.id.empty()) {
38 return;
39 }
40
41 // Remove the entry from the map, if it is already present.
42 cached_network_qualities_.erase(network_id);
43
44 if (cached_network_qualities_.size() == kMaximumNetworkQualityCacheSize) {
45 // Remove the oldest entry.
46 CachedNetworkQualities::iterator oldest_entry_iterator =
47 cached_network_qualities_.begin();
48
49 for (CachedNetworkQualities::iterator it =
50 cached_network_qualities_.begin();
51 it != cached_network_qualities_.end(); ++it) {
52 if ((it->second).OlderThan(oldest_entry_iterator->second))
53 oldest_entry_iterator = it;
54 }
55 cached_network_qualities_.erase(oldest_entry_iterator);
56 }
57
58 cached_network_qualities_.insert(
59 std::make_pair(network_id, cached_network_quality));
60 DCHECK_LE(cached_network_qualities_.size(),
61 static_cast<size_t>(kMaximumNetworkQualityCacheSize));
62 }
63
64 bool NetworkQualityStore::GetById(
65 const nqe::internal::NetworkID& network_id,
66 nqe::internal::CachedNetworkQuality* cached_network_quality) {
67 DCHECK(thread_checker_.CalledOnValidThread());
68
69 CachedNetworkQualities::const_iterator it =
70 cached_network_qualities_.find(network_id);
71
72 if (it == cached_network_qualities_.end())
73 return false;
74
75 *cached_network_quality = it->second;
76 return true;
77 }
78
79 } // namespace internal
80
81 } // namespace nqe
82
83 } // namespace net
OLDNEW
« no previous file with comments | « net/nqe/network_quality_store.h ('k') | net/nqe/network_quality_store_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698