Натоварването на процесора се увеличава силно при извикване на update() SLOT на няколко QQuickWindows

Открих, че моето приложение консумира все повече и повече мощност на процесора във времето, когато правя извикващ update() SLOT на няколко QQuickWindows.

Ето една проста тестова програма:

    import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Window 2.2

ApplicationWindow {visible: true; width: 640; height: 480;
    Window{  height: 100;  width: 100; visible: true; objectName: "w1"; id:w1; }
    Window{  height: 100;  width: 100; visible: true; objectName: "w2"; id:w2; }
    Window{  height: 100;  width: 100; visible: true; objectName: "w3"; id:w3; }

    Timer {
        interval: 30
        repeat: true
        running: true

        onTriggered: {
            w1.update();
            w2.update();
            w3.update();
        } 
    }
}

Ако презаредя напълно QQuickWindows с Loader, всичко се нулира и натоварването на процесора започва да се увеличава от самото начало.

Този проблем е тестван със следните две системи:

  • Ubuntu 12.04 + Qt5.4.2 + intel_video + видеодрайвер с отворен код

  • Ubuntu14.04 + Qt5.3.2 + radeon_video + видеодрайвер с отворен код

Имам нужда от бързо решение за това!!! Вече се опитах периодично да извиквам releaseResources() метод и resetOpenGLState() метод на QQuickWindow.

СЪЩО много интересно е, че когато прилагам putenv("LIBGL_ALWAYS_SOFTWARE=1") в моя main.cpp, този проблем изчезва и имам ПОСТОЯННО ниско използване на процесора. Но в моето реално приложение имам нужда от хардуерно изобразяване, така че това не е опция за мен.

Може ли някой да тества този проблем или да ми даде съвет?


person Dima K    schedule 27.06.2015    source източник
comment
Опитайте да създадете екземпляр на двете изображения в отделни елементи на изображението и контролирайте тяхната видимост с visible: sw   -  person Frank Osterfeld    schedule 27.06.2015
comment
Просто сменям две изображения, защото това е само тестова програма. В действителната ми програма получавах изображения от камерата. И прекарвам един ден само за да разбера, че този проблем с процесора не е свързан с камерата, а с рисуване на изображение (или може би дори само с преначертаване на съдържанието на прозорец). Беше много неочаквано за мен.   -  person Dima K    schedule 27.06.2015
comment
СЪЩО много интересно е, че когато прилагам putenv(LIBGL_ALWAYS_SOFTWARE=1); в main.cpp този проблем изчезва и имам ПОСТОЯННО ниско използване на процесора. Но в моето реално приложение имам нужда от хардуерно изобразяване, така че не е опция за мен.   -  person Dima K    schedule 27.06.2015


Отговори (1)


Тествах вашия код на моя Ubuntu 14.04 + Qt5.4 + amd proprietary drives без увеличение на натоварването на процесора (остана постоянно). С презареждане на изображението на всеки 30 милисекунди дава кадрова честота от 33,3 fps. Предполагам, че използвате устройство с отворен код, което не е толкова добро при изобразяване. Опитайте да използвате собствено устройство на amd на нашата машина amd.

person Vedanshu    schedule 27.06.2015
comment
Да, това работи за мен. Простата програма работи с постоянно използване на процесора! Благодаря ти! Но основното ми приложение отказа да работи с този драйвер. Той се оплаква от липсата на swrast_dri.so и дава грешки при опит за изчертаване на шейдъри. Опитвам се да го поправя сега. - person Dima K; 27.06.2015
comment
@DimaK защото си оставил LIBGL_ALWAYS_SOFTWARE включено? - person cmannett85; 28.06.2015
comment
не. Това беше, защото основната ми програма се опита да използва драйвери с отворен код. Редактирах .pro файла и той започна да работи добре. Но моите целеви компютри са с видеоадаптер radeon x300 и собственият драйвер вече не го поддържа. Старият драйвер отказва да се инсталира на ubuntu 12.04. Така че се опитвам да намеря друго решение. Вече се опитах да инсталирам свежа (10.5.8) библиотека mesa, но проблемът все още остана... не знам какво друго да опитам. - person Dima K; 28.06.2015