[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/krita/benchmarks
From:       Lukáš Tvrdý <lukast.dev () gmail ! com>
Date:       2010-01-28 9:55:23
Message-ID: 1264672523.435637.11916.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1081390 by lukast:

Add memcpy benchmark for comparison.
Add pixel size compilation option.

 M  +60 -30    kis_datamanager_benchmark.cpp  
 M  +1 -0      kis_datamanager_benchmark.h  


--- trunk/koffice/krita/benchmarks/kis_datamanager_benchmark.cpp #1081389:1081390
@@ -22,12 +22,16 @@
 #include <qtest_kde.h>
 #include <kis_datamanager.h>
 
+// RGBA
+#define PIXEL_SIZE 4
+//#define CYCLES 100
+
 void KisDatamanagerBenchmark::initTestCase()
 {
     // To make sure all the first-time startup costs are done
-    quint8 * p = new quint8[3];
-    memset(p, 0, 3);
-    KisDataManager dm(3, p);
+    quint8 * p = new quint8[PIXEL_SIZE];
+    memset(p, 0, PIXEL_SIZE);
+    KisDataManager dm(PIXEL_SIZE, p);
 }
 
 void KisDatamanagerBenchmark::benchmarkCreation()
@@ -35,23 +39,29 @@
     // tests the cost of creating a new datamanager
 
     QBENCHMARK {
-        quint8 * p = new quint8[3];
-        memset(p, 255, 3);
-        KisDataManager dm(3, p);
+        quint8 * p = new quint8[PIXEL_SIZE];
+        memset(p, 255, PIXEL_SIZE);
+        KisDataManager dm(PIXEL_SIZE, p);
     }
 }
 
 void KisDatamanagerBenchmark::benchmarkWriteBytes()
 {
-    quint8 *p = new quint8[3];
-    memset(p, 0, 3);
-    KisDataManager dm(3, p);
+    quint8 *p = new quint8[PIXEL_SIZE];
+    memset(p, 0, PIXEL_SIZE);
+    KisDataManager dm(PIXEL_SIZE, p);
 
-    quint8 *bytes = new quint8[3 * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT];
-    memset(bytes, 128, 3 * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT);
+    quint8 *bytes = new quint8[PIXEL_SIZE * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT];
+    memset(bytes, 128, PIXEL_SIZE * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT);
 
     QBENCHMARK {
+#ifdef CYCLES
+        for (int i = 0; i < CYCLES; i++){
+            dm.writeBytes(bytes, 0, 0, TEST_IMAGE_WIDTH, TEST_IMAGE_HEIGHT);
+        }
+#elif
         dm.writeBytes(bytes, 0, 0, TEST_IMAGE_WIDTH, TEST_IMAGE_HEIGHT);
+#endif
     }
 
     delete[] bytes;
@@ -59,12 +69,12 @@
 
 void KisDatamanagerBenchmark::benchmarkReadBytes()
 {
-    quint8 *p = new quint8[3];
-    memset(p, 0, 3);
-    KisDataManager dm(3, p);
+    quint8 *p = new quint8[PIXEL_SIZE];
+    memset(p, 0, PIXEL_SIZE);
+    KisDataManager dm(PIXEL_SIZE, p);
 
-    quint8 *bytes = new quint8[3 * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT];
-    memset(bytes, 128, 3 * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT);
+    quint8 *bytes = new quint8[PIXEL_SIZE * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT];
+    memset(bytes, 128, PIXEL_SIZE * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT);
 
     QBENCHMARK {
         dm.readBytes(bytes, 0, 0, TEST_IMAGE_WIDTH, TEST_IMAGE_HEIGHT);
@@ -76,12 +86,12 @@
 
 void KisDatamanagerBenchmark::benchmarkReadWriteBytes()
 {
-    quint8 *p = new quint8[3];
-    memset(p, 0, 3);
-    KisDataManager dm(3, p);
+    quint8 *p = new quint8[PIXEL_SIZE];
+    memset(p, 0, PIXEL_SIZE);
+    KisDataManager dm(PIXEL_SIZE, p);
 
-    quint8 *bytes = new quint8[3 * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT];
-    memset(bytes, 120, 3 * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT);
+    quint8 *bytes = new quint8[PIXEL_SIZE * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT];
+    memset(bytes, 120, PIXEL_SIZE * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT);
 
     dm.writeBytes(bytes, 0, 0, TEST_IMAGE_WIDTH, TEST_IMAGE_HEIGHT);
 
@@ -94,11 +104,11 @@
 
 void KisDatamanagerBenchmark::benchmarkExtent()
 {
-    quint8 *p = new quint8[3];
-    memset(p, 0, 3);
-    KisDataManager dm(3, p);
+    quint8 *p = new quint8[PIXEL_SIZE];
+    memset(p, 0, PIXEL_SIZE);
+    KisDataManager dm(PIXEL_SIZE, p);
     quint8 *bytes = new quint8[3 * NO_TILE_EXACT_BOUNDARY_WIDTH * \
                NO_TILE_EXACT_BOUNDARY_HEIGHT];
-    memset(bytes, 0, 3 * NO_TILE_EXACT_BOUNDARY_WIDTH * \
NO_TILE_EXACT_BOUNDARY_HEIGHT); +    memset(bytes, 0, PIXEL_SIZE * \
                NO_TILE_EXACT_BOUNDARY_WIDTH * NO_TILE_EXACT_BOUNDARY_HEIGHT);
     dm.writeBytes(bytes, 0, 0, NO_TILE_EXACT_BOUNDARY_WIDTH, \
NO_TILE_EXACT_BOUNDARY_HEIGHT);  QBENCHMARK {
         QRect extent = dm.extent();
@@ -107,12 +117,12 @@
 
 void KisDatamanagerBenchmark::benchmarkClear()
 {
-    quint8 *p = new quint8[3];
-    memset(p, 128, 3);
-    KisDataManager dm(3, p);
-    quint8 *bytes = new quint8[3 * NO_TILE_EXACT_BOUNDARY_WIDTH * \
NO_TILE_EXACT_BOUNDARY_HEIGHT]; +    quint8 *p = new quint8[PIXEL_SIZE];
+    memset(p, 128, PIXEL_SIZE);
+    KisDataManager dm(PIXEL_SIZE, p);
+    quint8 *bytes = new quint8[PIXEL_SIZE * NO_TILE_EXACT_BOUNDARY_WIDTH * \
NO_TILE_EXACT_BOUNDARY_HEIGHT];  
-    memset(bytes, 0, 3 * NO_TILE_EXACT_BOUNDARY_WIDTH * \
NO_TILE_EXACT_BOUNDARY_HEIGHT); +    memset(bytes, 0, PIXEL_SIZE * \
                NO_TILE_EXACT_BOUNDARY_WIDTH * NO_TILE_EXACT_BOUNDARY_HEIGHT);
     dm.writeBytes(bytes, 0, 0, NO_TILE_EXACT_BOUNDARY_WIDTH, \
NO_TILE_EXACT_BOUNDARY_HEIGHT);  
     // 80% of the image will be cleared
@@ -125,5 +135,25 @@
 
 }
 
+
+void KisDatamanagerBenchmark::benchmarkMemCpy()
+{
+    quint64 imgSize = PIXEL_SIZE * TEST_IMAGE_WIDTH * TEST_IMAGE_HEIGHT;
+    quint8 * src = new quint8[imgSize];
+    quint8 * dst = new quint8[imgSize];
+    memset(src,128, imgSize);
+    memset(dst,0, imgSize);
+    QBENCHMARK{
+#ifdef CYCLES
+        for (int i = 0; i < 100; i++){
+            memcpy(dst, src , imgSize);
+        }
+#elif
+            memcpy(dst, src , imgSize);
+#endif
+    }
+}
+
+
 QTEST_KDEMAIN(KisDatamanagerBenchmark, GUI)
 #include "kis_datamanager_benchmark.moc"
--- trunk/koffice/krita/benchmarks/kis_datamanager_benchmark.h #1081389:1081390
@@ -34,6 +34,7 @@
     void benchmarkReadWriteBytes();
     void benchmarkExtent();
     void benchmarkClear();
+    void benchmarkMemCpy();
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic