Add stats for network merge.
Currently, in ipc_network_manager.cc, the UMA WebRTC.PeerConnection.IPv4Interfaces and its IPv6
counter part counts the addresses, instead of the interfaces as when
chromium delivers available networks to WebRTC, each address is wrapped
inside an individual network object.
The plan is to replace the current MergeNetworkList with the new one once it's rolled into chromium.
BUG=
R=pthatcher@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/36779004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@8188 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/base/network.cc b/base/network.cc
index 32fe2e6..ec67265 100644
--- a/base/network.cc
+++ b/base/network.cc
@@ -151,6 +151,13 @@
void NetworkManagerBase::MergeNetworkList(const NetworkList& new_networks,
bool* changed) {
+ NetworkManager::Stats stats;
+ MergeNetworkList(new_networks, changed, &stats);
+}
+
+void NetworkManagerBase::MergeNetworkList(const NetworkList& new_networks,
+ bool* changed,
+ NetworkManager::Stats* stats) {
// AddressList in this map will track IP addresses for all Networks
// with the same key.
std::map<std::string, AddressList> consolidated_address_list;
@@ -185,6 +192,13 @@
}
if (!might_add_to_merged_list) {
delete network;
+ } else {
+ if (current_list.ips[0].family() == AF_INET) {
+ stats->ipv4_network_count++;
+ } else {
+ ASSERT(current_list.ips[0].family() == AF_INET6);
+ stats->ipv6_network_count++;
+ }
}
}
@@ -213,7 +227,7 @@
networks_ = merged_list;
// If the network lists changes, we resort it.
- if (changed) {
+ if (*changed) {
std::sort(networks_.begin(), networks_.end(), SortNetworks);
// Now network interfaces are sorted, we should set the preference value
// for each of the interfaces we are planning to use.
diff --git a/base/network.h b/base/network.h
index 6f9d08e..ee0673f 100644
--- a/base/network.h
+++ b/base/network.h
@@ -76,6 +76,15 @@
// Dumps a list of networks available to LS_INFO.
virtual void DumpNetworks(bool include_ignored) {}
+
+ struct Stats {
+ int ipv4_network_count;
+ int ipv6_network_count;
+ Stats() {
+ ipv4_network_count = 0;
+ ipv6_network_count = 0;
+ }
+ };
};
// Base class for NetworkManager implementations.
@@ -97,6 +106,11 @@
// any change in the network list.
void MergeNetworkList(const NetworkList& list, bool* changed);
+ // |stats| will be populated even if |*changed| is false.
+ void MergeNetworkList(const NetworkList& list,
+ bool* changed,
+ NetworkManager::Stats* stats);
+
private:
friend class NetworkTest;
void DoUpdateNetworks();
diff --git a/base/network_unittest.cc b/base/network_unittest.cc
index acb118d..f549115 100644
--- a/base/network_unittest.cc
+++ b/base/network_unittest.cc
@@ -34,10 +34,13 @@
callback_called_ = true;
}
- void MergeNetworkList(BasicNetworkManager& network_manager,
- const NetworkManager::NetworkList& list,
- bool* changed ) {
- network_manager.MergeNetworkList(list, changed);
+ NetworkManager::Stats MergeNetworkList(
+ BasicNetworkManager& network_manager,
+ const NetworkManager::NetworkList& list,
+ bool* changed) {
+ NetworkManager::Stats stats;
+ network_manager.MergeNetworkList(list, changed, &stats);
+ return stats;
}
bool IsIgnoredNetwork(BasicNetworkManager& network_manager,
@@ -182,8 +185,10 @@
NetworkManager::NetworkList list;
list.push_back(new Network(ipv4_network1));
bool changed;
- MergeNetworkList(manager, list, &changed);
+ NetworkManager::Stats stats = MergeNetworkList(manager, list, &changed);
EXPECT_TRUE(changed);
+ EXPECT_EQ(stats.ipv6_network_count, 0);
+ EXPECT_EQ(stats.ipv4_network_count, 1);
list.clear();
manager.GetNetworks(&list);
@@ -194,8 +199,10 @@
// Replace ipv4_network1 with ipv4_network2.
list.push_back(new Network(ipv4_network2));
- MergeNetworkList(manager, list, &changed);
+ stats = MergeNetworkList(manager, list, &changed);
EXPECT_TRUE(changed);
+ EXPECT_EQ(stats.ipv6_network_count, 0);
+ EXPECT_EQ(stats.ipv4_network_count, 1);
list.clear();
manager.GetNetworks(&list);
@@ -207,8 +214,10 @@
// Add Network2 back.
list.push_back(new Network(ipv4_network1));
list.push_back(new Network(ipv4_network2));
- MergeNetworkList(manager, list, &changed);
+ stats = MergeNetworkList(manager, list, &changed);
EXPECT_TRUE(changed);
+ EXPECT_EQ(stats.ipv6_network_count, 0);
+ EXPECT_EQ(stats.ipv4_network_count, 2);
list.clear();
// Verify that we get previous instances of Network objects.
@@ -222,8 +231,10 @@
// notification.
list.push_back(new Network(ipv4_network2));
list.push_back(new Network(ipv4_network1));
- MergeNetworkList(manager, list, &changed);
+ stats = MergeNetworkList(manager, list, &changed);
EXPECT_FALSE(changed);
+ EXPECT_EQ(stats.ipv6_network_count, 0);
+ EXPECT_EQ(stats.ipv4_network_count, 2);
list.clear();
// Verify that we get previous instances of Network objects.
@@ -274,8 +285,11 @@
NetworkManager::NetworkList original_list;
SetupNetworks(&original_list);
bool changed = false;
- MergeNetworkList(manager, original_list, &changed);
+ NetworkManager::Stats stats =
+ MergeNetworkList(manager, original_list, &changed);
EXPECT_TRUE(changed);
+ EXPECT_EQ(stats.ipv6_network_count, 4);
+ EXPECT_EQ(stats.ipv4_network_count, 0);
NetworkManager::NetworkList list;
manager.GetNetworks(&list);
EXPECT_EQ(original_list.size(), list.size());