// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/android/pmf_utils.h"
#include "base/files/file_util.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base::android {
TEST(PmfUtilsTest, CalculatePrivateMemoryFootprint) {
const char kStatusFile[] =
"First: 1\n"
"Second: 2 kB\n"
"VmSwap: 10 kB\n"
"Third: 10 kB\n"
"VmHWM: 72 kB\n"
"Last: 8";
const char kStatmFile[] = "100 40 25 0 0";
const uint64_t expected_swap_kb = 10;
const uint64_t expected_pmf =
(40 - 25) * getpagesize() / 1024 + expected_swap_kb;
base::FilePath statm_path;
EXPECT_TRUE(base::CreateTemporaryFile(&statm_path));
EXPECT_TRUE(base::WriteFile(statm_path, kStatmFile));
base::FilePath status_path;
EXPECT_TRUE(base::CreateTemporaryFile(&status_path));
EXPECT_TRUE(base::WriteFile(status_path, kStatusFile));
base::File statm_file(statm_path,
base::File::FLAG_OPEN | base::File::FLAG_READ);
base::File status_file(status_path,
base::File::FLAG_OPEN | base::File::FLAG_READ);
std::optional<uint64_t> pmf =
PmfUtils::CalculatePrivateMemoryFootprintForTesting(statm_file,
status_file);
EXPECT_TRUE(pmf.has_value());
EXPECT_EQ(expected_pmf, pmf.value() / 1024);
}
} // namespace base::android