File indexing completed on 2025-02-09 05:01:44
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Eugene Ingerman geneing at gmail dot com 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_thumbnail_benchmark.h" 0008 #include "kis_benchmark_values.h" 0009 0010 #include <simpletest.h> 0011 #include <QImage> 0012 #include "kis_iterator_ng.h" 0013 0014 #include "kis_paint_device.h" 0015 #include "KoColorSpace.h" 0016 #include "KoColorSpaceRegistry.h" 0017 #include "KoCompositeOpRegistry.h" 0018 #include "KoColor.h" 0019 0020 #include "kis_image.h" 0021 #include "kis_painter.h" 0022 #include "kis_types.h" 0023 #include "kis_sequential_iterator.h" 0024 #include "kis_transform_worker.h" 0025 0026 0027 0028 #include <cmath> 0029 0030 #define SAVE_OUTPUT 0031 0032 const int THUMBNAIL_WIDTH = 64; 0033 const int THUMBNAIL_HEIGHT = 64; 0034 const int IMAGE_WIDTH = 8000; 0035 const int IMAGE_HEIGHT = 6000; 0036 const int OVERSAMPLE = 4; 0037 0038 void KisThumbnailBenchmark::initTestCase() 0039 { 0040 m_colorSpace = KoColorSpaceRegistry::instance()->rgb8(); 0041 0042 m_dev = new KisPaintDevice(m_colorSpace); 0043 KoColor color(m_colorSpace); 0044 color.fromQColor(Qt::white); 0045 0046 m_dev->clear(); 0047 m_dev->fill(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, color.data()); 0048 0049 color.fromQColor(Qt::black); 0050 0051 KisPainter painter(m_dev); 0052 painter.setPaintColor(color); 0053 float radius = std::min(IMAGE_WIDTH, IMAGE_HEIGHT); 0054 const float angle = 2 * 3.1415926 / 360.; 0055 const float endWidth = 30; 0056 0057 for (int i = 0; i < 90; i += 5) { 0058 painter.drawThickLine(QPointF(0, 0), QPointF(radius * std::sin(angle * i), radius * std::cos(angle * i)), 1, endWidth); 0059 painter.drawThickLine(QPointF(IMAGE_WIDTH, IMAGE_HEIGHT), 0060 QPointF(IMAGE_WIDTH - radius * std::sin(angle * i), IMAGE_HEIGHT - radius * std::cos(angle * i)), 1, endWidth); 0061 } 0062 #ifdef SAVE_OUTPUT 0063 m_dev->convertToQImage(m_colorSpace->profile()).save("ThumbFullImage.png"); 0064 #endif 0065 } 0066 0067 void KisThumbnailBenchmark::cleanupTestCase() 0068 { 0069 } 0070 0071 void KisThumbnailBenchmark::benchmarkCreateThumbnail() 0072 { 0073 QImage image; 0074 0075 QBENCHMARK{ 0076 image = m_dev->createThumbnail(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, QRect() ); 0077 //m_dev->setDirty(); 0078 } 0079 0080 image.save("createThumbnail.png"); 0081 } 0082 0083 void KisThumbnailBenchmark::benchmarkCreateThumbnailCached() 0084 { 0085 QImage image; 0086 0087 QBENCHMARK{ 0088 image = m_dev->createThumbnail(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, 2. ); 0089 } 0090 } 0091 0092 0093 void KisThumbnailBenchmark::benchmarkCreateThumbnailHiQ() 0094 { 0095 QImage image; 0096 0097 QBENCHMARK{ 0098 image = m_dev->createThumbnail(OVERSAMPLE * THUMBNAIL_WIDTH, OVERSAMPLE * THUMBNAIL_HEIGHT); 0099 image = image.scaled(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, Qt::KeepAspectRatio, Qt::SmoothTransformation); 0100 m_dev->setDirty(); 0101 } 0102 0103 image.save("createThumbnailHiQ.png"); 0104 } 0105 0106 void KisThumbnailBenchmark::benchmarkCreateThumbnailHiQcreateThumbOversample2x() 0107 { 0108 QImage image; 0109 0110 QBENCHMARK{ 0111 image = m_dev->createThumbnail(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, QRect(), 2, 0112 KoColorConversionTransformation::internalRenderingIntent(), 0113 KoColorConversionTransformation::internalConversionFlags()); 0114 m_dev->setDirty(); 0115 } 0116 0117 image.save("createThumbnailHiQcreateThumbOversample2x.png"); 0118 } 0119 0120 void KisThumbnailBenchmark::benchmarkCreateThumbnailHiQcreateThumbOversample3x() 0121 { 0122 QImage image; 0123 0124 QBENCHMARK{ 0125 image = m_dev->createThumbnail(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, QRect(), 3, 0126 KoColorConversionTransformation::internalRenderingIntent(), 0127 KoColorConversionTransformation::internalConversionFlags()); 0128 m_dev->setDirty(); 0129 } 0130 0131 image.save("createThumbnailHiQcreateThumbOversample3x.png"); 0132 } 0133 0134 void KisThumbnailBenchmark::benchmarkCreateThumbnailHiQcreateThumbOversample4x() 0135 { 0136 QImage image; 0137 0138 QBENCHMARK{ 0139 image = m_dev->createThumbnail(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, QRect(), 4, 0140 KoColorConversionTransformation::internalRenderingIntent(), 0141 KoColorConversionTransformation::internalConversionFlags()); 0142 m_dev->setDirty(); 0143 } 0144 0145 image.save("createThumbnailHiQcreateThumbOversample4x.png"); 0146 } 0147 0148 0149 SIMPLE_TEST_MAIN(KisThumbnailBenchmark)