【发布时间】:2018-09-20 08:04:22
【问题描述】:
我目前正在开发一种实时数据绘图解决方案,该解决方案能够频繁接收新数据(高达 1kHz)并以较低的速率(例如 50hz)执行重绘。我使用 FLTK 进行了第一个实现,但我想尝试一下 GTK,因为我以前从未使用过它,而且它看起来很有希望。
为了简单起见,我注意到与我使用 FLTK 测量的相比,调用 cairo_stroke() 需要很多时间(FLTK 中没有笔划,首先是 fl_line() 函数)。我尝试尽可能多地限制笔画,但使用 GTK 时渲染时间仍然延长了 5-7 倍。
在 DrawingArea 上绘制期间使用 GTK/Cairo 时,是否有人注意到此类性能问题?关于在哪里寻找减少绘图持续时间的任何线索?
注意:后端(计算要绘制的线条和文本)完全相同,因为它是在一个公共基类中执行的。
【问题讨论】:
-
也许显示你的渲染代码会有所帮助,你介意吗?你是每次重画整个事情还是使用剪辑?你在用
gtk_widget_queue_draw_area吗? -
还没写完所以还没推到Github。您已经可以找到这个repo,其中包含指向核心库和当前实现的链接。一切准备就绪后,我将在接下来的几天内添加 GTK 版本的链接。但是,是的,我每次都在重绘整个东西,因为每次重绘时一切都会发生变化(新点,新线,可能是轴的新比例)
-
重绘整个东西很昂贵,可能不需要。如果你在高速下做太多的工作,你确实会遇到性能问题。你会调用
gtk_widget_queue_draw来响应哪个信号? -
手动调用或一些计时器(首选解决方案),以 50Hz 最高频率运行。所以不,我不会为每个到达的数据重新绘制所有内容。