Класс QOpenGLTimeMonitor
Класс QOpenGLTimeMonitor оборачивает последовательность объектов запросов таймера OpenGL. Подробнее...
| Заголовок: | #include <QOpenGLTimeMonitor> |
| CMake: | find_package(Qt6 COMPONENTS OpenGL REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| С момента: | Qt 5.1 |
| Наследует: | QObject |
Открытые функции
| QOpenGLTimeMonitor(QObject *parent = nullptr) | |
| virtual | ~QOpenGLTimeMonitor() |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| bool | isResultAvailable() const |
| QList<GLuint> | objectIds() const |
| int | recordSample() |
| void | reset() |
| int | sampleCount() const |
| void | setSampleCount(int sampleCount) |
| QList<GLuint64> | waitForIntervals() const |
| QList<GLuint64> | waitForSamples() const |
Подробное описание
Класс QOpenGLTimeMonitor — это удобная оболочка вокруг набора объектов запросов таймера OpenGL, используемых для измерения интервалов времени на графическом процессоре с точностью, необходимой вашему приложению обработки графики.
Объекты запросов таймера OpenGL запрашиваются последовательно, чтобы записывать временные метки графического процессора в интересующих позициях вашего кода отрисовки. После того как результаты всех запросов таймера станут доступны, результаты можно извлечь, и 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().
QList<GLuint> QOpenGLTimeMonitor::objectIds() const
Возвращает QList содержащий идентификаторы объектов объектов запросов таймера OpenGL.
int QOpenGLTimeMonitor::recordSample()
Выполняет запрос таймера OpenGL в этой точке очереди команд OpenGL. Вызов этой функции в последовательности в вашей функции отрисовки приложения создаст данные о времени работы графического процессора, затрачиваемого на выполнение команд 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().
QList<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const
Возвращает QList содержащий интервалы времени, ограниченные вызовами recordSample(). Результирующий вектор будет содержать на один элемент меньше, так как это представляет собой интервалы между ними, а не фактические временные метки.
Эта функция заблокируется до тех пор, пока OpenGL не укажет, что результаты доступны. Рекомендуется проверить доступность результата перед вызовом этой функции с помощью isResultAvailable().
END_OF_DOCUMENT_MARKER ```См. также waitForSamples() и isResultAvailable().
QList<GLuint64> QOpenGLTimeMonitor::waitForSamples() const
Возвращает QList, содержащий временные метки 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-6.1/qopengltimemonitor.html