首页 > 其他分享 >Android libmeminfo

Android libmeminfo

时间:2022-09-21 15:35:06浏览次数:56  
标签:std const libmeminfo char constexpr vector static Android

android 10 增加了libmeminfo.so, 用于内存信息的查询,主要通过解析/proc/meminfo文件

源代码位于 system/core/libmeminfo, 代码非常简单没什么好说的

// system/core/libmeminfo/include/meminfo/sysmeminfo.h

class SysMemInfo final {
    // System or Global memory accounting
  public:
    static constexpr const char* kMemTotal = "MemTotal:";
    static constexpr const char* kMemFree = "MemFree:";
    static constexpr const char* kMemBuffers = "Buffers:";
    static constexpr const char* kMemCached = "Cached:";
    static constexpr const char* kMemShmem = "Shmem:";
    static constexpr const char* kMemSlab = "Slab:";
    static constexpr const char* kMemSReclaim = "SReclaimable:";
    static constexpr const char* kMemSUnreclaim = "SUnreclaim:";
    static constexpr const char* kMemSwapTotal = "SwapTotal:";
    static constexpr const char* kMemSwapFree = "SwapFree:";
    static constexpr const char* kMemMapped = "Mapped:";
    static constexpr const char* kMemVmallocUsed = "VmallocUsed:";
    static constexpr const char* kMemPageTables = "PageTables:";
    static constexpr const char* kMemKernelStack = "KernelStack:";

    static constexpr const char* bMemcgUsage="memory.usage_in_bytes";
    static constexpr const char* bMemcgLimit="memory.limit_in_bytes";
    static constexpr const char* bMemcgSwUsage="memory.memsw.usage_in_bytes";
    static constexpr const char* bMemcgSwLimit="memory.memsw.limit_in_bytes";

    static const std::vector<std::string> kDefaultSysMemInfoTags;
    static const std::vector<std::string> kDefaultSysMemcgTags;

    SysMemInfo() = default;

    // Parse /proc/meminfo and read values that are needed
    bool ReadMemInfo(const std::string& path = "/proc/meminfo");
    bool ReadMemInfo(const std::vector<std::string>& tags, std::vector<uint64_t>* out,
                     const std::string& path = "/proc/meminfo");
    bool ReadMemInfo(std::vector<uint64_t>* out, const std::string& path = "/proc/meminfo");

    //bool ReadMemcgInfo(const std::string& path = "/dev/memcg");
    bool ReadMemcgInfo(std::vector<uint64_t>* out, const std::string& path = "/dev/memcg");
    bool ReadMemcgInfo(const std::vector<std::string>& tags, std::vector<uint64_t>* out,
                       const std::string& path = "/dev/memcg");

    ....
}

native中使用方法:

// frameworks/base/core/jni/android_os_Debug.cpp

static void android_os_Debug_getMemInfo(JNIEnv *env, jobject clazz, jlongArray out)
    std::vector<uint64_t> mem(MEMINFO_COUNT);
    std::vector<std::string> tags(::android::meminfo::SysMemInfo::kDefaultSysMemInfoTags);
    tags.insert(tags.begin() + MEMINFO_ZRAM_TOTAL, "Zram:");
    ::android::meminfo::SysMemInfo smi;
    if (!smi.ReadMemInfo(tags, &mem)) {
        jniThrowRuntimeException(env, "SysMemInfo read failed");
        return;
    }
    ...
}

android中接口在 frameworks/base/core/java/com/android/internal/util/MemInfoReader.java中

java中使用,参考 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

MemInfoReader memInfo = new MemInfoReader();
memInfo.readMemInfo();

final long cachedKb = memInfo.getCachedSizeKb();
final long freeKb = memInfo.getFreeSizeKb();
final long zramKb = memInfo.getZramTotalSizeKb();
final long kernelKb = memInfo.getKernelUsedSizeKb();

标签:std,const,libmeminfo,char,constexpr,vector,static,Android
From: https://www.cnblogs.com/tangshunhui/p/16715480.html

相关文章

  • Android优雅地处理按钮重复点击的几种方法
    App中,有很大一部分场景是点击按钮,向服务端提交数据,由于网络请求需要时间,用户很可能会多次点击,造成数据重复提交,造成各种莫名其妙的问题。因此,防止按钮多次点击,是Android开......
  • Android12申请蓝牙权限说明
    根据google官方资料,Android12(API31)引入了BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE和BLUETOOTH_CONNECT权限,可让您的应用扫描附近的设备,而无需请求位置权限。这几个权限......
  • Android使用ViewPager2实现页面滑动切换
    Android使用ViewPager2实现页面滑动切换 作者:QiShare转载地址:https://juejin.cn/post/70655660992233472131.引言在很多应用中,我们经常会看到多个页面之间滑动切换......
  • Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8
    因为另一台机器开发时,androidstudio提示更新什么东西,无脑点了。导致原先的那台开发机器,无法build,报异常:AndroidGradlepluginrequiresJava11torun.Youarecurre......
  • Android 11 高版本 出现外部存储无法访问的问题
    问题起因:安卓11,同一个APK, 安装后在本地Download目录创建了一个文件, 然后卸载这个APK。在重新安装这个APK,之前创建的文件就不能访问。签名我这边也设置过的,也还是一样的......
  • Target API level升级到31后Android 12启动黑屏卡死
    1)TargetAPIlevel升级到31后Android12启动黑屏卡死​2)UnityRenderer中SortingLayer、SortingOrder底层如何实现渲染排序3)如何用Addressable实现按需下载4)多个Package需......
  • android 开源库
    高斯模糊BlurryAndroid图像处理-高斯模糊的原理及实现jp.wasabeef:blurry:2.1.1......
  • 【日历问题】Android应用插入日历返回的Uri为空
    ​【问题描述】Android应用插入日历返回的Uri为空(仅在鸿蒙系统出现)valvalues=ContentValues().apply{put(CalendarContract.Reminders.EVENT_ID,ContentUris.par......
  • 作为 Android 工程师进行尽职调查
    作为Android工程师进行尽职调查作者:伊山·卡纳,高级软件工程师,Android我最近发表了关于作为Android工程师进行尽职调查的演讲。在参与了多个涉及与第三方供应......
  • Android Studio 报错
      01、AndroidStudio报URIisnotregistered(Settings|Languages&Frameworks|SchemasandDTDs)错误这个问题真的很离奇,今天不知道为什么就出现了这个问题,在......