blob: cdb13b80ffad8d96f6687d7039ca791da8ef6483 [file] [log] [blame]
// Copyright 2019 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 "chrome/browser/android/customtabs/dynamicmodule/module_metrics.h"
#include <string>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/test/metrics/histogram_tester.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace customtabs {
namespace {
const char kTestSmaps[] =
"95d75000-ab195000 r--s 00000000 fd:02 294922 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.vdex\n"
"Size: 348288 kB\n"
"Rss: 45328 kB\n"
"Pss: 45328 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 45328 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 45328 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd mr me ms \n"
"ab195000-ab19a000 r-xp 00000000 fd:00 427 /system/bin/app_process32\n"
"Size: 20 kB\n"
"Rss: 12 kB\n"
"Pss: 3 kB\n"
"Shared_Clean: 12 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 0 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 12 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd ex mr mw me dw \n"
"bbfc1000-bc36a000 r--p 00000000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n"
"Size: 3748 kB\n"
"Rss: 2988 kB\n"
"Pss: 2988 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 2988 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 2988 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd mr mw me \n"
"bc36a000-bc397000 r-xp 003a9000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n"
"Size: 180 kB\n"
"Rss: 4 kB\n"
"Pss: 4 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 4 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 4 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd ex mr mw me \n"
"bc397000-becbd000 rw-p 00000000 00:00 0 [anon:.bss]\n"
"Size: 42136 kB\n"
"Rss: 7384 kB\n"
"Pss: 7384 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 0 kB\n"
"Private_Dirty: 7384 kB\n"
"Referenced: 7384 kB\n"
"Anonymous: 7384 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd wr mr mw me ac \n"
"Name: [anon:.bss]\n"
"bc397000-becbd000 rw-p 00000000 00:00 0 [anon:.bss]\n"
"Size: 42136 kB\n"
"Rss: 7384 kB\n"
"Pss: 7384 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 0 kB\n"
"Private_Dirty: 7384 kB\n"
"Referenced: 7384 kB\n"
"Anonymous: 7384 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd wr mr mw me ac \n"
"Name: [anon:.bss]\n"
"becbd000-becbe000 r--p 003d6000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n"
"Size: 4 kB\n"
"Rss: 4 kB\n"
"Pss: 4 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 4 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 4 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd mr mw me \n"
"becbe000-becbf000 rw-p 003d7000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n"
"Size: 4 kB\n"
"Rss: 4 kB\n"
"Pss: 4 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 0 kB\n"
"Private_Dirty: 4 kB\n"
"Referenced: 4 kB\n"
"Anonymous: 4 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd wr mr mw me ac \n"
"becc0000-bece1000 rw-s 00064000 00:0c 11218 /dev/kgsl-3d0\n"
"Size: 132 kB\n"
"Rss: 8 kB\n"
"Pss: 6 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 4 kB\n"
"Private_Clean: 0 kB\n"
"Private_Dirty: 4 kB\n"
"Referenced: 8 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd wr sh mr mw me ms dc de dd \n"
"c1a03000-c2493000 r--s 08654000 fd:02 294358 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/base.apk\n"
"Size: 10816 kB\n"
"Rss: 2124 kB\n"
"Pss: 745 kB\n"
"Shared_Clean: 2008 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 116 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 2124 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd mr me ms \n"
"c2493000-c2d03000 rw-s 00000000 00:08 10519 anon_inode:dmabuf\n"
"Size: 8640 kB\n"
"Rss: 0 kB\n"
"Pss: 0 kB\n"
"Shared_Clean: 0 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 0 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 0 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd wr sh mr mw me ms pf io de dd \n"
"c5355000-c5466000 r--s 0948b000 fd:02 294358 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/base.apk\n"
"Size: 1092 kB\n"
"Rss: 1092 kB\n"
"Pss: 498 kB\n"
"Shared_Clean: 1092 kB\n"
"Shared_Dirty: 0 kB\n"
"Private_Clean: 0 kB\n"
"Private_Dirty: 0 kB\n"
"Referenced: 1092 kB\n"
"Anonymous: 0 kB\n"
"AnonHugePages: 0 kB\n"
"Swap: 0 kB\n"
"SwapPss: 0 kB\n"
"KernelPageSize: 4 kB\n"
"MMUPageSize: 4 kB\n"
"Locked: 0 kB\n"
"VmFlags: rd mr me ms \n";
} // namespace
TEST(ModuleMetricsTest, RecordCodeMemoryFootprint) {
base::HistogramTester histogram_tester;
base::FilePath temp_path;
base::ScopedFILE temp_file(CreateAndOpenTemporaryFile(&temp_path));
ASSERT_TRUE(temp_file);
ASSERT_TRUE(base::WriteFileDescriptor(fileno(temp_file.get()), kTestSmaps,
strlen(kTestSmaps)));
memory_instrumentation::OSMetrics::SetProcSmapsForTesting(temp_file.get());
customtabs::RecordCodeMemoryFootprint(
"com.google.android.googlequicksearchbox");
histogram_tester.ExpectUniqueSample(
"CustomTabs.DynamicModule.ProportionalSet.OnModuleLoad", 55712UL, 1);
histogram_tester.ExpectUniqueSample(
"CustomTabs.DynamicModule.ResidentSet.OnModuleLoad", 55712UL, 1);
}
} // namespace customtabs