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

List:       kde-commits
Subject:    [krita/akamakin/T8628-multithreading-optimization] /: Added compile time switch for hash tables.
From:       Andrey Kamakin <null () kde ! org>
Date:       2018-06-30 18:38:34
Message-ID: E1fZKlW-0000RZ-Td () code ! kde ! org
[Download RAW message or body]

Git commit 24975f889a7a219d7dd9729d03e34048669dae73 by Andrey Kamakin.
Committed on 30/06/2018 at 18:37.
Pushed by akamakin into branch 'akamakin/T8628-multithreading-optimization'.

Added compile time switch for hash tables.

Ref T8874

M  +4    -0    CMakeLists.txt
M  +10   -11   libs/image/tiles3/kis_memento_manager.h
M  +0    -1    libs/image/tiles3/kis_tile_hash_table.h
M  +6    -1    libs/image/tiles3/kis_tiled_data_manager.h

https://commits.kde.org/krita/24975f889a7a219d7dd9729d03e34048669dae73

diff --git a/CMakeLists.txt b/CMakeLists.txt
index cdf8f958778..f8dcb57ae25 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -169,6 +169,10 @@ option(HIDE_SAFE_ASSERTS "Don't show message box for \=
"safe\" asserts, just igno
 configure_file(config-hide-safe-asserts.h.cmake ${CMAKE_CURRENT_BINARY_DIR=
}/config-hide-safe-asserts.h)
 add_feature_info("Safe Asserts" HIDE_SAFE_ASSERTS "Don't show message box =
for \"safe\" asserts, just ignore them automatically and dump a message to =
the terminal.")
 =

+option(USE_LOCK_FREE_HASH_TABLE "Use lock free hash table instead of block=
ing." ON)
+configure_file(config-hash-table-implementaion.h.cmake ${CMAKE_CURRENT_BIN=
ARY_DIR}/config-hash-table-implementaion.h)
+add_feature_info("Lock free hash table" USE_LOCK_FREE_HASH_TABLE "Use lock=
 free hash table instead of blocking.")
+
 option(FOUNDATION_BUILD "A Foundation build is a binary release build that=
 can package some extra things like color themes. Linux distributions that =
build and install Krita into a default system location should not define th=
is option to true." OFF)
 add_feature_info("Foundation Build" FOUNDATION_BUILD "A Foundation build i=
s a binary release build that can package some extra things like color them=
es. Linux distributions that build and install Krita into a default system =
location should not define this option to true.")
 =

diff --git a/libs/image/tiles3/kis_memento_manager.h b/libs/image/tiles3/ki=
s_memento_manager.h
index b68ee648651..0b20aaa852a 100644
--- a/libs/image/tiles3/kis_memento_manager.h
+++ b/libs/image/tiles3/kis_memento_manager.h
@@ -22,8 +22,7 @@
 #include <QList>
 =

 #include "kis_memento_item.h"
-//#include "kis_tile_hash_table.h"
-#include "kis_tile_hash_table2.h"
+#include "config-hash-table-implementaion.h"
 =

 typedef QList<KisMementoItemSP> KisMementoItemList;
 typedef QListIterator<KisMementoItemSP> KisMementoItemListIterator;
@@ -39,19 +38,19 @@ typedef QList<KisHistoryItem> KisHistoryList;
 class KisMemento;
 typedef KisSharedPtr<KisMemento> KisMementoSP;
 =

-template <class T>
-class KisTileHashTableTraits2;
-
-template <class T>
-class KisTileHashTableIteratorTraits2;
-
-//typedef KisTileHashTableTraits<KisMementoItem> KisMementoItemHashTable;
-//typedef KisTileHashTableIteratorTraits<KisMementoItem, QWriteLocker> Kis=
MementoItemHashTableIterator;
-//typedef KisTileHashTableIteratorTraits<KisMementoItem, QReadLocker> KisM=
ementoItemHashTableIteratorConst;
+#ifdef USE_LOCK_FREE_HASH_TABLE
+#include "kis_tile_hash_table2.h"
 =

 typedef KisTileHashTableTraits2<KisMementoItem> KisMementoItemHashTable;
 typedef KisTileHashTableIteratorTraits2<KisMementoItem> KisMementoItemHash=
TableIterator;
 typedef KisTileHashTableIteratorTraits2<KisMementoItem> KisMementoItemHash=
TableIteratorConst;
+#else
+#include "kis_tile_hash_table.h"
+
+typedef KisTileHashTableTraits<KisMementoItem> KisMementoItemHashTable;
+typedef KisTileHashTableIteratorTraits<KisMementoItem, QWriteLocker> KisMe=
mentoItemHashTableIterator;
+typedef KisTileHashTableIteratorTraits<KisMementoItem, QReadLocker> KisMem=
entoItemHashTableIteratorConst;
+#endif // USE_LOCK_FREE_HASH_TABLE
 =

 =

 class KRITAIMAGE_EXPORT KisMementoManager
diff --git a/libs/image/tiles3/kis_tile_hash_table.h b/libs/image/tiles3/ki=
s_tile_hash_table.h
index e5e25fa3e7d..658b782f55a 100644
--- a/libs/image/tiles3/kis_tile_hash_table.h
+++ b/libs/image/tiles3/kis_tile_hash_table.h
@@ -23,7 +23,6 @@
 #include "kis_tile.h"
 =

 =

-
 /**
  * This is a  template for a hash table that stores  tiles (or some other
  * objects  resembling tiles).   Actually, this  object should  only have
diff --git a/libs/image/tiles3/kis_tiled_data_manager.h b/libs/image/tiles3=
/kis_tiled_data_manager.h
index 8524acff607..b6f8384d178 100644
--- a/libs/image/tiles3/kis_tiled_data_manager.h
+++ b/libs/image/tiles3/kis_tiled_data_manager.h
@@ -25,12 +25,17 @@
 =

 #include <kis_shared.h>
 #include <kis_shared_ptr.h>
+#include "config-hash-table-implementaion.h"
 =

 //#include "kis_debug.h"
 #include "kritaimage_export.h"
 =

-//#include "kis_tile_hash_table.h"
+#ifdef USE_LOCK_FREE_HASH_TABLE
 #include "kis_tile_hash_table2.h"
+#else
+#include "kis_tile_hash_table.h"
+#endif // USE_LOCK_FREE_HASH_TABLE
+
 #include "kis_memento_manager.h"
 #include "kis_memento.h"
 #include "KisTiledExtentManager.h"
[prev in list] [next in list] [prev in thread] [next in thread] 

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