当前位置:网站首页>dumpsys meminfo 详解
dumpsys meminfo 详解
2022-08-10 18:28:00 【私房菜】
源码基于:Android R
0. 前言
其实,很久以前在 android 查看内存使用情况 一文中已经分析过dumpsys meminfo,但最近在统计内存数据的时候发现怎么也对不上,所以重新分析了下源码,之前在 android 查看内存使用情况 一文只是讲了个大概框架或含义。本篇博文会结合代码详细分析下AMS 下meminfo service 以及dump 的过程。
1. meminfo 的起点dumpsys
AMS 下的meminfo 统计是通过dumpsys 命令进行dump 的,这个是存放在 /system/bin/下的bin 文件。源码目录位于 frameworks/native/cmds/dumpsys/下,详细的请查看 android 中的dumpsys 一文。
2. meminfo services -- MemBinder
可以dump的这些service都是在ServiceManager里面添加上的,例如meminfo是在:frameworks/base/services/java/com/android/server/am/ActivityManagerService.java的函数setSystemProcess添加的:
frameworks/base/services/core/java/com/android/server/am/AMS.java
public void setSystemProcess() {
try {
...
ServiceManager.addService("meminfo", new MemBinder(this), /* allowIsolated= */ false,
DUMP_FLAG_PRIORITY_HIGH);
...
}
下面来看下:
frameworks/base/services/core/java/com/android/server/am/AMS.java
static class MemBinder extends Binder {
ActivityManagerService mActivityManagerService;
private final PriorityDump.PriorityDumper mPriorityDumper =
new PriorityDump.PriorityDumper() {
@Override
public void dumpHigh(FileDescriptor fd, PrintWriter pw, String[] args,
boolean asProto) {
dump(fd, pw, new String[] {"-a"}, asProto);
}
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args, boolean asProto) {
mActivityManagerService.dumpApplicationMemoryUsage(
fd, pw, " ", args, false, null, asProto);
}
};
MemBinder(ActivityManagerService activityManagerService) {
mActivityManagerService = activityManagerService;
}
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
try {
mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
if (!DumpUtils.checkDumpAndUsageStatsPermission(mActivityManagerService.mContext,
"meminfo", pw)) return;
PriorityDump.dump(mPriorityDumper, fd, pw, args);
} finally {
mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
}
}
}
里面定义了两个成员变量:
- mActivityManagerService:记录AMS 对象;
- mPriorityDumper:通过其dump() 接口,连接AMS.dumpApplicationMemoryUsage();
真正实现的地方是在AMS 的dumpApplicationMemoryUsage() 中。
边栏推荐
猜你喜欢
随机推荐
【数据存储精讲】整型和浮点型有什么区别?为什么会精度丢失?
谈谈宝石方块游戏中的设计
【HMS core】【FAQ】AR Engine、Analytics Kit、Video Editor Kit、Image Kit、Map Kit典型问题合集2
postgis空间数据导入及可视化
搭载2.8K 120Hz OLED华硕好屏 无畏Pro15 2022锐龙版屏开得胜
[JMeter]Beanshell解析Json格式的接口响应数据
【图像分割】基于元胞自动机实现图像分割附matlab代码
MySQL 查询出重复出现两次以上的数据 - having
20220810
803. 区间合并(贪心)左端点、右端点排序均可
破解校园数字安全难点,联想推出智慧教育安全体系
2022-08-09 Study Notes day32-IO Stream
stm32中的CAN通讯列表模式配置解析与源码
NPDP|传统行业产品经理如何进行能力提升?
剑指 Offer II 034. 外星语言是否排序-辅助数组法
【2015】【论文笔记】等离子光混合器THz辐射的光谱——
StoneDB Document Bug Hunting Season 1
【HMS core】【FAQ】Analytics Kit、Push Kit典型问题合集3
开发模式对测试的影响
Major upgrade of MSE Governance Center - Traffic Governance, Database Governance, Same AZ Priority