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

List:       kde-commits
Subject:    koffice/krita [POSSIBLY UNSAFE]
From:       Bart Coppens <kde () bartcoppens ! be>
Date:       2008-01-29 21:06:41
Message-ID: 1201640801.123527.6937.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 768355 by coppens:

*Lightning Flash* *KABOOM!*

Bet you didn't see this one coming, eh? ;-)

This commit adds an experimental new tile backend, which features actual shared tiles \
and so. It's also supposed to be more robust for threading. Emphasis on the \
'supposed'.

It's still very experimental, a lot of things probably are just plain wrong and bad \
code, and it might crash your Krita. It seems almost all regression tests pass \
(including some new ones written specifically for it), but sometimes there is a \
random SIGSEGV, I haven't figured out yet what's causing those (but you can be \
absolutely sure that the amount of crashes is significantly lower than while I was \
coding this all). It also doesn't do a lot of things yet, like clean up its tempfiles \
at exit and all that dull stuff about deleting unused data and so ;-)

Cyrille will be (not very) pleased to find out it is also significantly slower, at \
least when just timing the make tests. I'm suspecting either bad coding (possibly \
memory leakage, or just badly written), or too much time being spent in locking.

This codepath is disabled by default (Duh!). To try it out, edit the \
krita/image/CMakeLists.txt, and comment out the 'set(USE_OLD_TILESYSTEM 1)'.

Have fun with it! (Or not... :P)

CCMAIL:kimageshop@kde.org




 M  +22 -0     image/CMakeLists.txt  
 A             image/config-tiles.h.cmake  
 M  +9 -0      image/kis_datamanager.h  
 M  +6 -1      image/kis_iterator.cc  
 M  +2 -0      image/kis_paint_device.cc  
 M  +12 -8     image/kis_random_accessor.h  
 M  +4 -0      image/tiles/kis_tilediterator.cc  
 A             image/tiles_new (directory)  
 A             image/tiles_new/CMakeLists.txt  
 A             image/tiles_new/kis_memento.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_memento.h   [License: GPL (v2+)]
 A             image/tiles_new/kis_tile.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_tile.h   [License: GPL (v2+)]
 A             image/tiles_new/kis_tile_compressor.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_tile_compressor.h   [License: GPL (v2+)]
 A             image/tiles_new/kis_tile_global.h   [License: GPL (v2+)]
 A             image/tiles_new/kis_tiled_random_accessor.cc   [License: UNKNOWN]
 A             image/tiles_new/kis_tiled_random_accessor.h   [License: UNKNOWN]
 A             image/tiles_new/kis_tileddatamanager.cc   [POSSIBLY UNSAFE: scanf] \
[License: GPL (v2+)]  A             image/tiles_new/kis_tileddatamanager.h   \
[License: GPL (v2+)]  A             image/tiles_new/kis_tiledhlineiterator.cc   \
[License: GPL (v2+)]  A             image/tiles_new/kis_tilediterator.cc   [License: \
GPL (v2+)]  A             image/tiles_new/kis_tilediterator.h   [License: GPL (v2+)]
 A             image/tiles_new/kis_tiledrectiterator.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_tiledvlineiterator.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_tilestore.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_tilestore.h   [License: GPL (v2+)]
 A             image/tiles_new/kis_tilestorememory.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_tilestorememory.h   [License: GPL (v2+)]
 A             image/tiles_new/kis_tileswapper.cc   [License: GPL (v2+)]
 A             image/tiles_new/kis_tileswapper.h   [License: GPL (v2+)]
 A             image/tiles_new/tests (directory)  
 A             image/tiles_new/tests/CMakeLists.txt  
 A             image/tiles_new/tests/kis_tile_sharing_tester.cpp   [License: GPL \
(v2+)]  A             image/tiles_new/tests/kis_tile_sharing_tester.h   [License: GPL \
(v2+)]  A             image/tiles_new/tests/kis_tiled_data_tester.cpp   [License: GPL \
(v2+)]  A             image/tiles_new/tests/kis_tiled_data_tester.h   [License: GPL \
(v2+)]  A             image/tiles_new/tests/kis_tiles_regression_tester.cpp   \
[License: GPL (v2+)]  A             \
image/tiles_new/tests/kis_tiles_regression_tester.h   [License: GPL (v2+)]  A         \
image/tiles_new/tests/kis_tileswapper_tester.cpp   [License: GPL (v2+)]  A            \
image/tiles_new/tests/kis_tileswapper_tester.h   [License: GPL (v2+)]  M  +1 -1      \
ui/kis_dlg_preferences.cc  


--- trunk/koffice/krita/image/CMakeLists.txt #768354:768355
@@ -5,6 +5,11 @@
 
 add_definitions(${KDE4_ENABLE_EXCEPTIONS})
 
+# Chose a tiles backend (comment out the next line to enable the new system):
+set(USE_OLD_TILESYSTEM 1)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-tiles.h.cmake \
${CMAKE_CURRENT_BINARY_DIR}/../config-tiles.h) ### WRONG PLACE??? +
+if(USE_OLD_TILESYSTEM)
 set(libkritatile_SRCS
 	${CMAKE_SOURCE_DIR}/krita/image/tiles/kis_tiled_random_accessor.cc
 	${CMAKE_SOURCE_DIR}/krita/image/tiles/kis_tiledvlineiterator.cc
@@ -17,6 +22,23 @@
 	${CMAKE_SOURCE_DIR}/krita/image/tiles/kis_tilemanager.cc
 	${CMAKE_SOURCE_DIR}/krita/image/tiles/kis_tile_compressor.cc
 )
+else(USE_OLD_TILESYSTEM)
+set(libkritatile_SRCS
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tiled_random_accessor.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tiledvlineiterator.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tiledhlineiterator.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tileddatamanager.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tile.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tilediterator.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tiledrectiterator.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_memento.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tile_compressor.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tilestore.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tilestorememory.cc
+	${CMAKE_SOURCE_DIR}/krita/image/tiles_new/kis_tileswapper.cc
+)
+add_subdirectory( tiles_new )
+endif(USE_OLD_TILESYSTEM)
 
 include_directories( ${KDE4_INCLUDE_DIR}/threadweaver/
                      ${CMAKE_SOURCE_DIR}/krita/image/metadata
--- trunk/koffice/krita/image/kis_datamanager.h #768354:768355
@@ -26,7 +26,16 @@
 
 
 // Change the following two lines to switch (at compiletime) to another datamanager
+//#define USE_OLD_TILESYSTEM
+#include "config-tiles.h" // For the next define
+
+
+#ifdef USE_OLD_TILESYSTEM
 #include "tiles/kis_tileddatamanager.h"
+#else
+#include "tiles_new/kis_tileddatamanager.h"
+#endif
+
 #define ACTUAL_DATAMGR KisTiledDataManager
 
 /**
--- trunk/koffice/krita/image/kis_iterator.cc #768354:768355
@@ -23,7 +23,12 @@
 
 #include "kis_iterator.h"
 #include "kis_datamanager.h"
-#include "kis_tilediterator.h"
+#include "config-tiles.h" // For the next define
+#ifdef USE_OLD_TILESYSTEM
+#include "tiles/kis_tilediterator.h"
+#else
+#include "tiles_new/kis_tilediterator.h"
+#endif
 
 KisRectConstIterator::KisRectConstIterator ( KisDataManager *dm, qint32  x, qint32  \
y, qint32  w, qint32  h)  {
--- trunk/koffice/krita/image/kis_paint_device.cc #768354:768355
@@ -112,6 +112,8 @@
 
     m_d->colorSpace = colorSpace->clone();
 
+    Q_ASSERT(m_d->colorSpace);
+
     m_d->pixelSize = m_d->colorSpace->pixelSize();
     m_d->nChannels = m_d->colorSpace->channelCount();
 
--- trunk/koffice/krita/image/kis_random_accessor.h #768354:768355
@@ -24,12 +24,16 @@
 #include <kis_shared_ptr.h>
 #include <krita_export.h>
 #include <kis_global.h>
-#include "kis_tiled_random_accessor.h"
 
+#include "config-tiles.h" // For the next define
+#ifdef USE_OLD_TILESYSTEM
+#include "tiles/kis_tiled_random_accessor.h"
+#else
+#include "tiles_new/kis_tiled_random_accessor.h"
+#endif
+
 typedef KisSharedPtr<KisTiledRandomAccessor> KisTiledRandomAccessorSP;
 
-class KisTiledDataManager;
-
 /**
  * Gives a random access to the pixels of an image. Use the moveTo
  * function to select the pixel. And then rawData to access the value
@@ -40,11 +44,11 @@
 
     friend class KisRandomAccessor;
 
-    KisRandomConstAccessor(KisTiledDataManager *ktm, qint32 x, qint32 y, qint32 \
offsetx, qint32 offsety, bool writable); +    KisRandomConstAccessor(KisDataManager \
*ktm, qint32 x, qint32 y, qint32 offsetx, qint32 offsety, bool writable);  
 public:
 
-    KisRandomConstAccessor(KisTiledDataManager *ktm, qint32 x, qint32 y, qint32 \
offsetx, qint32 offsety); +    KisRandomConstAccessor(KisDataManager *ktm, qint32 x, \
qint32 y, qint32 offsetx, qint32 offsety);  
     KisRandomConstAccessor(const KisRandomConstAccessor& rhs);
 
@@ -77,7 +81,7 @@
 
 public:
 
-    KisRandomAccessor(KisTiledDataManager *ktm, qint32 x, qint32 y, qint32 offsetx, \
qint32 offsety) +    KisRandomAccessor(KisDataManager *ktm, qint32 x, qint32 y, \
qint32 offsetx, qint32 offsety)  : KisRandomConstAccessor(ktm,x,y,offsetx, offsety, \
true)  {
         }
@@ -163,8 +167,8 @@
 
 public:
 
-    KisRandomAccessorPixelBase(KisTiledDataManager *ktm,
-                               KisTiledDataManager *ktmSelect,
+    KisRandomAccessorPixelBase(KisDataManager *ktm,
+                               KisDataManager *ktmSelect,
                                qint32 x, qint32 y, qint32 offsetx, qint32 offsety)
         : T( ktm, x, y, offsetx, offsety)
         , KisRandomAccessorPixelTrait<T, TSelect>( this,
--- trunk/koffice/krita/image/tiles/kis_tilediterator.cc #768354:768355
@@ -61,6 +61,8 @@
         m_writable = rhs.m_writable;
         if (m_tile)
             m_tile->addReader();
+        if (m_oldTile)
+            m_oldTile->addReader();
     }
 }
 
@@ -85,6 +87,8 @@
         m_writable = rhs.m_writable;
         if (m_tile)
             m_tile->addReader();
+        if (m_oldTile)
+            m_oldTile->addReader();
     }
     return *this;
 }
--- trunk/koffice/krita/ui/kis_dlg_preferences.cc #768354:768355
@@ -897,7 +897,7 @@
         cfg.setUpdateAllOfQpainterCanvas( \
                dialog->m_performanceSettings->chkUpdateAllOfQPainterCanvas->isChecked() \
                );
         cfg.setUseNearestNeighbour( \
dialog->m_performanceSettings->chkUseNearestNeighbour->isChecked() );  // let the \
                tile manager know
-        KisTileManager::instance()->configChanged();
+        //KisTileManager::instance()->configChanged();
 
         dialog->m_tabletSettings->applySettings();
 


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

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