qskinny/examples/gbenchmark/Benchmark.cpp

174 lines
4.3 KiB
C++
Raw Normal View History

2017-07-21 18:21:34 +02:00
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the 3-clause BSD License
*****************************************************************************/
#include "Benchmark.h"
#include <QskGraphic.h>
#include <QskGraphicIO.h>
#include <QskGraphicTextureFactory.h>
#include <QDebug>
2018-08-03 08:15:28 +02:00
#include <QDir>
2017-07-21 18:21:34 +02:00
#include <QElapsedTimer>
2018-07-19 14:10:48 +02:00
#include <QPainter>
2018-08-03 08:15:28 +02:00
#include <QQuickWindow>
#include <QStringList>
#include <QSvgRenderer>
2017-07-21 18:21:34 +02:00
bool Benchmark::run( const QString& dirName )
{
QDir svgDir( dirName );
QStringList svgFiles = svgDir.entryList( QStringList() << "*.svg", QDir::Files );
if ( svgFiles.isEmpty() )
return false;
const char qvgPath[] = "/tmp/benchmark/qvg";
if ( !svgDir.mkpath( qvgPath ) )
return false;
QStringList qvgFiles = svgFiles;
for ( int i = 0; i < qvgFiles.size(); i++ )
{
2018-08-03 08:15:28 +02:00
svgFiles[ i ].prepend( "/" );
svgFiles[ i ].prepend( dirName );
2017-07-21 18:21:34 +02:00
2018-08-03 08:15:28 +02:00
qvgFiles[ i ].replace( ".svg", ".qvg" );
qvgFiles[ i ].prepend( "/" );
qvgFiles[ i ].prepend( qvgPath );
2017-07-21 18:21:34 +02:00
}
QVector< QskGraphic > graphics( qvgFiles.size() );
QVector< QSvgRenderer* > renderers( svgFiles.size() );
2018-08-03 08:15:28 +02:00
qint64 msElapsed[ 6 ];
2017-07-21 18:21:34 +02:00
QElapsedTimer timer;
{
// compile step
timer.start();
for ( int i = 0; i < svgFiles.size(); i++ )
{
2018-08-03 08:15:28 +02:00
renderers[ i ] = new QSvgRenderer();
if ( !renderers[ i ]->load( svgFiles[ i ] ) )
2017-07-21 18:21:34 +02:00
{
2018-08-03 08:15:28 +02:00
qCritical() << "Can't load" << svgFiles[ i ];
2017-07-21 18:21:34 +02:00
return false;
}
}
2018-08-03 08:15:28 +02:00
msElapsed[ 0 ] = timer.elapsed();
2017-07-21 18:21:34 +02:00
}
{
// converting into graphics and storing to disk
timer.start();
for ( int i = 0; i < renderers.size(); i++ )
{
2018-08-03 08:15:28 +02:00
QPainter painter( &graphics[ i ] );
renderers[ i ]->render( &painter );
2017-07-21 18:21:34 +02:00
painter.end();
}
2018-08-03 08:15:28 +02:00
msElapsed[ 1 ] = timer.elapsed();
2017-07-21 18:21:34 +02:00
}
{
// writing them to disk
timer.start();
for ( int i = 0; i < graphics.size(); i++ )
{
2018-08-03 08:15:28 +02:00
QskGraphicIO::write( graphics[ i ], qvgFiles[ i ] );
2017-07-21 18:21:34 +02:00
}
2018-08-03 08:15:28 +02:00
msElapsed[ 2 ] = timer.elapsed();
2017-07-21 18:21:34 +02:00
}
{
// loading qvg files to memory
timer.start();
for ( int i = 0; i < qvgFiles.size(); i++ )
{
2018-08-03 08:15:28 +02:00
graphics[ i ] = QskGraphicIO::read( qvgFiles[ i ] );
if ( graphics[ i ].isNull() )
2017-07-21 18:21:34 +02:00
{
2018-08-03 08:15:28 +02:00
qCritical() << "Can't load" << qvgFiles[ i ];
2017-07-21 18:21:34 +02:00
return false;
}
}
2018-08-03 08:15:28 +02:00
msElapsed[ 3 ] = timer.elapsed();
2017-07-21 18:21:34 +02:00
}
{
// creating textures using OpenGL
timer.start();
const QRect targetRect( 0, 0, 200, 200 );
const QskColorFilter colorFilter;
for ( int i = 0; i < qvgFiles.size(); i++ )
{
2017-12-07 14:58:46 +01:00
const auto textureId = QskGraphicTextureFactory::createTexture(
2017-07-21 18:21:34 +02:00
QskGraphicTextureFactory::OpenGL, targetRect, Qt::KeepAspectRatio,
2018-08-03 08:15:28 +02:00
graphics[ i ], colorFilter );
2017-07-21 18:21:34 +02:00
if ( textureId == 0 )
{
2018-08-03 08:15:28 +02:00
qCritical() << "Can't render texture for" << qvgFiles[ i ];
2017-07-21 18:21:34 +02:00
return false;
}
}
2018-08-03 08:15:28 +02:00
msElapsed[ 4 ] = timer.elapsed();
2017-07-21 18:21:34 +02:00
}
{
// creating textures using Raster
timer.start();
const QRect targetRect( 0, 0, 100, 100 );
const QskColorFilter colorFilter;
for ( int i = 0; i < qvgFiles.size(); i++ )
{
2017-12-07 14:58:46 +01:00
const auto textureId = QskGraphicTextureFactory::createTexture(
2017-07-21 18:21:34 +02:00
QskGraphicTextureFactory::Raster, targetRect, Qt::KeepAspectRatio,
2018-08-03 08:15:28 +02:00
graphics[ i ], colorFilter );
2017-07-21 18:21:34 +02:00
if ( textureId == 0 )
{
2018-08-03 08:15:28 +02:00
qCritical() << "Can't render texture for" << qvgFiles[ i ];
2017-07-21 18:21:34 +02:00
return false;
}
}
2018-08-03 08:15:28 +02:00
msElapsed[ 5 ] = timer.elapsed();
2017-07-21 18:21:34 +02:00
}
qDebug() << "#Icons:" << svgFiles.count() <<
2018-08-03 08:15:28 +02:00
"Compiled:" << msElapsed[ 0 ] <<
"Converted:" << msElapsed[ 1 ] <<
"Stored:" << msElapsed[ 2 ] <<
"Loaded:" << msElapsed[ 3 ] <<
"Rendered OpenGL:" << msElapsed[ 4 ] <<
"Rendered Raster:" << msElapsed[ 5 ];
2017-07-21 18:21:34 +02:00
svgDir.rmdir( qvgPath );
return true;
}