[Solved] Scrolling Text eating lot of CPU on beagleBone



  • I am using QTextEdit to show Scrolling text by setting
    ui->textEdit->setvalue(count);
    count ++;

    When I am running on my i5 PC it is running smoothely but When I run it on Beaglebone, There are two scenerios:
    1.With Eglfs platform plugin, It is scrolling very slowly and jerky but less CPU consumption.
    2.With linuxFb plugin, It is scrolling almost like PC but CPU goes over 100 %.

    What Should I Do to solve the problem?


  • Moderators

    Do you need rich text? Consider using QPlainTextEdit otherwise.

    QTextEdit does not have setValue() method. Are you sure you are using it?

    You can try using scrollContentsBy() instead. It is protected, though, so you would have to expose the method in a custom subclass.



  • I don't need rich text. I implemented in this way:
    QScrollBar sb;
    sb = ui->message->verticalScrollBar();
    sb.setValue(count);


  • Moderators

    verticalScrollBar() returns a pointer so what you posted will not compile. It may be just that certain platform pluggins work sluggishly here. I would still recommend trying with QPlainTextEdit and scrollContentsBy() (or even QWidget::move() could work). If you compare how these various techniques work, you can pinpoint the fastest one and use it.



  • I used pointer like
    QScrollBar *sb;
    sb = ui->message->verticalScrollBar();
    sb->setValue(count);

    But I want to know why it is very slow on Beaglebone device.
    Please suggest me If I use ScrollContentsBy() then Is there any performance gains.
    Can I use hardware acceleration for Text rendering?


  • Moderators

    Please suggest me If I use ScrollContentsBy() then Is there any performance gains.

    I don't know. I've given you options to try out, they may help you or may turn out to be rubbish. I don't have time to check them out myself for you, sorry.

    You can also try other things which could impact performance: set the text edit to read-only mode, for example (at least for the duration of scrolling).

    You can also ask on Qt Interest mailing list - a lot of Qt deveopers (that is, people developing Qt itself) are active there, they could have some more accurate hints for you (possibly related to platform support, too).

    Can I use hardware acceleration for Text rendering?

    As far as I know, no, widgets are painted by Qt raster engine (which on most platforms seems faster than OpenGL).


  • Lifetime Qt Champion

    Hi,

    What kind of text are you showing ?



  • Hi SGaist,
    I am using simple text in english with a .ttf font which I am using from resource file. There is one suggestion I received from my Qt friend that If I create QImage from text using QPainter and then scroll the QImage, Then it will solve my Problem.Any suggestions from ur side Please.



  •   QFont font1;
        font1.setBold(true);
        font1.setFamily("Sans Serif");
        font1.setPointSize(100);
        QImage image(1024,768, QImage::Format_ARGB32_Premultiplied);
        QPainter painter(&image);
        painter.fillRect(image.rect(), Qt::yellow);
        painter.setFont(font1);
        painter.drawText(image.rect(), Qt::AlignCenter | Qt::AlignVCenter, "hello, world");
        scene = new QGraphicsScene(this);
        scene->addPixmap(QPixmap::fromImage(image));
        scene->setSceneRect(image.rect());
        ui->mainImage->setScene(scene);
    

    Now I am experimenting with QGraphicsScene but when I scroll frequently with mouse in QScrollArea, then Cpu reaches 100 %.


  • Lifetime Qt Champion

    So a fixed text. How big is it ?



  • I am receiving text from Uart. SO it can be of very long length.
    That is why there is need of scrolling because text size is very large (point size 200)
    Actually It is passenger information display showing train information to passengers on LCD.


  • Lifetime Qt Champion

    Looks like you should rather consider a QListView using a QStringListModel.

    Also, how big is the history that you want to keep available to your passengers ?



  • Thanks for suggestions, But I think problem is graphics performance on Beaglebone black.
    I think application not using hardware acceleration for rendering of scrolling text because text is refreshed at 100 times per second because I scrolling text by incrementing :
    QTimer timer;
    timer.setInterval(5);
    timer-> connected with Slot()
    Slot()
    {
    static int count = 0;
    scrollbar->setValue(count);
    count ++;
    }

    Basically When I using other Qt Demo apps like colliding mice CPU usage increases to 100%.
    BeagleBone black SGX GPU for graphics. Is there anything to do or How can I check whether GPU is used or not By Qt application.
    Thanks


  • Moderators

    @guru007 said in Scrolling Text eating lot of CPU on beagleBone:

    text is refreshed at 100 times per second

    this does not make sense as your display most probably cannot refresh so often (usually it is 60Hz). Actually it would be enough to refresh at 25Hz - this is what a human perceives as smooth.



  • @jsulm
    But with even 30 fps it consuming whole processing Power.


  • Moderators

    @guru007 Sorry, something went wrong here and I edited your last post. That wasn't intentionally.

    You wrote before that the text can be very long. You should test with not so long text (but still long enough to need a scroll bar). Does it then still consume 100% CPU?
    Qt widgets do not use hardware acceleration as far as I know (but QML does). Alternative would be to use http://doc.qt.io/qt-5/graphicsview.html


  • Lifetime Qt Champion

    @jsulm Everything is back on track. I still had the email from the thread :)


  • Moderators

    @SGaist Thanks!



  • @jsulm How can I check If my application uses GPU for rendering. I read from stackoverflow:

    Qt doesn't magically GPU-accelerate the entire application. Widgets are not accelerated unless they derive from QOpenGLWidget. Qt Quick 2 is accelerated by default; there's an option of using the software renderer on hardware that doesn't support OpenGL ES 2. Qt Quick 1 is accelerated if you set a QOpenGLWidget as a viewport on the QGraphicsView.

    Could you suggest some already built app to test gpu? Some Demo app


  • Moderators

    @guru007 If you use widgets there is nothing to check as those do not use GPU.



  • @jsulm So which Qt Demo example I can use to test Gpu acceleration?

    thanks


  • Moderators

    @guru007 Again: you're currently using widgets! Widgets do not use GPU - what do you want to check?
    If you're planning to switch to QML, then take one of QML/QtQuick examples.



  • @jsulm Now I am also talking about Qml. I think colliding mice is right example to test.
    Am I right dear?


  • Moderators

    @guru007 Should be fine



  • problem is solved by using QgrpahicsView with Qimage.
    I draw text on QImage And Display it in QGraphicScene.
    Cpu usage decreased to 45 % .
    Thanks for ur replies.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.