Openharmony性能分析之Systrace打点
应用APP层埋trace打点方法: import hiTraceMeter from '@ohos.hiTraceMeter';hiTraceMeter.startTrace("lly onScale", 1);hiTraceMeter.finishTrace("lly onScale", 1); 例如:可以通过下
应用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点。
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效果图:
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
更多推荐
所有评论(0)