blob: d4b87386e0e5ebd05a712e51b1ec129b27f4be06 [file] [log] [blame]
Connor O'Brien57337192018-11-20 12:49:16 -08001
2#include <unordered_map>
3#include <vector>
4
5#include <gtest/gtest.h>
6
7#include <cputimeinstate.h>
8
9namespace android {
10namespace bpf {
11
12using std::vector;
13
14TEST(TimeInStateTest, SingleUid) {
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070015 auto times = getUidCpuFreqTimes(0);
16 ASSERT_TRUE(times.has_value());
17 EXPECT_FALSE(times->empty());
Connor O'Brien57337192018-11-20 12:49:16 -080018}
19
20TEST(TimeInStateTest, AllUid) {
21 vector<size_t> sizes;
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070022 auto map = getUidsCpuFreqTimes();
23 ASSERT_TRUE(map.has_value());
Connor O'Brien57337192018-11-20 12:49:16 -080024
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070025 ASSERT_FALSE(map->empty());
Connor O'Brien57337192018-11-20 12:49:16 -080026
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070027 auto firstEntry = map->begin()->second;
Connor O'Brien57337192018-11-20 12:49:16 -080028 for (const auto &subEntry : firstEntry) sizes.emplace_back(subEntry.size());
29
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070030 for (const auto &vec : *map) {
Connor O'Brien57337192018-11-20 12:49:16 -080031 ASSERT_EQ(vec.second.size(), sizes.size());
32 for (size_t i = 0; i < vec.second.size(); ++i) ASSERT_EQ(vec.second[i].size(), sizes[i]);
33 }
34}
35
36TEST(TimeInStateTest, RemoveUid) {
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070037 auto times = getUidCpuFreqTimes(0);
38 ASSERT_TRUE(times.has_value());
39 ASSERT_FALSE(times->empty());
Connor O'Brien57337192018-11-20 12:49:16 -080040
41 uint64_t sum = 0;
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070042 for (size_t i = 0; i < times->size(); ++i) {
43 for (auto x : (*times)[i]) sum += x;
Connor O'Brien57337192018-11-20 12:49:16 -080044 }
45 ASSERT_GT(sum, (uint64_t)0);
46
47 ASSERT_TRUE(clearUidCpuFreqTimes(0));
48
Connor O'Brienf03b6ae2019-06-05 18:03:12 -070049 auto times2 = getUidCpuFreqTimes(0);
50 ASSERT_TRUE(times2.has_value());
51 ASSERT_EQ(times2->size(), times->size());
52 for (size_t i = 0; i < times->size(); ++i) {
53 ASSERT_EQ((*times2)[i].size(), (*times)[i].size());
54 for (size_t j = 0; j < (*times)[i].size(); ++j) ASSERT_LE((*times2)[i][j], (*times)[i][j]);
Connor O'Brien57337192018-11-20 12:49:16 -080055 }
56}
57
58} // namespace bpf
59} // namespace android