白板誊写延迟-触摸屏报点率
触摸誊写延迟,是触摸屏很焦点的参数。从用户在触摸屏上举行触控操作到装备作出响应之间的时间差,这个延迟高低会影响快速反应的应用场景使用如白板誊写、玩游戏。而触摸延迟主要影响因素有:触摸框报点率、软件框架延时(用于触摸数据接收、线程切换)、软件业务逻辑处理
我们这里先容下触摸框报点率 Touch Report Rate,触摸屏每秒报告触控数据的次数(Hz),会根据装备类型差别而变化
触摸操作TouchMove(StylusMove)是定时上报一次,一次会上报1-N个点。
1 private void MainWindow_OnStylusMove(object sender, StylusEventArgs e)
2 {
3 var currentPointsCount = e.GetStylusPoints(this).Count;
4 }差别屏幕定时触摸上报时间差别,我们可以通过Stylus事件网络看看
1 private void MainWindow_OnStylusDown(object sender, StylusDownEventArgs e)
2 {
3 _stylusDown = true;
4 _startTick = Environment.TickCount;
5 _stylusEntryCount++;
6 _distinctPoints.AddRange(e.GetStylusPoints(this).Distinct());
7 }
8
9 private void MainWindow_OnStylusMove(object sender, StylusEventArgs e)
10 {
11 if (!_stylusDown)
12 {
13 return;
14 }
15 _stylusEntryCount++;
16 _distinctPoints.AddRange(e.GetStylusPoints(this).Distinct());
17 }输入平均间隔:var stylusEntryTime = (Environment.TickCount - _startTick) / (double)_stylusEntryCount
Dell触摸屏
我日常用于开发联调触摸相干功能的触摸屏,戴尔触摸屏Dell-P2418HT 1080P的触摸数据:
https://img2024.cnblogs.com/blog/685541/202410/685541-20241009113827472-156855421.png
1. WPF应用StylusMove输入,拿到的间隔是33ms,即30帧
2. 一次输入包含1-7个点
3. 再算个点平均间隔16.7ms -- 这个数据也是有意义的,可以用于评估类似誊写预测1个点可以提拔的性能
使用BusHold,我们看下真实点输入间隔:
https://img2024.cnblogs.com/blog/685541/202410/685541-20241009185913768-1255973375.png
BusHold第4列数据,01是指Down/Move事件,00是指Up操作结束。我们看到Move操作输入间隔根本在16-17ms,阐明触摸框真实报点间隔17ms左右,即60帧。
上面WPF监听Stylus事件,拿到的触摸操作输入间隔是33ms。为何应用层拿到的触摸数据帧率比触摸框低呢?
我们试试StylusPlugin(StylusPlugin方案可以在WPF路由事件之前拿到触摸数据,可以用于触摸誊写加快方案)拿触摸线程的触摸数据,以及WPF路由触摸事件数据对比下:
https://img2024.cnblogs.com/blog/685541/202410/685541-20241009185945323-2061262597.png
与BusHold同样是7个点,
触摸线程事件,只不过2个点合并到一次触摸输入事件里了。所以这2个点合并操作不是路由事件内处理的,也不是WPF路由,而是在WPF 输入管理层根据硬件配置限制为30帧,淘汰了传递给应用程序的事件数量。我估计是InputManager协调输入并派发事件这块做了延迟队列。
UI路由事件,我们看上面控制台输出,移动事件间隔30ms左右报个一次输入事件,末了一个Move事件里有4个点。这里的4个点输入,合并了1+2+1上面触摸线程事件的3次输入,所以WPF路由事件管理也有触摸消息的队列,会合并触摸点
那有没有大概淘汰触摸数据的合并,与触摸框保持一致的帧率呢?答案是有的,可以在WPF开启如UWP的Point消息:
1 public partial class App : Application
2 {
3 public App()
4 {
5 AppContext.SetSwitch("Switch.System.Windows.Input.Stylus.EnablePointerSupport", true);
6 }
7 }添加EnablePointerSupport后,我们监听TouchMove事件:
https://img2024.cnblogs.com/blog/685541/202410/685541-20241010135036768-1365799356.png
触摸移动事件触发间隔就淘汰到16-17ms了,到与触摸框报点率雷同帧率,good!
开启Pointer更多内容作可以看德熙MVP的博客 WPF dotnet core 如何开启 Pointer 消息的支持 (lindexi.com),但开启Pointer也有很多坑WPF 开启Pointer消息存在的坑 (lindexi.com),各人谨慎使用
触摸大屏
再看看目前市面上交互触摸大屏所使用的富创通、华欣主流触摸框产物路由触摸数据:
https://img2024.cnblogs.com/blog/685541/202410/685541-20241009112440651-2059279557.png
输入间隔为15.6ms左右,触摸点之间平均间隔为7ms左右,即触摸框报点140帧以上,应用层触摸数据60帧。
最近有一款改良的富创通触摸G框版本,我们也由应用端网络下数据:
https://img2024.cnblogs.com/blog/685541/202410/685541-20241009113112434-1780077742.png
输入间隔没变也是15.6ms左右,触摸点之间平均间隔为4.5ms,即触摸框报点220帧左右,应用层触摸数据依然是60帧。阐明这款触摸框提拔了本身的报点率,但应用层根据硬件条件限制了60帧触摸报点。
这里触摸数据帧数限制,与屏幕革新率有关,一般屏幕革新率是60Hz.
总之,相识触摸报点率,才能真正去把誊写性能以及誊写平滑这块做好。
出处:http://www.cnblogs.com/kybs0/本文版权归作者和博客园共有,接待转载,但未经作者同意必须在文章页面给出原文连接,否则保存追究法律责任的权利。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]