BpfNetworkStats: pass lines vector by reference in 2 more functions
Test: TreeHugger Bug: 276296921 Signed-off-by: Maciej Żenczykowski <maze@google.com> Change-Id: I252979fcb7803e09996778174ac95c0d38c5c313
This commit is contained in:
parent
7f21334959
commit
47eb9a34a8
3 changed files with 24 additions and 24 deletions
|
|
@ -109,12 +109,12 @@ stats_line populateStatsEntry(const StatsKey& statsKey, const StatsValue& statsE
|
|||
return newLine;
|
||||
}
|
||||
|
||||
int parseBpfNetworkStatsDetailInternal(std::vector<stats_line>* lines,
|
||||
int parseBpfNetworkStatsDetailInternal(std::vector<stats_line>& lines,
|
||||
const BpfMap<StatsKey, StatsValue>& statsMap,
|
||||
const BpfMap<uint32_t, IfaceValue>& ifaceMap) {
|
||||
int64_t unknownIfaceBytesTotal = 0;
|
||||
const auto processDetailUidStats =
|
||||
[lines, &unknownIfaceBytesTotal, &ifaceMap](
|
||||
[&lines, &unknownIfaceBytesTotal, &ifaceMap](
|
||||
const StatsKey& key,
|
||||
const BpfMap<StatsKey, StatsValue>& statsMap) -> Result<void> {
|
||||
char ifname[IFNAMSIZ];
|
||||
|
|
@ -127,11 +127,11 @@ int parseBpfNetworkStatsDetailInternal(std::vector<stats_line>* lines,
|
|||
return base::ResultError(statsEntry.error().message(), statsEntry.error().code());
|
||||
}
|
||||
stats_line newLine = populateStatsEntry(key, statsEntry.value(), ifname);
|
||||
lines->push_back(newLine);
|
||||
lines.push_back(newLine);
|
||||
if (newLine.tag) {
|
||||
// account tagged traffic in the untagged stats (for historical reasons?)
|
||||
newLine.tag = 0;
|
||||
lines->push_back(newLine);
|
||||
lines.push_back(newLine);
|
||||
}
|
||||
return Result<void>();
|
||||
};
|
||||
|
|
@ -151,7 +151,7 @@ int parseBpfNetworkStatsDetailInternal(std::vector<stats_line>* lines,
|
|||
// and set, which causes NetworkStats maps wrong item to subtract.
|
||||
//
|
||||
// Thus, the stats needs to be properly sorted and grouped before reported.
|
||||
groupNetworkStats(*lines);
|
||||
groupNetworkStats(lines);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -186,7 +186,7 @@ int parseBpfNetworkStatsDetail(std::vector<stats_line>* lines) {
|
|||
// TODO: the above comment feels like it may be obsolete / out of date,
|
||||
// since we no longer swap the map via netd binder rpc - though we do
|
||||
// still swap it.
|
||||
int ret = parseBpfNetworkStatsDetailInternal(lines, *inactiveStatsMap, ifaceIndexNameMap);
|
||||
int ret = parseBpfNetworkStatsDetailInternal(*lines, *inactiveStatsMap, ifaceIndexNameMap);
|
||||
if (ret) {
|
||||
ALOGE("parse detail network stats failed: %s", strerror(errno));
|
||||
return ret;
|
||||
|
|
@ -201,11 +201,11 @@ int parseBpfNetworkStatsDetail(std::vector<stats_line>* lines) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int parseBpfNetworkStatsDevInternal(std::vector<stats_line>* lines,
|
||||
int parseBpfNetworkStatsDevInternal(std::vector<stats_line>& lines,
|
||||
const BpfMap<uint32_t, StatsValue>& statsMap,
|
||||
const BpfMap<uint32_t, IfaceValue>& ifaceMap) {
|
||||
int64_t unknownIfaceBytesTotal = 0;
|
||||
const auto processDetailIfaceStats = [lines, &unknownIfaceBytesTotal, &ifaceMap, &statsMap](
|
||||
const auto processDetailIfaceStats = [&lines, &unknownIfaceBytesTotal, &ifaceMap, &statsMap](
|
||||
const uint32_t& key, const StatsValue& value,
|
||||
const BpfMap<uint32_t, StatsValue>&) {
|
||||
char ifname[IFNAMSIZ];
|
||||
|
|
@ -217,7 +217,7 @@ int parseBpfNetworkStatsDevInternal(std::vector<stats_line>* lines,
|
|||
.tag = (uint32_t)TAG_NONE,
|
||||
.counterSet = (uint32_t)SET_ALL,
|
||||
};
|
||||
lines->push_back(populateStatsEntry(fakeKey, value, ifname));
|
||||
lines.push_back(populateStatsEntry(fakeKey, value, ifname));
|
||||
return Result<void>();
|
||||
};
|
||||
Result<void> res = statsMap.iterateWithValue(processDetailIfaceStats);
|
||||
|
|
@ -227,14 +227,14 @@ int parseBpfNetworkStatsDevInternal(std::vector<stats_line>* lines,
|
|||
return -res.error().code();
|
||||
}
|
||||
|
||||
groupNetworkStats(*lines);
|
||||
groupNetworkStats(lines);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int parseBpfNetworkStatsDev(std::vector<stats_line>* lines) {
|
||||
static BpfMapRO<uint32_t, IfaceValue> ifaceIndexNameMap(IFACE_INDEX_NAME_MAP_PATH);
|
||||
static BpfMapRO<uint32_t, StatsValue> ifaceStatsMap(IFACE_STATS_MAP_PATH);
|
||||
return parseBpfNetworkStatsDevInternal(lines, ifaceStatsMap, ifaceIndexNameMap);
|
||||
return parseBpfNetworkStatsDevInternal(*lines, ifaceStatsMap, ifaceIndexNameMap);
|
||||
}
|
||||
|
||||
void groupNetworkStats(std::vector<stats_line>& lines) {
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetUidStatsTotal) {
|
|||
populateFakeStats(TEST_UID1, 0, IFACE_INDEX1, TEST_COUNTERSET0, value1, mFakeStatsMap);
|
||||
populateFakeStats(TEST_UID1, 0, IFACE_INDEX2, TEST_COUNTERSET1, value1, mFakeStatsMap);
|
||||
populateFakeStats(TEST_UID2, 0, IFACE_INDEX3, TEST_COUNTERSET1, value1, mFakeStatsMap);
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((unsigned long)3, lines.size());
|
||||
}
|
||||
|
||||
|
|
@ -290,7 +290,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetStatsDetail) {
|
|||
mFakeStatsMap);
|
||||
populateFakeStats(TEST_UID2, TEST_TAG, IFACE_INDEX1, TEST_COUNTERSET0, value1, mFakeStatsMap);
|
||||
std::vector<stats_line> lines;
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((unsigned long)7, lines.size());
|
||||
}
|
||||
|
||||
|
|
@ -310,7 +310,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetStatsWithSkippedIface) {
|
|||
populateFakeStats(TEST_UID1, 0, IFACE_INDEX1, TEST_COUNTERSET1, value1, mFakeStatsMap);
|
||||
populateFakeStats(TEST_UID2, 0, IFACE_INDEX1, TEST_COUNTERSET0, value1, mFakeStatsMap);
|
||||
std::vector<stats_line> lines;
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((unsigned long)4, lines.size());
|
||||
}
|
||||
|
||||
|
|
@ -349,7 +349,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestUnknownIfaceError) {
|
|||
ASSERT_EQ(-1, unknownIfaceBytesTotal);
|
||||
std::vector<stats_line> lines;
|
||||
// TODO: find a way to test the total of unknown Iface Bytes go above limit.
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((unsigned long)1, lines.size());
|
||||
expectStatsLineEqual(value1, IFACE_NAME1, TEST_UID1, TEST_COUNTERSET0, 0, lines.front());
|
||||
}
|
||||
|
|
@ -381,7 +381,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetIfaceStatsDetail) {
|
|||
EXPECT_RESULT_OK(mFakeIfaceStatsMap.writeValue(ifaceStatsKey, value2, BPF_ANY));
|
||||
std::vector<stats_line> lines;
|
||||
ASSERT_EQ(0,
|
||||
parseBpfNetworkStatsDevInternal(&lines, mFakeIfaceStatsMap, mFakeIfaceIndexNameMap));
|
||||
parseBpfNetworkStatsDevInternal(lines, mFakeIfaceStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((unsigned long)4, lines.size());
|
||||
|
||||
expectStatsLineEqual(value1, IFACE_NAME1, UID_ALL, SET_ALL, TAG_NONE, lines[0]);
|
||||
|
|
@ -425,13 +425,13 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetStatsSortedAndGrouped) {
|
|||
std::vector<stats_line> lines;
|
||||
|
||||
// Test empty stats.
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((size_t) 0, lines.size());
|
||||
lines.clear();
|
||||
|
||||
// Test 1 line stats.
|
||||
populateFakeStats(TEST_UID1, TEST_TAG, IFACE_INDEX1, TEST_COUNTERSET0, value1, mFakeStatsMap);
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((size_t) 2, lines.size()); // TEST_TAG != 0 -> 1 entry becomes 2 lines
|
||||
expectStatsLineEqual(value1, IFACE_NAME1, TEST_UID1, TEST_COUNTERSET0, 0, lines[0]);
|
||||
expectStatsLineEqual(value1, IFACE_NAME1, TEST_UID1, TEST_COUNTERSET0, TEST_TAG, lines[1]);
|
||||
|
|
@ -443,7 +443,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetStatsSortedAndGrouped) {
|
|||
populateFakeStats(TEST_UID1, TEST_TAG + 1, IFACE_INDEX1, TEST_COUNTERSET0, value2,
|
||||
mFakeStatsMap);
|
||||
populateFakeStats(TEST_UID2, TEST_TAG, IFACE_INDEX1, TEST_COUNTERSET0, value1, mFakeStatsMap);
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((size_t) 9, lines.size());
|
||||
lines.clear();
|
||||
|
||||
|
|
@ -451,7 +451,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetStatsSortedAndGrouped) {
|
|||
populateFakeStats(TEST_UID1, TEST_TAG, IFACE_INDEX3, TEST_COUNTERSET0, value1, mFakeStatsMap);
|
||||
populateFakeStats(TEST_UID2, TEST_TAG, IFACE_INDEX3, TEST_COUNTERSET0, value1, mFakeStatsMap);
|
||||
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((size_t) 9, lines.size());
|
||||
|
||||
// Verify Sorted & Grouped.
|
||||
|
|
@ -477,7 +477,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetStatsSortedAndGrouped) {
|
|||
EXPECT_RESULT_OK(mFakeIfaceStatsMap.writeValue(ifaceStatsKey, value1, BPF_ANY));
|
||||
|
||||
ASSERT_EQ(0,
|
||||
parseBpfNetworkStatsDevInternal(&lines, mFakeIfaceStatsMap, mFakeIfaceIndexNameMap));
|
||||
parseBpfNetworkStatsDevInternal(lines, mFakeIfaceStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((size_t) 2, lines.size());
|
||||
|
||||
expectStatsLineEqual(value3, IFACE_NAME1, UID_ALL, SET_ALL, TAG_NONE, lines[0]);
|
||||
|
|
@ -518,7 +518,7 @@ TEST_F(BpfNetworkStatsHelperTest, TestGetStatsSortAndOverflow) {
|
|||
// TODO: Mutate counterSet and enlarge TEST_MAP_SIZE if overflow on counterSet is possible.
|
||||
|
||||
std::vector<stats_line> lines;
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(&lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ(0, parseBpfNetworkStatsDetailInternal(lines, mFakeStatsMap, mFakeIfaceIndexNameMap));
|
||||
ASSERT_EQ((size_t) 12, lines.size());
|
||||
|
||||
// Uid 0 first
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ int bpfGetIfaceStatsInternal(const char* iface, Stats* stats,
|
|||
const BpfMap<uint32_t, StatsValue>& ifaceStatsMap,
|
||||
const BpfMap<uint32_t, IfaceValue>& ifaceNameMap);
|
||||
// For test only
|
||||
int parseBpfNetworkStatsDetailInternal(std::vector<stats_line>* lines,
|
||||
int parseBpfNetworkStatsDetailInternal(std::vector<stats_line>& lines,
|
||||
const BpfMap<StatsKey, StatsValue>& statsMap,
|
||||
const BpfMap<uint32_t, IfaceValue>& ifaceMap);
|
||||
// For test only
|
||||
|
|
@ -106,7 +106,7 @@ void maybeLogUnknownIface(int ifaceIndex, const BpfMap<Key, StatsValue>& statsMa
|
|||
}
|
||||
|
||||
// For test only
|
||||
int parseBpfNetworkStatsDevInternal(std::vector<stats_line>* lines,
|
||||
int parseBpfNetworkStatsDevInternal(std::vector<stats_line>& lines,
|
||||
const BpfMap<uint32_t, StatsValue>& statsMap,
|
||||
const BpfMap<uint32_t, IfaceValue>& ifaceMap);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue