RequestAnimationFrame "sinchronisation"?

42 views
Skip to first unread message

Evgeny Demidov

unread,
Jun 22, 2012, 12:29:22 AM6/22/12
to webgl-d...@googlegroups.com
sorry for off-topic (I didn't get the answer in WebCL or Nvidia OpenCL forums yet).
Since FF7 all my MC WebCL based simulations freeze in a while with CL_INVALID_KERNEL_ARGS error. See simple test
http://www.ibiblio.o...cl/nokia3a.html
it just executes in an infinite cycle

 function run() {
                  cmdQueue.enqueueNDRangeKernel(kernel, 1, [], [32], [8], []);
                  cmdQueue.finish();
                  iter++;
                  output.innerHTML = "<br>" + iter;
   setTimeout("requestAnimFrame(run)", 100);
 }          
The kernel just makes C[] = A[] + B[]
Sometimes the scripts works fine, sometimes freezes after 20 - 100 iterations. It makes easily 10000-100000 iterations in simple cycle if I comment  "requestAnimFrame" operator. Why "requestAnimFrame" may be dangerous (after FF 6) ?
Any suggestions how can I debug my script?

Evgeny Demidov

Error: WebCLCommandQueue::EnqueueNDRangeKernel Failed with error -52.

Mark Callow

unread,
Jun 24, 2012, 10:56:12 PM6/24/12
to webgl-d...@googlegroups.com

On 22/06/2012 13:29, Evgeny Demidov wrote:
function run() {
                  cmdQueue.enqueueNDRangeKernel(kernel, 1, [], [32], [8], []);
                  cmdQueue.finish();
                  iter++;
                  output.innerHTML = "<br>" + iter;
   setTimeout("requestAnimFrame(run)", 100);
 }          
The kernel just makes C[] = A[] + B[]
Sometimes the scripts works fine, sometimes freezes after 20 - 100 iterations. It makes easily 10000-100000 iterations in simple cycle if I comment  "requestAnimFrame" operator. Why "requestAnimFrame" may be dangerous (after FF 6) ?
Probably they aren't expecting requestAnimFrame to be run from a timer.

Are you using the requestAnimFrame from WebGLUtils? The browser function, when it exists, is requestAnimationFrame(). WebGLUtils' requestAnimFrame uses requestAnimationFrame() when it exists, otherwise it uses a timer. Timer to timer is also likely an unexpected behaviour.

Regards

    -Mark

Evgeny Demidov

unread,
Jun 25, 2012, 3:33:21 AM6/25/12
to webgl-d...@googlegroups.com
function run() {
                  cmdQueue.enqueueNDRangeKernel(kernel, 1, [], [32], [8], []);
                  cmdQueue.finish();
                  iter++;
                  output.innerHTML = "<br>" + iter;
   setTimeout("requestAnimFrame(run)", 100);
 }          
The kernel just makes C[] = A[] + B[]
Sometimes the scripts works fine, sometimes freezes after 20 - 100 iterations. It makes easily 10000-100000 iterations in simple cycle if I comment  "requestAnimFrame" operator. Why "requestAnimFrame" may be dangerous (after FF 6) ?

Are you using the requestAnimFrame from WebGLUtils? The browser function, when it exists, is requestAnimationFrame(). WebGLUtils' requestAnimFrame uses requestAnimationFrame() when it exists, otherwise it uses a timer. Timer to timer is also likely an unexpected behaviour.
I'm using (as in all WebGL scripts) the shim:
requestAnimFrame = (function(){
  return  window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame ||
    function(callback, element){ window.setTimeout(callback, 1000 / 60); }
})();

Scripts freeze without "setTimeout(...)" too. All worked fine in FF4 - 6, therefore I think it is a question to Mozila team.

Evgeny

Reply all
Reply to author
Forward
0 new messages