qgis2img is a new tool that I created, in a bit of friendly competition with the boss, which I lost but we will not speak of that again, for benchmarking QGIS layer rendering. The goal is simple. Take a project file(s), or QLR file(s), render the output, time the results, and dump a summary. Simples. The tool does 3 passes by default to get the average but can do more. It’s nothing fancy. Written in Python so it can be evolved quickly.
qgis2img will render each image by itself to give single timings then it will render the whole project as you see in QGIS.
It uses QGIS 2.4 (qgis-dev) in order to use the new rendering methods. I don’t have any plans to port it to work with QGIS 2.2, however feel free to send a pull request.
The usage is pretty simple:
usage: qgis2img [-h] [--size SIZE] [--passes PASSES] [--types TYPES] file Benchmark QGIS project file and layer loading times positional arguments: file Project file to load into QGIS optional arguments: -h, --help show this help message and exit --size SIZE Image output size --passes PASSES Number of render passes per layer --types TYPES What to render. Options are layer|project, layer, or project. layer|project will render all layers as the if the project is open in QGIS.
with the results:
$ python.exe qgis2img parcels.qgs --passes 5 Project Loaded with: [u'PARCEL_region - Shp', u'PARCEL_region - Spatialite'] Rendering images with 5 passes Layer: PARCEL_region - Shp 4.907 sec Layer: PARCEL_region - Spatialite 3.66 sec Layer: Project 5.3378 sec
It will generate an image for each layer and the project:
You can find the project at https://github.com/DMS-Aus/qgis2img
Pull requests and ideas welcome
There is a tool called qgisbench in the QGIS source tree that does this kind of thing too, however:
- It’s in C++
- We don’t ship it
- It’s in C++
- <3 Python
- These things are good examples for others
- Using the Python API in this ways lets me see gaps