Класс QOpenGLTimeMonitor
Класс QOpenGLTimeMonitor оборачивает последовательность объектов запросов таймера OpenGL. Подробнее...
| Заголовок: | #include <QOpenGLTimeMonitor> |
| qmake: | QT += gui |
| С тех пор: | Qt 5.1 |
| Наследует: | QObject |
Этот класс был представлен в Qt 5.1.
Открытые функции
| QOpenGLTimeMonitor(QObject *parent = nullptr) | |
| virtual | ~QOpenGLTimeMonitor() |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| bool | isResultAvailable() const |
| QVector<GLuint> | objectIds() const |
| int | recordSample() |
| void | reset() |
| int | sampleCount() const |
| void | setSampleCount(int sampleCount) |
| QVector<GLuint64> | waitForIntervals() const |
| QVector<GLuint64> | waitForSamples() const |
Подробное описание
Класс QOpenGLTimeMonitor — это удобная оболочка вокруг набора объектов запросов таймера OpenGL, используемых для измерения интервалов времени на GPU с точностью, необходимой вашему приложению для отрисовки.
Объекты запросов таймера OpenGL запрашиваются последовательно для записи временных меток GPU в интересующих вас позициях в вашем коде отрисовки. После того, как результаты всех запросов таймера станут доступны, результаты можно извлечь, и QOpenGLTimerMonitor рассчитает для вас записанные интервалы времени.
Типичное использование этого класса — профилирование алгоритмов отрисовки приложения или их динамическая настройка в реальном времени для динамического балансирования производительности/качества.
Перед использованием QOpenGLTimeMonitor в вашей функции отрисовки вы должны установить необходимое количество точек выборки, которые вы хотите записать, вызвав setSamples(). Обратите внимание, что измерение N точек выборки даст N-1 интервалов времени. После того, как вы установили количество точек выборки, вызовите функцию create() с корректным текущим контекстом OpenGL для создания необходимых объектов запросов таймера. Эти шаги обычно выполняются только один раз в функции инициализации.
Используйте функцию recordSample() для ограничения блоков кода, содержащих команды OpenGL, время выполнения которых вы хотите измерить. Вы можете проверить доступность полученных выборок времени и интервалов времени с помощью isResultAvailable(). Вы можете получить рассчитанные интервалы времени и исходные отметки времени с помощью блокирующих функций waitForIntervals() и waitForSamples() соответственно.
После получения результатов и перед началом нового цикла отбора проб (например, в следующем кадре) не забудьте вызвать функцию reset(), которая очистит кэшированные результаты и сбросит индекс таймера обратно к первому объекту таймера.
См. также QOpenGLTimerQuery.
Документация по функциям-членам
QOpenGLTimeMonitor::QOpenGLTimeMonitor(QObject *parent = nullptr)
Создает экземпляр QOpenGLTimeMonitor с заданным parent. Вы должны вызвать create() с корректным контекстом OpenGL перед использованием.
См. также setSampleCount() и create().
[virtual] QOpenGLTimeMonitor::~QOpenGLTimeMonitor()
Уничтожает QOpenGLTimeMonitor и все связанные с ним ресурсы OpenGL.
bool QOpenGLTimeMonitor::create()
Инициализирует sampleCount() объектов запросов таймера OpenGL, которые будут использоваться для отслеживания времени выполнения команд OpenGL между последовательными вызовами recordSample().
Возвращает true если объекты запросов таймера OpenGL были созданы.
См. также destroy(), setSampleCount(), и recordSample().
void QOpenGLTimeMonitor::destroy()
Уничтожает любые объекты запросов таймера OpenGL, используемые в данном экземпляре.
См. также create().
bool QOpenGLTimeMonitor::isCreated() const
Возвращает true если базовые объекты запросов OpenGL были созданы. Если это возвращает true и связанный контекст OpenGL является текущим, то вы можете записывать образцы времени с помощью этого объекта.
bool QOpenGLTimeMonitor::isResultAvailable() const
Возвращает true если результаты запросов таймера OpenGL доступны.
См. также waitForSamples() и waitForIntervals().
QVector<GLuint> QOpenGLTimeMonitor::objectIds() const
Возвращает QVector, содержащий идентификаторы объектов запросов таймера OpenGL.
int QOpenGLTimeMonitor::recordSample()
Выполняет запрос таймера OpenGL в данный момент в очереди команд OpenGL. Вызов этой функции в последовательности в вашей функции отрисовки приложения соберет информацию о времени GPU, потраченном на выполнение команд OpenGL между последовательными вызовами этой функции.
См. также setSampleCount(), isResultAvailable(), waitForSamples(), и waitForIntervals().
void QOpenGLTimeMonitor::reset()
Сбрасывает монитор времени, готов к использованию в другом кадре отрисовки. Вызывайте это, когда вы получили предыдущие результаты и до того, как впервые вызвать recordSample() для следующего кадра.
См. также recordSample().
int QOpenGLTimeMonitor::sampleCount() const
Возвращает количество точек выборки, запрошенных с помощью setSampleCount(). Если create был успешно вызван после setSampleCount(), то возвращаемое значение будет фактическим количеством точек выборки, которые могут быть использованы.
Значение по умолчанию для sample count равно 2, что приводит к измерению одного интервала.
См. также setSampleCount().
void QOpenGLTimeMonitor::setSampleCount(int sampleCount)
Устанавливает количество точек выборки в sampleCount. После установки количества выборок с помощью этой функции, вы должны вызвать create() для инициализации базовых объектов запросов таймера OpenGL.
Новое sampleCount должно быть не менее 2.
См. также sampleCount(), create(), и recordSample().
QVector<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const
Возвращает QVector, содержащий интервалы времени, ограниченные вызовами recordSample(). Результирующий вектор будет содержать на один элемент меньше, так как это представляет интервалы между, а не сами отметки времени.
Эта функция будет блокироваться до тех пор, пока OpenGL не укажет, что результаты доступны. Рекомендуется проверять доступность результата перед вызовом этой функции с помощью isResultAvailable().
END_OF_DOCUMENT_MARKERСм. также waitForSamples() и isResultAvailable().
QVector<GLuint64> QOpenGLTimeMonitor::waitForSamples() const
Возвращает QVector, содержащий отметки времени GPU, полученные с помощью recordSample().
Эта функция будет блокироваться до тех пор, пока OpenGL не укажет, что результаты доступны. Рекомендуется проверить доступность результата до вызова этой функции с помощью isResultAvailable().
Примечание: Эта функция работает только на системах с OpenGL >=3.3 или расширением ARB_timer_query. Подробнее см. QOpenGLTimerQuery.
См. также waitForIntervals() и isResultAvailable().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qopengltimemonitor.html