我在OPO设备上对我们的一些代码进行基准测试,这通常非常快,而且我看到很多“怪异”的性能怪异。在深入研究Android本机代码之前,我想我会问这里。
我所看到的是,paint.setColor(argbInt)
的呼叫执行时间大约是以下呼叫的5倍:
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(false);
canvas.drawRect(x, y, x + w, y + h, paint);
paint.setAntiAlias(antialias);
现在绘制矩形发生在GPU上所以我猜我没有看到任何开销。但为什么我应该为油漆颜色增加开销呢?
作为一个自然的后续行动,我该如何减少开销呢?
我也看到了canvas.restore()
的相当大的开销(大约比上面的代码慢4倍),但我想这可能是有意义的,因为它可能是一个复杂的操作。我只是不明白为什么setColor
会变慢?
为了记录,我在一个带有System.nanoTime()的OPO上测试了它的性能,并且在性能方面非常一致(不是突然的GC侥幸等等)。
答案 0 :(得分:0)
即使在通过代码挖掘之后,我也找不到“为什么”这种情况发生的真正答案。我的解决方案是为我们主题中的每个样式缓存 <div class="form-group">
<div class="signup-profile-row-96">
<div>Crop Image and Upload</div>
<button class="row-left btn btn-primary" ngf-select ng-model="picFile" accept="image/*">
Select Picture</button>
<div ngf-drop ng-model="picFile" ngf-pattern="image/*"
class="cropArea">
<img-crop image="picFile | ngfDataUrl"
result-image="croppedDataUrl"
result-image-quality="0.4"
result-image-size="450"
result-image-format="image/jpeg"
ng-init="croppedDataUrl=''">
</img-crop>
</div>
<div><br/>
<img ng-src="{{croppedDataUrl}}" />
</div><br/>
<button class="row-left btn btn-primary" ng-click="upload(croppedDataUrl, picFile)">Submit</button>
<span class="progress" ng-show="progress >= 0">
<div style="width:{{progress}}%" ng-bind="progress + '%'"></div>
</span>
<span ng-show="result">Upload Successful</span>
<span class="err" ng-show="errorMsg">{{errorMsg}}</span>
</div>
</div>
个对象,因此重新绘制具有类似设置的组件可以重用先前设置的值。这似乎确实对绩效产生了积极影响。