2014-10-13 3 views
0

코로나 SDK에서 큰 이미지 로딩을 벤치마킹하려고합니다.코로나 SDK에서 이미지 로딩 경과 시간 측정

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

약 8ms의 값을 반환합니다. 디스플레이가 이미지를로드하는 데 시간이 더 오래 걸린다는 것을 알고 있습니다. 실제로 8ms가 걸리면 지연을 알 수 없으므로주의해야합니다. 약 300 밀리 초가 걸릴 것이라고 말하고 싶습니다.

또한 큰 이미지를로드 할 때 FPS가 크게 떨어집니다. 나는 이것을 enterFrame 이벤트를 사용하여 모니터링하고 있으며 이미지를로드 할 때 1 프레임에 약 0.3의 값을 출력합니다.

Runtime:addEventListener("enterFrame", myListener) 

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

이미지를로드하는 데 1/60 초 미만이 소요되는 경우에도로드 할 때 프레임을 렌더링하는 데 시간이 오래 걸립니다. 내 생각에 렌더링이 비동기 적으로 다른 곳에서 발생하고 있음을 의미합니다.

그럼 실제로 이미지를로드하고 표시하는 데 걸리는 시간을 어떻게 측정 할 수 있습니까?

+0

* .jpg 대신 * .png를 사용할 수 있습니다. – Albert

+0

그게 어떻게 바뀌나요? – Pier

+0

정말 유감스럽게도 PNG 이미지 (1600x1200)를 사용해 보았고 매우 짧은 시간을 보냈지 만'code'newImageRect가 아닌'code'display.newImage를 사용했으며 파일 크기는 50kb에 불과했습니다. 버그, 나는 오류를 해결해야합니다 .... – Albert

답변

1

코로나 SDK는 폐쇄 소스이므로 문서와 상상력을 사용해야합니다.

나는 여기에 세 가지 가능성을 참조하십시오

  1. 코로나는이 말씀을하고있다, 그리고 주관적인 경험이 잘못된 것입니다.
  2. 코로나는 이미지를 백그라운드 스레드에로드하므로 display.newImageRect에 대한 호출이 비 블로킹입니다. 즉, 이미지로드가 시작되고 계속됩니다. 다른 SDK (대부분 자바 스크립트 기반 SDK)에서 이런 일이 발생하면 이미지 객체에서 사용할 수있는 "준비 콜백 (ready callback)"을 얻을 수 있지만 문서에서 그런 것을 찾을 수 없습니다.
  3. 코로나는 이미지를 빠르게로드하지만 나중에 "추가 작업"이 필요합니다. 예를 들어, 가비지 수집해야하는 가비지를 많이 생성합니다. 따라서 이미지가 빠르게로드되지만이 '추가 작업'으로 인해 앱 속도가 느려집니다.

내 베팅은 3입니다. 그러나 이것은 별 문제가되지 않습니다. 이러한 옵션 중 어떤 옵션이 속도 저하의 원인이되는지에 관계없이 동일한 방법으로 해결할 수 있습니다. 그리기 전에 이미지를로드하는 대신 미리로드을 사용해야합니다.

저는 Corona SDK를 사용하지 않지만 빠른 google은 storyboard module, 특히 storyboard.loadScene으로 알려줍니다.

새 장면을 만들고, 필요한 모든 이미지를 나열한 다음,로드하기 전에로드하십시오. 그러면 이미지로드가 앱을 느리게하지 않고 미리 수행됩니다.

0

대부분 장면의 렌더링 루프 중에 이미지가 렌더링됩니다. 이미지가 렌더링되었음을 나타내는 이벤트가 없습니다. 그러나 장면의 create 이벤트 핸들러 또는 버튼 클릭 핸들러에 표시 객체를 만들고 enterFrame 이벤트 핸들러를 등록하면 해당 이벤트와 첫 번째 프레임 이벤트 사이의 시간을 측정 할 수 있습니다. 나는 이것을 여기에서 시도 할 수 없다. 그러나 나의 추측은 이것이 당신에게 이미지를 렌더링하는 시간의 예상을 줄 것이다. FPS를 사용하지 마십시오. 큰 이미지는 아마도 더 큰 측정 값을 줄 것입니다. enterFrame 이벤트 사이의 시간을 측정하면 생성/클릭 이벤트와 첫 번째 프레임 이벤트 사이의 시간보다 훨씬 작거나, 또는 두 번째 프레임 이벤트 사이의 시간보다 훨씬 작다는 것을 알 수 있습니다. 몇 가지 예제 코드를 보려면 의견을 게시하십시오.

관련 문제