123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/metrics/psi_memory_parser.h"
- #include <memory>
- #include "base/files/file_util.h"
- #include "base/metrics/statistics_recorder.h"
- #include "base/test/metrics/histogram_tester.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace metrics {
- namespace {
- // Just as the kernel outputs.
- const char kFileContents1[] =
- "some avg10=23.10 avg60=5.06 avg300=15.10 total=417963\n"
- "full avg10=9.00 avg60=19.20 avg300=3.23 total=205933\n";
- // Number of decimals not consistent, slightly malformed - but acceptable.
- const char kFileContents2[] =
- "some avg10=24 avg60=5.06 avg300=15.10 total=417963\n"
- "full avg10=9.2 avg60=19.20 avg300=3.23 total=205933\n";
- } // namespace
- class PSIMemoryParserTest : public testing::Test {
- public:
- PSIMemoryParserTest() = default;
- ~PSIMemoryParserTest() override = default;
- void Init(uint32_t period) {
- cit_ = std::make_unique<PSIMemoryParser>(period);
- }
- uint32_t GetPeriod() { return cit_->GetPeriod(); }
- base::HistogramTester& Histograms() { return histogram_tester_; }
- std::unique_ptr<PSIMemoryParser>& Cit() { return cit_; }
- const std::string& GetMetricPrefix() { return cit_->metric_prefix_; }
- void KillCit() { cit_.reset(); }
- private:
- std::unique_ptr<PSIMemoryParser> cit_;
- base::HistogramTester histogram_tester_;
- };
- TEST_F(PSIMemoryParserTest, CustomInterval) {
- Init(60u);
- EXPECT_EQ(60u, GetPeriod());
- }
- TEST_F(PSIMemoryParserTest, InvalidInterval) {
- Init(15u);
- EXPECT_EQ(10u, GetPeriod());
- }
- TEST_F(PSIMemoryParserTest, InternalsA) {
- Init(10u);
- std::string testContent1 = "prefix" + GetMetricPrefix() + "9.37 suffix";
- EXPECT_EQ(10u, GetPeriod());
- size_t s = 0;
- size_t e = 0;
- EXPECT_EQ(false, internal::FindMiddleString(testContent1, 0, "nothere",
- "suffix", &s, &e));
- EXPECT_EQ(false, internal::FindMiddleString(testContent1, 0, "prefix",
- "notthere", &s, &e));
- EXPECT_EQ(true, internal::FindMiddleString(testContent1, 0, "prefix",
- "suffix", &s, &e));
- EXPECT_EQ(6u, s);
- EXPECT_EQ(17u, e);
- EXPECT_EQ(937, Cit()->GetMetricValue(testContent1, s, e));
- std::string testContent2 = "extra " + testContent1;
- EXPECT_EQ(true, internal::FindMiddleString(testContent2, 0, "prefix",
- "suffix", &s, &e));
- EXPECT_EQ(12u, s);
- EXPECT_EQ(23u, e);
- EXPECT_EQ(937, Cit()->GetMetricValue(testContent2, s, e));
- }
- TEST_F(PSIMemoryParserTest, InternalsB) {
- Init(300);
- int msome;
- int mfull;
- ParsePSIMemStatus stat;
- stat = Cit()->ParseMetrics(kFileContents1, &msome, &mfull);
- EXPECT_EQ(ParsePSIMemStatus::kSuccess, stat);
- EXPECT_EQ(1510, msome);
- EXPECT_EQ(323, mfull);
- }
- TEST_F(PSIMemoryParserTest, InternalsC) {
- Init(60);
- int msome;
- int mfull;
- ParsePSIMemStatus stat;
- stat = Cit()->ParseMetrics(kFileContents1, &msome, &mfull);
- EXPECT_EQ(ParsePSIMemStatus::kSuccess, stat);
- EXPECT_EQ(506, msome);
- EXPECT_EQ(1920, mfull);
- }
- TEST_F(PSIMemoryParserTest, InternalsD) {
- Init(10);
- int msome;
- int mfull;
- ParsePSIMemStatus stat;
- stat = Cit()->ParseMetrics(kFileContents1, &msome, &mfull);
- EXPECT_EQ(ParsePSIMemStatus::kSuccess, stat);
- EXPECT_EQ(2310, msome);
- EXPECT_EQ(900, mfull);
- }
- TEST_F(PSIMemoryParserTest, InternalsE) {
- Init(10);
- int msome;
- int mfull;
- ParsePSIMemStatus stat;
- stat = Cit()->ParseMetrics(kFileContents2, &msome, &mfull);
- EXPECT_EQ(ParsePSIMemStatus::kSuccess, stat);
- EXPECT_EQ(2400, msome);
- EXPECT_EQ(920, mfull);
- }
- TEST_F(PSIMemoryParserTest, ParseResultCounter) {
- Init(10);
- Cit()->LogParseStatus(ParsePSIMemStatus::kSuccess);
- Cit()->LogParseStatus(ParsePSIMemStatus::kInvalidMetricFormat);
- Cit()->LogParseStatus(ParsePSIMemStatus::kInvalidMetricFormat);
- Histograms().ExpectBucketCount("ChromeOS.CWP.ParsePSIMemory",
- ParsePSIMemStatus::kSuccess, 1);
- Histograms().ExpectBucketCount("ChromeOS.CWP.ParsePSIMemory",
- ParsePSIMemStatus::kInvalidMetricFormat, 2);
- }
- } // namespace metrics
|