Класс QOpenGLTimeMonitor
Класс QOpenGLTimeMonitor оборачивает последовательность объектов запросов таймера OpenGL. Подробнее...
| Заголовок: | #include <QOpenGLTimeMonitor> |
| qmake: | QT += gui |
| С момента: | Qt 5.1 |
| Наследует: | QObject |
Открытые функции
| 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 |
- 34 открытых функции унаследованы от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 2 сигналы унаследованы от QObject
- 1 открытая переменная унаследована от QObject
- 10 статических открытых членов унаследованы от QObject
- 9 защищенных функций унаследованы от QObject
- 2 защищенных переменные унаследованы от QObject
Подробное описание
Класс QOpenGLTimeMonitor оборачивает последовательность объектов запросов таймера OpenGL.
Класс 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().
См. также waitForSamples() и isResultAvailable().
QVector<GLuint64> QOpenGLTimeMonitor::waitForSamples() const
Возвращает QVector, содержащий отметки времени графического процессора, полученные с помощью 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/archives/qt-5.11/qopengltimemonitor.html