mirror of
https://github.com/overte-org/overte.git
synced 2025-04-14 07:27:04 +02:00
Initial texture benchmark test
This commit is contained in:
parent
539899e799
commit
8c15b8c368
2 changed files with 237 additions and 0 deletions
211
tests/ktx/src/KtxBenchmarkTests.cpp
Normal file
211
tests/ktx/src/KtxBenchmarkTests.cpp
Normal file
|
@ -0,0 +1,211 @@
|
||||||
|
//
|
||||||
|
// Created by Bradley Austin Davis on 2016/07/01
|
||||||
|
// Copyright 2014 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "KtxBenchmarkTests.h"
|
||||||
|
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
|
#include <QtTest/QtTest>
|
||||||
|
|
||||||
|
#include <ktx/KTX.h>
|
||||||
|
#include <gpu/Texture.h>
|
||||||
|
#include <image/Image.h>
|
||||||
|
#include <image/TextureProcessing.h>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QImageReader>
|
||||||
|
#include <QTextStream>
|
||||||
|
|
||||||
|
|
||||||
|
QTEST_GUILESS_MAIN(KtxBenchmarks)
|
||||||
|
|
||||||
|
QStringList png_images{
|
||||||
|
"/interface/scripts/developer/tests/cube_texture.png",
|
||||||
|
"/interface/scripts/system/assets/images/materials/GridPattern.png",
|
||||||
|
"/interface/scripts/simplifiedUI/simplifiedEmote/emojiApp/resources/images/emojis/512px/1f92c.png",
|
||||||
|
"/interface/scripts/system/assets/images/Particle-Sprite-Smoke-1.png",
|
||||||
|
"/interface/scripts/system/assets/images/grabsprite-3.png",
|
||||||
|
"/interface/scripts/system/html/img/snapshotIcon.png",
|
||||||
|
};
|
||||||
|
|
||||||
|
QStringList jpg_images{
|
||||||
|
"/interface/scripts/system/appreciate/appreciate.jpg",
|
||||||
|
"/interface/scripts/system/assets/images/textures/dirt.jpeg",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
QString test_texture = "/interface/scripts/developer/tests/cube_texture.png";
|
||||||
|
|
||||||
|
QString getRootPath() {
|
||||||
|
static std::once_flag once;
|
||||||
|
static QString result;
|
||||||
|
std::call_once(once, [&] {
|
||||||
|
QFileInfo file(__FILE__);
|
||||||
|
QDir parent = file.absolutePath();
|
||||||
|
result = QDir::cleanPath(parent.currentPath() + "/../..");
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void benchmarkImage(const QString &path) {
|
||||||
|
|
||||||
|
QImage image(path);
|
||||||
|
if ( image.isNull() ) {
|
||||||
|
qCritical() << "Failed to load " << path;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qInfo() << "Testing " << path << ", size " << image.size() << ", depth" << image.depth();
|
||||||
|
|
||||||
|
QBENCHMARK {
|
||||||
|
QImage image(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize imageSize(const QString &path) {
|
||||||
|
QImage image(path);
|
||||||
|
if ( image.isNull() ) {
|
||||||
|
qCritical() << "Failed to load " << path;
|
||||||
|
return QSize(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return image.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
gpu::TexturePointer loadTexture(const QString &path) {
|
||||||
|
QImage image(path);
|
||||||
|
std::atomic<bool> abortSignal;
|
||||||
|
if ( !image.isNull() ) {
|
||||||
|
qDebug() << "Loaded " << path << "; " << image.size();
|
||||||
|
}
|
||||||
|
return image::TextureUsage::process2DTextureColorFromImage(std::move(image), path.toStdString(), true, gpu::BackendTarget::GL45, true, abortSignal);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::initTestCase() {
|
||||||
|
QList<QByteArray> supported = QImageReader::supportedImageFormats();
|
||||||
|
|
||||||
|
QString formats;
|
||||||
|
QTextStream ts(&formats);
|
||||||
|
|
||||||
|
for(auto format : supported) {
|
||||||
|
ts << format;
|
||||||
|
ts << ", ";
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "Qt supports the following image formats: " << formats;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::cleanupTestCase() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::benchmarkPNG_data() {
|
||||||
|
QTest::addColumn<QString>("filename");
|
||||||
|
|
||||||
|
for(QString filename : png_images) {
|
||||||
|
QString full_name = getRootPath() + filename;
|
||||||
|
QSize sz = imageSize(full_name);
|
||||||
|
QString desc = QString("%1 x %2").arg(sz.width()).arg(sz.height());
|
||||||
|
|
||||||
|
QTest::newRow( desc.toUtf8() ) << full_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::benchmarkPNG() {
|
||||||
|
QFETCH(QString, filename);
|
||||||
|
|
||||||
|
QBENCHMARK {
|
||||||
|
QImage image(filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::benchmarkJPG_data() {
|
||||||
|
QTest::addColumn<QString>("filename");
|
||||||
|
|
||||||
|
for(QString filename : jpg_images) {
|
||||||
|
QString full_name = getRootPath() + filename;
|
||||||
|
QSize sz = imageSize(full_name);
|
||||||
|
QString desc = QString("%1 x %2").arg(sz.width()).arg(sz.height());
|
||||||
|
|
||||||
|
QTest::newRow( desc.toUtf8() ) << full_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::benchmarkJPG() {
|
||||||
|
QFETCH(QString, filename);
|
||||||
|
|
||||||
|
QBENCHMARK {
|
||||||
|
QImage image(filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::benchmarkCreateTexture() {
|
||||||
|
const QString TEST_IMAGE = getRootPath() + test_texture;
|
||||||
|
|
||||||
|
QBENCHMARK {
|
||||||
|
gpu::TexturePointer testTexture = loadTexture(TEST_IMAGE);
|
||||||
|
|
||||||
|
if (!testTexture) {
|
||||||
|
qWarning() << "Failed to process2DTextureColorFromImage:" << TEST_IMAGE;
|
||||||
|
QFAIL("Failed to process2DTextureColorFromImage");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::benchmarkSerializeTexture() {
|
||||||
|
const QString TEST_IMAGE = getRootPath() + test_texture;
|
||||||
|
gpu::TexturePointer testTexture = loadTexture(TEST_IMAGE);
|
||||||
|
|
||||||
|
if (!testTexture) {
|
||||||
|
qWarning() << "Failed to process2DTextureColorFromImage:" << TEST_IMAGE;
|
||||||
|
QFAIL("Failed to process2DTextureColorFromImage");
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "Test texture is " << testTexture->getWidth() << " x " << testTexture->getHeight();
|
||||||
|
|
||||||
|
QBENCHMARK {
|
||||||
|
auto ktxMemory = gpu::Texture::serialize(*testTexture, glm::ivec2(testTexture->getWidth(), testTexture->getHeight()));
|
||||||
|
QVERIFY(ktxMemory.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KtxBenchmarks::benchmarkWriteKTX() {
|
||||||
|
const QString TEST_IMAGE = getRootPath() + test_texture;
|
||||||
|
gpu::TexturePointer testTexture = loadTexture(TEST_IMAGE);
|
||||||
|
|
||||||
|
if (!testTexture) {
|
||||||
|
qWarning() << "Failed to process2DTextureColorFromImage:" << TEST_IMAGE;
|
||||||
|
QFAIL("Failed to process2DTextureColorFromImage");
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "Test texture is " << testTexture->getWidth() << " x " << testTexture->getHeight();
|
||||||
|
|
||||||
|
auto ktxMemory = gpu::Texture::serialize(*testTexture, glm::ivec2(testTexture->getWidth(), testTexture->getHeight()));
|
||||||
|
QVERIFY(ktxMemory.get());
|
||||||
|
|
||||||
|
QBENCHMARK {
|
||||||
|
// Serialize the image to a file
|
||||||
|
QTemporaryFile TEST_IMAGE_KTX;
|
||||||
|
{
|
||||||
|
const auto& ktxStorage = ktxMemory->getStorage();
|
||||||
|
QVERIFY(ktx::KTX::validate(ktxStorage));
|
||||||
|
QVERIFY(ktxMemory->isValid());
|
||||||
|
|
||||||
|
auto& outFile = TEST_IMAGE_KTX;
|
||||||
|
if (!outFile.open()) {
|
||||||
|
QFAIL("Unable to open file");
|
||||||
|
}
|
||||||
|
auto ktxSize = ktxStorage->size();
|
||||||
|
outFile.resize(ktxSize);
|
||||||
|
auto dest = outFile.map(0, ktxSize);
|
||||||
|
memcpy(dest, ktxStorage->data(), ktxSize);
|
||||||
|
outFile.unmap(dest);
|
||||||
|
outFile.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
26
tests/ktx/src/KtxBenchmarkTests.h
Normal file
26
tests/ktx/src/KtxBenchmarkTests.h
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
//
|
||||||
|
// Created by Bradley Austin Davis on 2016/07/01
|
||||||
|
// Copyright 2014 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <QtCore/QObject>
|
||||||
|
|
||||||
|
class KtxBenchmarks : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
private slots:
|
||||||
|
void initTestCase();
|
||||||
|
void cleanupTestCase();
|
||||||
|
void benchmarkPNG_data();
|
||||||
|
void benchmarkPNG();
|
||||||
|
void benchmarkJPG_data();
|
||||||
|
void benchmarkJPG();
|
||||||
|
|
||||||
|
void benchmarkCreateTexture();
|
||||||
|
void benchmarkSerializeTexture();
|
||||||
|
void benchmarkWriteKTX();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue