测量Corona SDK中图像加载的经过时间

时间:2014-10-13 05:38:09

标签: image lua corona

我试图在Corona SDK中对大图像的加载进行基准测试。

local startTime = system.getTimer()
local myImage = display.newImageRect( "someImage.jpg", 1024, 768 )
local endTime = system.getTimer()
print( endTime - startTime ) -- prints 8.4319999999998

返回大约8 ms的值。我知道加载一个显示图像需要更长的时间,因为如果它真的需要8毫秒我不会注意到延迟,但我确实注意到了。我说这需要大约300毫秒。

加载大图像时,FPS也会急剧下降。我使用enterFrame事件对此进行监控,并且在加载图像时,它会在1帧内打印约0.3的值。

Runtime:addEventListener( "enterFrame", myListener )

function onEnterFrame (event)
    print( display.fps )
end

加载时帧渲染需要很长时间,即使图像加载时间不到1/60秒。我想这意味着渲染是在其他地方异步发生的。

那么,我如何衡量真正加载和显示图像所需的时间?

2 个答案:

答案 0 :(得分:1)

由于Corona SDK是封闭源代码,我们必须使用文档和想象力。

我在这里看到三种可能性:

  1. Corona正在做它所说的,你的主观经验是错误的。
  2. Corona正在后台线程中加载图像,因此对display.newImageRect的调用是非阻塞的:它“开始”加载图像,然后继续。当其他SDK(主要是基于javascript的)发生这种情况时,你会得到一个可以在图像对象上使用的“准备回调”,但我在文档中找不到这样的东西。
  3. Corona快速加载图像,但需要“之后的额外工作”。例如,它会产生大量垃圾,必须进行垃圾收集。因此图像加载速度很快,但这种“额外工作”会降低应用程序的速度。
  4. 我的赌注是3.但这并不重要。独立于这些选项中的哪一个导致速度减慢,它们可以以相同的方式解决:不是在绘制图像之前加载图像,而是必须预加载它们。

    我不使用Corona SDK,但快速谷歌指向storyboard module,特别是storyboard.loadScene

    创建一个新场景,列出您需要的所有图像,并在显示之前加载它 - 这样就可以提前完成图像加载,而不会减慢您的应用。

答案 1 :(得分:0)

很可能在场景的渲染循环期间渲染图像。没有事件表明图像已被渲染。但是,如果在场景的创建事件处理程序或按钮单击处理程序中创建显示对象,并注册enterFrame事件处理程序,则可以测量它与第一个帧事件之间的时间。我不能在这里尝试这个,但我的猜测是这会给你一个估计渲染图像的时间。不要使用FPS。较大的图像可能会给您一个更大的测量。如果您测量enterFrame事件之间的时间,您可能会发现它比创建/单击事件和第一个帧事件之间的时间小得多,或者在创建/单击事件之后的前两个帧事件之间。如果您想查看一些示例代码,请发表评论。