CGContext中的性能问题在iOS 4.0中绘制LayerAtPoint

时间:2010-06-28 18:10:21

标签: iphone quartz-graphics

我在iOS 4中调用CGContextDrawLayerAtPoint时遇到了一些性能问题,这些问题在以前版本的操作系统中似乎不存在。

我正在将一个从CGBitmapContextCreate创建的位图上下文中获取的图层复制到drawRect调用期间的视图上下文中。视图和位图大小相同。

位图是用:

创建的
CGBitmapContextCreate(NULL, width, height, 8, width * 4, genericRGBSpace, kCGBitmapByteOrder32Host | kCGImageAlphaNoneSkipFirst);

指示我在CGContextDrawLayerAtPoint上花费的时间比在运行OS 3.2的设备上花费的时间多。事实上,堆栈跟踪表明以下堆栈跟踪占用了更高的时间百分比:

argb32_sample_argb32  
argb32_image_mark  
argb32_image  
ripl_Mark  
ripl_BltImage  
RIPLayerBltImage  
ripc_RenderImage  
ripc_DrawLayer  
CGContextDelegateDrawlayer  
CGContextDrawLayerAtPoint  

而在3.2下运行的相同代码显示

argb32_image_mark_rgb32
argb32_image  
ripl_Mark  
ripl_BltImage  
ripc_RenderImage  
ripc_DrawLayer  
CGContextDelegateDrawLayer  
CGContextDrawLayerAtPoint  

时间百分比低得多。我不确定为什么在iOS 4上调用argb32_sample_argb32以及它正在做什么 - 将现有数据采样到新缓冲区?我不确定为什么这是必要的。视图和位图大小相同,并且未执行缩放。

对此有任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

嗯,没有人对此有任何见解,所以我会重述我们的理论以及我们最终做的事情。理论上说,由于iOS 4现在必须处理不同的屏幕分辨率,因此它采用了更为“通用”的方法进行blitting,并且效率低于它。

最后,它并不重要 - 它更慢,我们必须处理它。我们发现有些地方我们正在冗余地复制,所以我们能够减少我们必须做的复制量。这给我们带来了我们所需的速度。