经过一段时间的DirectFB学习之后,终于在nuc972平台上将qt+dfb+2d硬件加速跑通了,这边先做了一个简单的性能对比测试,测试单纯跑qt和跑qt+dfb+2d的效果对比试验。
测试内容为让一个窗口绕着屏幕跑圈圈,qt代码如下:
/* tdialog.h */
#ifndef TDIALOG_H_
#define TDIALOG_H_
#include <QtGui>
#include <QDialog>
static QDialog* m_Dialog;
class TDialog : public QDialog
{
Q_OBJECT
public:
TDialog();
virtual ~TDialog();
protected:
void timerEvent(QTimerEvent *event);
private:
int m_nTimerId;
};
#endif
/* main.cpp */
#include <QtGui>
#include <QDialog>
#include "tdialog.h"
static TDialog* m_TDialog;
TDialog::TDialog()
{
m_nTimerId = startTimer(0);
}
TDialog::~TDialog()
{
if(0 != m_nTimerId)
{
killTimer(m_nTimerId);
}
}
void TDialog::timerEvent(QTimerEvent *event)
{
static int x = 0, y = 0;
if(x < 600 && y == 0)
{
x += 10;
}
else if(x == 600 && y < 300)
{
y += 10;
}
else if(x > 0 && y == 300)
{
x -= 10;
}
else if(x == 0 && y > 0)
{
y -= 10;
}
this->move(x, y);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
m_TDialog = new TDialog();
m_TDialog->resize(200, 120);
m_TDialog->move(0, 0);
m_TDialog->show();
return app.exec();
}
我们先来看单独跑qt的效果,如下视频:
(尝试在这里添加视频,但是未成功,请移步优酷观看)
看完单独跑qt的效果我们再来看下跑qt+dfb+2d的测试效果,如下:
(尝试在这里添加视频,但是未成功,请移步优酷观看)
可以看出首先视觉上启用了2D硬件加速后窗口跑的更快了,然后在从CPU的使用情况来看,跑qt+dfb+2d时CPU使用率在60%左右,而单独跑qt的CPU使用率已接近100%,可以看出使用了2D硬件加速后性能提升明显。本次测试主要影响性能的就是矩形填充和块传输了,在没有硬件支持的情况下CPU需要通过memset和memcpy函数来实现这两点所以是非常影响性能的,特别是memcpy函数。
我这边适配的dfb硬件加速驱动也只适配了画线、矩形填充,Bitblt块传输,还有alpha混合等更强大的功能暂未做适配,后续将把它更完善后整理出来分享给大家使用。