# 18.10:性能统计

移动应用开发中会有性能统计相关的需求,比如想要统计应用的卡顿,内存使用以及 CPU 的占用等信息,统计这些信息可以方便的为后续优化做准备,本节笔者简单介绍一下如何在 OpenHarmony 上统计这些基础信息。

# 18.10.1:统计内存使用情况

ArkUI 开发框架在 @ohos.hidebug 模块中提供了获取应用内存使用情况的方法,包括应用进程的静态堆内存(native heap)信息、应用进程内存占用PSS(Proportional Set Size)信息等;可以完成虚拟机内存切片导出,虚拟机 CPU Profiling 采集等操作。简单样例如下所示:

  • 引入 hidebug 模块

    import hidebug from '@ohos.hidebug';
    
    1
  • 使用 hidebug 方法

    private statisticMemoryInfo() {
      // native heap内存的已分配内存大小
      let nativeHeapSize = hidebug.getNativeHeapSize();
      
      // native heap内存的空闲内存大小
      let nativeHeapFreeSize = hidebug.getNativeHeapFreeSize();
      
      // 获取应用进程PSS内存大小
      let pss = hidebug.getPss();
      
      // 获取进程的共享脏内存大小。
      let sharedDirty = hidebug.getSharedDirty();
      
      // 获取进程的私有脏内存大小。
      let privateDirty = hidebug.getPrivateDirty();
      
      // 利用@ohos.app.ability.appManager模块的方法
      appManager.getAppMemorySize().then((size) => {
        console.log("memory size: " + size)
      }).catch((error) => {
        console.log("getAppMemorySize() error: " + JSON.stringify(error))
      })
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23

    📢:getPrivateDirty() 方法在 API 9 才开始提供,另外在 @ohos.app.ability.appManager 模块中也提供了获取进程内存的方法 getAppMemorySize()

# 18.10.2:统计CPU占用情况

ArkUI 开发框架在 @ohos.hidebug 模块中提供了获取应用 CPU 占用情况的方法,简单样例如下所示:

  • 引入 hidebug 模块

    import hidebug from '@ohos.hidebug';
    
    1
  • 使用 hidebug 方法

    private statisticCpuInfo() {
      // 获取进程的cpu占用率。
      let cpuUsage = hidebug.getCpuUsage();
    }
    
    1
    2
    3
    4

    📢:getCpuUsage() 方法在 API 9 才开始提供。

# 18.10.3:统计帧率卡顿情况

帧率(Frame rate)是以帧称为单位的位图图像连续出现在显示器上的频率(速率)。统计帧率通常是在单位时间内统计屏幕的刷新率,刷新率越高就表示画面越流畅,目前对于帧率的统计,笔者还没有查到相关文档,等后续再补齐吧……

# 18.10.4:统计电池电量信息

ArkUI 开发框架在 @ohos.batteryInfo 模块中提供了获取设备电池信息的方法,简单样例如下所示:

  • 引入batteryInfo

    import batteryInfo from '@ohos.batteryInfo';
    
    1
  • 使用batteryInfo

    private statisticBatteryInfo() {
      // 获取当前设备剩余电池电量百分比。
      var batteryPercent = batteryInfo.batterySOC;
      // 获取当前设备电池的充电状态。
      var batteryChargeState = batteryInfo.chargingStatus;
      // 获取当前设备电池的健康状态。
      var healthStatus = batteryInfo.healthStatus;
      // 获取当前设备电池的温度,单位0.1摄氏度。
      var batteryTemperature = batteryInfo.batteryTemperature;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

# 18.10.5:完整样例

import hidebug from '@ohos.hidebug';
import appManager from '@ohos.app.ability.appManager';
import batteryInfo from '@ohos.batteryInfo';

@Entry @Component struct ArkUIClubProfileTest {

  @State memoryStr: string = "";
  @State cpuStr: string = "";
  @State frameStr: string = "";

  build() {
    Column({space: 10}) {

      Button("获取内存占用情况")
        .onClick(() => {
          this.statisticMemoryInfo()
        })

      Button("获取CPU使用情况")
        .onClick(() => {
          this.statisticCpuInfo()
        })

      Button("获取电池电量情况")
        .onClick(() => {
          this.statisticBatteryInfo()
        })

      Button("查看帧率卡顿情况")
        .onClick(() => {
          this.statisticFrameInfo()
        })

      Text(this.memoryStr)
        .fontSize(18)

      Text(this.cpuStr)
        .fontSize(18)

      Text(this.frameStr)
        .fontSize(18)
    }
    .width('100%')
    .height("100%")
    .padding(10)
    .backgroundColor("#aabbcc")
  }

  /**
   * 统计内存信息
   */
  private statisticMemoryInfo() {
    // native heap内存的已分配内存大小。
    let nativeHeapSize = hidebug.getNativeHeapSize();
    // native heap内存的空闲内存大小
    let nativeHeapFreeSize = hidebug.getNativeHeapFreeSize();
    // 获取应用进程PSS内存大小。
    let pss = hidebug.getPss();
    // 获取进程的共享脏内存大小。
    let sharedDirty = hidebug.getSharedDirty();
    // 获取进程的私有脏内存大小。
    let privateDirty = hidebug.getPrivateDirty();

    // 利用@ohos.app.ability.appManager模块的方法
    appManager.getAppMemorySize().then((size) => {
      console.log("memory size: " + size)
    }).catch((error) => {
      console.log("getAppMemorySize() error: " + JSON.stringify(error))
    })
  }

  /**
   * 统计 CPU 信息
   */
  private statisticCpuInfo() {
    // 获取进程的cpu占用率。
    let cpuUsage = hidebug.getCpuUsage();
  }

  /**
   * 统计电池信息
   */
  private statisticBatteryInfo() {
    // 获取当前设备剩余电池电量百分比。
    var batteryPercent = batteryInfo.batterySOC;
    // 获取当前设备电池的充电状态。
    var batteryChargeState = batteryInfo.chargingStatus;
    // 获取当前设备电池的健康状态。
    var healthStatus = batteryInfo.healthStatus;
    // 获取当前设备电池的温度,单位0.1摄氏度。
    var batteryTemperature = batteryInfo.batteryTemperature;
  }

  /**
   * 统计帧率信息
   */
  private statisticFrameInfo() {
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

样例运行结果如下图所示:

18_10_5_1

# 18.10.6:小结

本节主要利用 ArkUI 开发框架在 @ohos.hidebug 模块中提供的 API 实现了内存和 CPU 的信息统计,对于帧率的统计,笔者目前还没有找到相关的 API,等后续笔者查到文档后再做补充。最后也非常欢迎小伙伴能给本网站提供更多的开发样例。

(adsbygoogle = window.adsbygoogle || []).push({});
请作者喝杯咖啡

津公网安备 12011402001367号

津ICP备2020008934号-2