在Corona SDK中测量图像加载所花费的时间。

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

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

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

而且,当加载大型图像时,FPS 显著下降。我使用 enterFrame 事件来监视这个过程,当加载图像时,它会在 1 帧内打印大约 0.3 的值。

Runtime:addEventListener( "enterFrame", myListener )

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

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

所以,我该如何测量实际加载和显示图像所需的时间?

点赞
用户312586
用户312586

由于 Corona SDK 是闭源的,我们需要使用文档和想象力。

我看到这里有三种可能:

  1. Corona 正在做它所说的,你的主观体验是错误的。
  2. Corona 在后台线程中加载图像,因此对 display.newImageRect 的调用是非阻塞的:它“开始”加载图像,然后继续执行。当其他 SDK(主要是基于 javascript 的 SDK)发生这种情况时,您会得到一个“就绪回调”,您可以在图像对象上使用它,但我在文档中找不到这种东西。
  3. Corona 快速加载图像,但需要“以后额外的工作”。例如,它会生成很多垃圾,必须进行垃圾回收。因此,图像加载速度很快,但这个“额外的工作”会减慢应用程序。

我打赌是第三种情况。但这并不重要。无论是哪种情况导致了减速,它们的解决方式都相同:不要在绘制图像之前加载它们,而是要 预加载 它们。

我不使用 Corona SDK,但是快速谷歌搜索指向了 storyboard 模块,特别是 storyboard.loadScene

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

2014-10-15 10:51:06
用户869951
用户869951

最可能的情况是图像在场景的渲染循环中被呈现。没有事件来指示图像已被渲染。但是,如果在场景的创建事件处理程序或按钮单击处理程序中创建显示对象,并注册一个 enterFrame 事件处理程序,您可以测量此事件和第一个帧事件之间的时间。我在这里不能尝试,但我的猜测是这将为您提供渲染图像所需时间的估计。不要使用 FPS。更大的图像可能会给您更大的测量结果。如果您测量 enterFrame 事件之间的时间,您可能会发现它比 create/click 事件和第一个帧事件之间的时间或者在 create/click 事件之后的前两个帧事件之间的时间要短得多。如果您想看一些示例代码,请发表评论。

2014-10-16 02:42:04