应用APP层埋trace打点方法:

import hiTraceMeter from '@ohos.hiTraceMeter';
hiTraceMeter.startTrace("lly onScale", 1);
hiTraceMeter.finishTrace("lly onScale", 1);

例如:可以通过下列代码测试matrix4创建耗时情况

import hiTraceMeter from '@ohos.hiTraceMeter';
import matrix4 from '@ohos.matrix4'

@Entry
@Component
struct Index {
  @State scaleValue: number = 1;
  @State pinchValue: number = 1;
  @State pinchX: number = 0;
  @State pinchY: number = 0;

  build() {
    Column() {
      Column() {
        Text('PinchGesture scale:\n' + this.scaleValue)
        Text('PinchGesture center:\n(' + this.pinchX + ',' + this.pinchY + ')')
      }
      .height(200)
      .width(300)
      .border({ width: 3 })
      .margin({ top: 100 })
      // 在组件上绑定缩放比例,可以通过修改缩放比例来实现组件的缩小或者放大
      .scale({ x: this.scaleValue, y: this.scaleValue, z: 1 })
      .gesture(
        // 在组件上绑定三指触发的捏合手势
        PinchGesture({ fingers: 2 })
          .onActionStart((event: GestureEvent) => {
            console.info('Pinch start');
          })
            // 当捏合手势触发时,可以通过回调函数获取缩放比例,从而修改组件的缩放比例
          .onActionUpdate((event: GestureEvent) => {
            this.scaleValue = this.pinchValue * event.scale;
            this.pinchX = event.pinchCenterX;
            this.pinchY = event.pinchCenterY;
            hiTraceMeter.startTrace("lly matrix", 4);
            let matrix = matrix4.identity().scale({
              x: event.scale,
              y: event.scale,
            }).translate({
              x: 100,
              y: 200
            }).copy();
            hiTraceMeter.finishTrace("lly matrix", 4);
          })
          .onActionEnd(() => {
            this.pinchValue = this.scaleValue;
            console.info('Pinch end');
          })
      )
    }
  }
}

通过Systrace可以单个matrix4耗时在7ms,大家持续绘帧过程中,应用层尽量少用matrix4。

注意:Systrace请使用Openharmony的开源性能分析工具Smartperf_Host进行打开,否则看不到自己在应用层埋的trace点。

img

2. C++服务native如何进行Systrace性能打点:

C++ 服务层,Systace打点函数定义在下面图文件中

base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter/hitrace_meter.h

服务组件需要添加依赖库

external_deps = [
"hitrace:hitrace_meter",]

native服务trace打点:

#include "hitrace_meter.h"
StartTrace(HITRACE_TAG_ACE, nameStr);
FinishTrace(HITRACE_TAG_ACE);

ace服务打印trace打点:

// 依赖头文件
#include "base/log/ace_trace.h"
// trace 开始点ACE_SCOPED_TRACE 宏实现是AceScopedTrace构造方法,最终会调用AceTraceBegin。
ACE_SCOPED_TRACE("JSView::MarkNeedUpdate");
void AceTraceBegin(const char* name)
{
    CHECK_NULL_VOID(name);
    std::string nameStr(name);
    StartTrace(HITRACE_TAG_ACE, nameStr);
}

// trace 结束点为附件最近} 实际为AceScopedTrace析构方法,最终会调用AceTraceEnd。
void AceTraceEnd()
{
    FinishTrace(HITRACE_TAG_ACE);
}

ace matrix4 C++层添加Systrace效果图:

img

ace debug trace开关:

param set persist.ace.trace.enabled true
param set persist.ace.trace.layout.enabled true
param set persist.ace.debug.enabled 1

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐