如何知道WebGL何时完成绘制?

问题描述 投票:1回答:1

我想测量Web应用程序中的往返时间,以查看发送,应答和解释请求所花费的时间。我向数据库服务器发送请求,它向我发送了一些数据,我想使用WebGL可视化该数据。 WebGL部分仅包括设置纹理并将其绘制到四边形上。

我希望我的测量在发送请求后开始,并在渲染完成后立即停止。现在,我的方法(也许是幼稚的)是这样的:

ws.send(JSON.stringify(request));
start = performance.now();

ws.onmessage = (d) => {
   ...
   render(d); // here goes some typical plain WebGL code for preparing and plotting a 2D texture on a quad
   end = performance.now();
}
roundtrip = end - start;

但是我不确定这是否是准确的度量,并且end是否真正指的是最终绘制的画布。 是否有任何方法可以获取渲染框架时的确切时间?目前,我没有典型的渲染循环,而是在触发新请求时仅使用新框架更新视图。我知道gl.finish(),但是这个doesn't seem to be an adequate solution。我也从WebGL2 API听说过WebGLSync,但首先我正在使用WebGL1,其次我觉得这不是一个那么复杂的问题...

javascript performance webgl latency
1个回答
0
投票

您所说的“渲染”是什么意思?您的意思是“对用户可见”还是“后置像素中放置了像素”或其他?

对于“对用户可见”,除了在另一台机器上设置摄像头以查看屏幕外,还有其他方法。基于WebGL和用户之间的所有情况,可能会有几帧延迟。浏览器合成的东西,无论是单缓冲,双缓冲还是三缓冲。操作系统以及如何组合窗口,监视器或电视的图像处理,无论用户使用的是HDMI,DisplayPort,VGA,DisplayLink,Airplay,Chromecast,还是Windows []

对于使用the other answer you linked to saysgl.finish之类的“放置在后缓冲区中的像素”或gl.readPixels之类的类似内容,不会告诉您花费了多长时间。相反,我将告诉您某件事花费了多长时间+停止了图形管线花费了多长时间,并且没有简单的方法可以减去最后一部分。另一方面,您也许可以使用它来判断一种做事方式是否比另一种做事方式快。

© www.soinside.com 2019 - 2024. All rights reserved.