summaryrefslogtreecommitdiff
path: root/base/process/process_metrics_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/process/process_metrics_unittest.cc')
-rw-r--r--base/process/process_metrics_unittest.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/base/process/process_metrics_unittest.cc b/base/process/process_metrics_unittest.cc
index 21ad8ceea9..288cde9fc6 100644
--- a/base/process/process_metrics_unittest.cc
+++ b/base/process/process_metrics_unittest.cc
@@ -24,6 +24,10 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/multiprocess_func_list.h"
+#if defined(OS_MACOSX)
+#include <sys/mman.h>
+#endif
+
namespace base {
namespace debug {
@@ -53,6 +57,42 @@ class SystemMetricsTest : public testing::Test {
/////////////////////////////////////////////////////////////////////////////
+#if defined(OS_MACOSX) && !defined(OS_IOS) && !defined(ADDRESS_SANITIZER)
+TEST_F(SystemMetricsTest, LockedBytes) {
+ ProcessHandle handle = GetCurrentProcessHandle();
+ std::unique_ptr<ProcessMetrics> metrics(
+ ProcessMetrics::CreateProcessMetrics(handle, nullptr));
+
+ size_t initial_locked_bytes;
+ bool result =
+ metrics->GetMemoryBytes(nullptr, nullptr, nullptr, &initial_locked_bytes);
+ ASSERT_TRUE(result);
+
+ size_t size = 8 * 1024 * 1024;
+ std::unique_ptr<char[]> memory(new char[size]);
+ int r = mlock(memory.get(), size);
+ ASSERT_EQ(0, r);
+
+ size_t new_locked_bytes;
+ result =
+ metrics->GetMemoryBytes(nullptr, nullptr, nullptr, &new_locked_bytes);
+ ASSERT_TRUE(result);
+
+ // There should be around |size| more locked bytes, but multi-threading might
+ // cause noise.
+ EXPECT_LT(initial_locked_bytes + size / 2, new_locked_bytes);
+ EXPECT_GT(initial_locked_bytes + size * 1.5, new_locked_bytes);
+
+ r = munlock(memory.get(), size);
+ ASSERT_EQ(0, r);
+
+ result =
+ metrics->GetMemoryBytes(nullptr, nullptr, nullptr, &new_locked_bytes);
+ ASSERT_TRUE(result);
+ EXPECT_EQ(initial_locked_bytes, new_locked_bytes);
+}
+#endif // defined(OS_MACOSX) && !defined(OS_IOS) && !defined(ADDRESS_SANITIZER)
+
#if defined(OS_LINUX) || defined(OS_ANDROID)
TEST_F(SystemMetricsTest, IsValidDiskName) {
std::string invalid_input1 = "";