Add abseil hashmaps and use in texture list, also fix bugs in texture list insertion

This commit is contained in:
Rye Mutt
2019-09-28 19:03:49 -04:00
parent 0880c762c9
commit 8561af1f84
29 changed files with 136 additions and 21 deletions

View File

@@ -68,18 +68,18 @@
<key>archive</key> <key>archive</key>
<map> <map>
<key>hash</key> <key>hash</key>
<string>b95e484e5b6cc0d10da48d3cf0ad37cd</string> <string>b82d5aa8380926240f3415279480c831</string>
<key>hash_algorithm</key> <key>hash_algorithm</key>
<string>md5</string> <string>md5</string>
<key>url</key> <key>url</key>
<string>http://depot.alchemyviewer.org/pub/packages/common/abseil_cpp-20190327.190862343-common-190862343.tar.bz2</string> <string>https://pkg.alchemyviewer.org/repository/autobuild-external/abseil-cpp/common/abseil_cpp-ac78ffc.1-common-1.tar.bz2</string>
</map> </map>
<key>name</key> <key>name</key>
<string>common</string> <string>common</string>
</map> </map>
</map> </map>
<key>version</key> <key>version</key>
<string>20190327.190862343</string> <string>ac78ffc.1</string>
</map> </map>
<key>apr_suite</key> <key>apr_suite</key>
<map> <map>

View File

@@ -17,6 +17,7 @@ project(${ROOT_PROJECT_NAME})
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(Variables) include(Variables)
include(00-Common)
include(BuildVersion) include(BuildVersion)
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)
@@ -27,6 +28,9 @@ if (NOT CMAKE_BUILD_TYPE)
"Build type. One of: Debug Release RelWithDebInfo" FORCE) "Build type. One of: Debug Release RelWithDebInfo" FORCE)
endif (NOT CMAKE_BUILD_TYPE) endif (NOT CMAKE_BUILD_TYPE)
include(Abseil-CPP)
# Dependencies
add_subdirectory(${ABSEIL_SRC_DIR} ${ABSEIL_BIN_DIR})
add_subdirectory(cmake) add_subdirectory(cmake)
add_subdirectory(${LIBS_OPEN_PREFIX}aistatemachine) add_subdirectory(${LIBS_OPEN_PREFIX}aistatemachine)
add_subdirectory(${LIBS_OPEN_PREFIX}llaudio) add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)

View File

@@ -39,3 +39,9 @@ set_source_files_properties(${aistatemachine_HEADER_FILES}
list(APPEND aistatemachine_SOURCE_FILES ${aistatemachine_HEADER_FILES}) list(APPEND aistatemachine_SOURCE_FILES ${aistatemachine_HEADER_FILES})
add_library (aistatemachine ${aistatemachine_SOURCE_FILES}) add_library (aistatemachine ${aistatemachine_SOURCE_FILES})
target_link_libraries(
aistatemachine
PUBLIC
llcommon
)

View File

@@ -0,0 +1,8 @@
# -*- cmake -*-
include(Prebuilt)
set(BUILD_TESTING OFF)
use_prebuilt_binary(abseil-cpp)
set(ABSEIL_SRC_DIR ${LIBS_PREBUILT_DIR}/abseil-cpp)
set(ABSEIL_BIN_DIR ${CMAKE_BINARY_DIR}/abseil-cpp)

View File

@@ -8,6 +8,7 @@ set(cmake_SOURCE_FILES
CMakeLists.txt CMakeLists.txt
00-Common.cmake 00-Common.cmake
Abseil-CPP.cmake
AIStateMachine.cmake AIStateMachine.cmake
APR.cmake APR.cmake
Audio.cmake Audio.cmake

View File

@@ -33,3 +33,8 @@ set_source_files_properties(${libndhacd_HEADER_FILES}
add_library( nd_hacdConvexDecomposition STATIC ${libndhacd_SOURCE_FILES} ${libndhacd_HEADER_FILES}) add_library( nd_hacdConvexDecomposition STATIC ${libndhacd_SOURCE_FILES} ${libndhacd_HEADER_FILES})
target_link_libraries(
nd_hacdConvexDecomposition
PUBLIC
llcommon
)

View File

@@ -30,3 +30,8 @@ set_source_files_properties(${libpathing_HEADER_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE) PROPERTIES HEADER_FILE_ONLY TRUE)
add_library(nd_Pathing STATIC ${libpathing_SOURCE_FILES} ${libpathing_HEADER_FILES} ) add_library(nd_Pathing STATIC ${libpathing_SOURCE_FILES} ${libpathing_HEADER_FILES} )
target_link_libraries(nd_Pathing
PUBLIC
llcommon
)

View File

@@ -81,3 +81,9 @@ set_source_files_properties(${llaudio_HEADER_FILES}
list(APPEND llaudio_SOURCE_FILES ${llaudio_HEADER_FILES}) list(APPEND llaudio_SOURCE_FILES ${llaudio_HEADER_FILES})
add_library (llaudio ${llaudio_SOURCE_FILES}) add_library (llaudio ${llaudio_SOURCE_FILES})
target_link_libraries(
llaudio
PUBLIC
llcommon
)

View File

@@ -77,3 +77,9 @@ set_source_files_properties(${llcharacter_HEADER_FILES}
list(APPEND llcharacter_SOURCE_FILES ${llcharacter_HEADER_FILES}) list(APPEND llcharacter_SOURCE_FILES ${llcharacter_HEADER_FILES})
add_library (llcharacter ${llcharacter_SOURCE_FILES}) add_library (llcharacter ${llcharacter_SOURCE_FILES})
target_link_libraries(
llcharacter
PUBLIC
llcommon
)

View File

@@ -4,7 +4,9 @@ project(llcommon)
include(Cwdebug) include(Cwdebug)
include(00-Common) include(00-Common)
include(Linking)
include(LLCommon) include(LLCommon)
include(EXPAT)
include(APR) include(APR)
include(Linking) include(Linking)
include(Boost) include(Boost)
@@ -287,6 +289,8 @@ endif(LLCOMMON_LINK_SHARED)
target_link_libraries( target_link_libraries(
llcommon llcommon
PUBLIC
absl::hash
${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES} ${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}
${APRUTIL_LIBRARIES} ${APRUTIL_LIBRARIES}
${APR_LIBRARIES} ${APR_LIBRARIES}

View File

@@ -34,6 +34,7 @@
#include <boost/unordered_set.hpp> #include <boost/unordered_set.hpp>
#include "stdtypes.h" #include "stdtypes.h"
#include "llpreprocessor.h" #include "llpreprocessor.h"
#include <absl/hash/hash.h>
class LLMutex; class LLMutex;
@@ -94,6 +95,11 @@ public:
bool operator<(const LLUUID &rhs) const; bool operator<(const LLUUID &rhs) const;
bool operator>(const LLUUID &rhs) const; bool operator>(const LLUUID &rhs) const;
template <typename H>
friend H AbslHashValue(H h, const LLUUID& id) {
return H::combine_contiguous(std::move(h), id.mData, UUID_BYTES);
}
// xor functions. Useful since any two random uuids xored together // xor functions. Useful since any two random uuids xored together
// will yield a determinate third random unique id that can be // will yield a determinate third random unique id that can be
// used as a key in a single uuid that represents 2. // used as a key in a single uuid that represents 2.
@@ -294,24 +300,22 @@ typedef std::set<LLUUID, lluuid_less> uuid_list_t;
namespace std { namespace std {
template <> struct hash<LLUUID> template <> struct hash<LLUUID>
{ {
public:
size_t operator()(const LLUUID & id) const size_t operator()(const LLUUID & id) const
{ {
return id.hash(); return absl::Hash<LLUUID>{}(id);
} }
}; };
} }
namespace boost { namespace boost {
template<> class hash<LLUUID> template<> struct hash<LLUUID>
{
public:
size_t operator()(const LLUUID& id) const
{ {
return id.hash(); size_t operator()(const LLUUID& id) const
} {
}; return absl::Hash<LLUUID>{}(id);
}
};
} }
/* /*

View File

@@ -57,6 +57,8 @@ add_library (llimage ${llimage_SOURCE_FILES})
target_link_libraries( target_link_libraries(
llimage llimage
PUBLIC
llcommon
${JPEG_LIBRARIES} ${JPEG_LIBRARIES}
${PNG_LIBRARIES} ${PNG_LIBRARIES}
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}

View File

@@ -44,6 +44,8 @@ add_library (llimagej2coj ${llimagej2coj_SOURCE_FILES})
target_link_libraries( target_link_libraries(
llimagej2coj llimagej2coj
PUBLIC
llcommon
${OPENJPEG_LIBRARIES} ${OPENJPEG_LIBRARIES}
) )

View File

@@ -69,3 +69,9 @@ set_source_files_properties(${llinventory_HEADER_FILES}
list(APPEND llinventory_SOURCE_FILES ${llinventory_HEADER_FILES}) list(APPEND llinventory_SOURCE_FILES ${llinventory_HEADER_FILES})
add_library (llinventory ${llinventory_SOURCE_FILES}) add_library (llinventory ${llinventory_SOURCE_FILES})
target_link_libraries(
llinventory
PUBLIC
llcommon
)

View File

@@ -102,3 +102,9 @@ set_source_files_properties(${llmath_HEADER_FILES}
list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES}) list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES})
add_library (llmath ${llmath_SOURCE_FILES}) add_library (llmath ${llmath_SOURCE_FILES})
target_link_libraries(
llmath
PUBLIC
llcommon
)

View File

@@ -219,6 +219,8 @@ add_library (llmessage ${llmessage_SOURCE_FILES})
target_link_libraries( target_link_libraries(
llmessage llmessage
PUBLIC
llcommon
${CURL_LIBRARIES} ${CURL_LIBRARIES}
${CARES_LIBRARIES} ${CARES_LIBRARIES}
${CRYPTO_LIBRARIES} ${CRYPTO_LIBRARIES}

View File

@@ -58,8 +58,14 @@ list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})
add_library (llplugin ${llplugin_SOURCE_FILES}) add_library (llplugin ${llplugin_SOURCE_FILES})
if(LINUX AND STANDALONE) if(LINUX AND STANDALONE)
target_link_libraries (llplugin rt dl) target_link_libraries (llplugin llcommon rt dl)
endif(LINUX AND STANDALONE) else()
target_link_libraries(
llplugin
PUBLIC
llcommon
)
endif()
add_subdirectory(slplugin) add_subdirectory(slplugin)

View File

@@ -1,6 +1,7 @@
project(SLPlugin) project(SLPlugin)
include(00-Common) include(00-Common)
include(Linking)
include(LLCommon) include(LLCommon)
include(LLPlugin) include(LLPlugin)
include(Linking) include(Linking)

View File

@@ -71,3 +71,9 @@ set_source_files_properties(${llprimitive_HEADER_FILES}
list(APPEND llprimitive_SOURCE_FILES ${llprimitive_HEADER_FILES}) list(APPEND llprimitive_SOURCE_FILES ${llprimitive_HEADER_FILES})
add_library (llprimitive ${llprimitive_SOURCE_FILES}) add_library (llprimitive ${llprimitive_SOURCE_FILES})
target_link_libraries(
llprimitive
PUBLIC
llcommon
)

View File

@@ -84,3 +84,9 @@ endif (DARWIN)
list(APPEND llrender_SOURCE_FILES ${llrender_HEADER_FILES}) list(APPEND llrender_SOURCE_FILES ${llrender_HEADER_FILES})
add_library (llrender ${llrender_SOURCE_FILES}) add_library (llrender ${llrender_SOURCE_FILES})
target_link_libraries(
llrender
PUBLIC
llcommon
)

View File

@@ -62,6 +62,8 @@ list(APPEND llvfs_SOURCE_FILES ${llvfs_HEADER_FILES})
add_library (llvfs ${llvfs_SOURCE_FILES}) add_library (llvfs ${llvfs_SOURCE_FILES})
target_link_libraries(llvfs target_link_libraries(llvfs
PUBLIC
llcommon
${Boost_FILESYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY}
) )

View File

@@ -148,4 +148,4 @@ endif (llwindow_HEADER_FILES)
${viewer_SOURCE_FILES} ${viewer_SOURCE_FILES}
) )
target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES}) target_link_libraries (llwindow PUBLIC llcommon ${llwindow_LINK_LIBRARIES})

View File

@@ -40,5 +40,7 @@ add_library (llxml ${llxml_SOURCE_FILES})
target_link_libraries( target_link_libraries(
llxml llxml
PUBLIC
llcommon
${EXPAT_LIBRARIES} ${EXPAT_LIBRARIES}
) )

View File

@@ -3,6 +3,10 @@
project(viewer) project(viewer)
include(00-Common) include(00-Common)
# DON'T move Linking.cmake to its place in the alphabetized list below: it
# sets variables on which the 3p .cmake files depend.
include(Linking)
include(Boost) include(Boost)
include(BuildPackagesInfo) include(BuildPackagesInfo)
include(BuildVersion) include(BuildVersion)
@@ -31,7 +35,6 @@ include(LLUI)
include(LLVFS) include(LLVFS)
include(LLWindow) include(LLWindow)
include(LLXML) include(LLXML)
include(Linking)
include(NDOF) include(NDOF)
include(NVAPI) include(NVAPI)
include(OPENAL) include(OPENAL)
@@ -1680,6 +1683,8 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${HUNSPELL_LIBRARY} ${HUNSPELL_LIBRARY}
${LLPHYSICSEXTENSIONS_LIBRARIES} ${LLPHYSICSEXTENSIONS_LIBRARIES}
${LLAPPEARANCE_LIBRARIES} ${LLAPPEARANCE_LIBRARIES}
absl::flat_hash_map
absl::node_hash_map
) )
if (LINUX) if (LINUX)

View File

@@ -120,6 +120,7 @@ void LLViewerTextureList::doPreloadImages()
llassert_always(mInitialized) ; llassert_always(mInitialized) ;
llassert_always(mImageList.empty()) ; llassert_always(mImageList.empty()) ;
llassert_always(mUUIDMap.empty()) ; llassert_always(mUUIDMap.empty()) ;
llassert_always(mUUIDDict.empty());
// Set the "missing asset" image // Set the "missing asset" image
LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", FTT_LOCAL_FILE, MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI); LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", FTT_LOCAL_FILE, MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
@@ -692,8 +693,12 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image)
sNumImages++; sNumImages++;
addImageToList(new_image); addImageToList(new_image);
mUUIDMap.emplace(image_id, new_image); auto ret_pair = mUUIDMap.emplace(image_id, new_image);
mUUIDDict.emplace(image_id, new_image); if (!ret_pair.second)
{
ret_pair.first->second = new_image;
}
mUUIDDict.insert_or_assign(image_id, new_image);
} }

View File

@@ -37,6 +37,8 @@
#include <set> #include <set>
#include <unordered_map> #include <unordered_map>
#include "absl/container/flat_hash_map.h"
const U32 LL_IMAGE_REZ_LOSSLESS_CUTOFF = 128; const U32 LL_IMAGE_REZ_LOSSLESS_CUTOFF = 128;
const BOOL MIPMAP_YES = TRUE; const BOOL MIPMAP_YES = TRUE;
@@ -188,8 +190,8 @@ public:
private: private:
typedef std::map< LLUUID, LLPointer<LLViewerFetchedTexture> > uuid_map_t; typedef std::map< LLUUID, LLPointer<LLViewerFetchedTexture> > uuid_map_t;
uuid_map_t mUUIDMap; uuid_map_t mUUIDMap;
typedef std::unordered_map< LLUUID, LLPointer<LLViewerFetchedTexture>* > uuid_dict_t; typedef absl::flat_hash_map< LLUUID, LLViewerFetchedTexture* > uuid_dict_t;
uuid_map_t mUUIDDict; uuid_dict_t mUUIDDict;
LLUUID mLastUpdateUUID; LLUUID mLastUpdateUUID;
LLUUID mLastFetchUUID; LLUUID mLastFetchUUID;

View File

@@ -56,3 +56,9 @@ set_source_files_properties(${statemachine_HEADER_FILES}
list(APPEND statemachine_SOURCE_FILES ${statemachine_HEADER_FILES}) list(APPEND statemachine_SOURCE_FILES ${statemachine_HEADER_FILES})
add_library (statemachine ${statemachine_SOURCE_FILES}) add_library (statemachine ${statemachine_SOURCE_FILES})
target_link_libraries(
statemachine
PUBLIC
llcommon
)

View File

@@ -41,3 +41,8 @@ list(APPEND basic_plugin_base_SOURCE_FILES ${basic_plugin_base_HEADER_FILES})
add_library(basic_plugin_base add_library(basic_plugin_base
${basic_plugin_base_SOURCE_FILES} ${basic_plugin_base_SOURCE_FILES}
) )
target_link_libraries(basic_plugin_base
PUBLIC
llcommon
)

View File

@@ -57,5 +57,7 @@ add_library(media_plugin_base
) )
target_link_libraries(media_plugin_base target_link_libraries(media_plugin_base
PUBLIC
llcommon
${BASIC_PLUGIN_BASE_LIBRARIES} ${BASIC_PLUGIN_BASE_LIBRARIES}
) )