开启Profiler性能测试
找个地方写上 egret.Profiler.getInstance().run();开启性能优化。
例如,默认工程中可以写这里:
private onAddToStage(event:egret.Event){
//性能测试
egret.Profiler.getInstance().run();...
}
左上角测试显示结果说明:
draw:100 //绘图的数量,使用WebGL这个数不准确
cost: 0,1,10,6 //业务逻辑开销,引擎开销,GPU开销,游戏位图渲染(不太确定)
FPS:60 //每秒传输帧数
8:14日 补充 。来着官方技术人员Wander(我们亲切的称呼他为弯弯的)回复:第四个参数已经废弃了,因为他不是很精确。理论上是真实渲染开销,采样不是很准。
性能优化
一般我们的游戏会大量的消耗在GPU,渲染中。
提高性能的不二法门就是减少绘图
比如,剔除不显示的内容。
虽然你的内容没有在界面里出现,但注意,引擎依然会绘制那个内容。这点可以从draw这个参数看出来。
设置 对象的visible=false,就不会渲染。
做一些判断将没有在显示范围内的,或已经被遮盖的内容设置成隐藏是提升性能很好的方式。
但这会损耗逻辑性能,但消耗可以忽略不计。
可以多采用逻辑消耗代替GPU消耗的方式提高性能。
源码位置:
egret-core / src / egret / utils / Profiler.ts
输出部分源码,输出的相关参数的方法:
private update(frameTime:number) {
this._tick++;
this._totalDeltaTime += frameTime;
if (this._totalDeltaTime >= this._maxDeltaTime) {
var drawStr = (this._preDrawCount - 1).toString();
var timeStr = Math.ceil(this._logicPerformanceCost).toString() + ","
+ Math.ceil(this._updateTransformPerformanceCost).toString() + ","
+ Math.ceil(this._renderPerformanceCost).toString() + ","
+ Math.ceil(egret.MainContext.instance.rendererContext.renderCost).toString();
var frameStr = Math.floor(this._tick * 1000 / this._totalDeltaTime).toString();
this._txt.text = "draw:" + drawStr + "\n" + "cost:" + timeStr + "\n" + "FPS:" + frameStr;
this._totalDeltaTime = 0;
this._tick = 0;
}
this._preDrawCount = 0;
}
|
|