From b1684eba9c107e55a877527109820c9f8721e70d Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 9 Feb 2016 10:48:16 -0800 Subject: [PATCH 1/8] Add BugSplat cmake files --- cmake/macros/AddBugSplat.cmake | 19 +++++++++++++++++++ cmake/modules/FindBugSplat.cmake | 22 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 cmake/macros/AddBugSplat.cmake create mode 100644 cmake/modules/FindBugSplat.cmake diff --git a/cmake/macros/AddBugSplat.cmake b/cmake/macros/AddBugSplat.cmake new file mode 100644 index 0000000000..5facd1226c --- /dev/null +++ b/cmake/macros/AddBugSplat.cmake @@ -0,0 +1,19 @@ +macro(add_bugsplat) + find_package(BugSplat) + + get_property(BUGSPLAT_CHECKED GLOBAL PROPERTY CHECKED_FOR_BUGSPLAT_ONCE) + + if (BUGSPLAT_FOUND) + add_definitions(-DHAS_BUGSPLAT) + + target_include_directories(${TARGET_NAME} PRIVATE ${BUGSPLAT_INCLUDE_DIRS}) + target_link_libraries(${TARGET_NAME} ${BUGSPLAT_LIBRARIES}) + + add_custom_command(TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${BUGSPLAT_RC_DLL_PATH} "$/") + add_custom_command(TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${BUGSPLAT_EXE_PATH} "$/") + endif () +endmacro() diff --git a/cmake/modules/FindBugSplat.cmake b/cmake/modules/FindBugSplat.cmake new file mode 100644 index 0000000000..f9fe772b87 --- /dev/null +++ b/cmake/modules/FindBugSplat.cmake @@ -0,0 +1,22 @@ +if (WIN32) + message("in findbugsplat") + include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") + hifi_library_search_hints("BugSplat") + + find_path(BUGSPLAT_INCLUDE_DIRS NAMES BugSplat.h PATH_SUFFIXES inc HINTS ${BUGSPLAT_SEARCH_DIRS}) + + find_library(BUGSPLAT_LIBRARY_RELEASE "BugSplat64.lib" PATH_SUFFIXES "lib64" HINTS ${BUGSPLAT_SEARCH_DIRS}) + find_path(BUGSPLAT_DLL_PATH NAMES "BugSplat64.dll" PATH_SUFFIXES "bin64" HINTS ${BUGSPLAT_SEARCH_DIRS}) + find_file(BUGSPLAT_RC_DLL_PATH NAMES "BugSplatRc64.dll" PATH_SUFFIXES "bin64" HINTS ${BUGSPLAT_SEARCH_DIRS}) + find_file(BUGSPLAT_EXE_PATH NAMES "BsSndRpt64.exe" PATH_SUFFIXES "bin64" HINTS ${BUGSPLAT_SEARCH_DIRS}) + + include(SelectLibraryConfigurations) + select_library_configurations(BUGSPLAT) + + set(BUGSPLAT_LIBRARIES ${BUGSPLAT_LIBRARY_RELEASE}) + + set(BUGSPLAT_REQUIREMENTS BUGSPLAT_INCLUDE_DIRS BUGSPLAT_LIBRARIES BUGSPLAT_DLL_PATH BUGSPLAT_RC_DLL_PATH BUGSPLAT_EXE_PATH) + find_package_handle_standard_args(BugSplat DEFAULT_MSG ${BUGSPLAT_REQUIREMENTS}) + + add_paths_to_fixup_libs(${BUGSPLAT_DLL_PATH}) +endif () From 65b82b9bba3389b883206f5355dfdcb2d29c28ee Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 9 Feb 2016 10:48:32 -0800 Subject: [PATCH 2/8] Add BugSplat to interface --- interface/CMakeLists.txt | 2 ++ interface/src/main.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index b4ce53b92a..b398778db7 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -261,6 +261,8 @@ if (SCRIPTS_INSTALL_DIR) ) endif() +add_bugsplat() + if (WIN32) set(EXTRA_DEPLOY_OPTIONS "--qmldir ${PROJECT_SOURCE_DIR}/resources/qml") diff --git a/interface/src/main.cpp b/interface/src/main.cpp index a57e53b384..6ca33ae65c 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -24,9 +24,23 @@ #include "Application.h" #include "InterfaceLogging.h" #include "MainWindow.h" +#include + +#ifdef HAS_BUGSPLAT +#include +#endif int main(int argc, const char* argv[]) { disableQtBearerPoll(); // Fixes wifi ping spikes + +#if HAS_BUGSPLAT + // BugSplat initialization + std::unique_ptr version { new wchar_t(BuildInfo::VERSION.length() + 1) }; + BuildInfo::VERSION.toWCharArray(version.get()); + version.get()[BuildInfo::VERSION.length()] = NULL; + std::unique_ptr mpSender { new MiniDmpSender(L"interface_alpha", L"Interface", version.get()) }; + +#endif QString applicationName = "High Fidelity Interface - " + qgetenv("USERNAME"); From 27384dbe0a9fccb03ae65dbf1cefd1f937f0e8ba Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 9 Feb 2016 11:33:50 -0800 Subject: [PATCH 3/8] Clean up BugSplat initialization --- interface/src/main.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 6ca33ae65c..4a875de844 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -24,9 +24,9 @@ #include "Application.h" #include "InterfaceLogging.h" #include "MainWindow.h" -#include #ifdef HAS_BUGSPLAT +#include #include #endif @@ -35,11 +35,7 @@ int main(int argc, const char* argv[]) { #if HAS_BUGSPLAT // BugSplat initialization - std::unique_ptr version { new wchar_t(BuildInfo::VERSION.length() + 1) }; - BuildInfo::VERSION.toWCharArray(version.get()); - version.get()[BuildInfo::VERSION.length()] = NULL; - std::unique_ptr mpSender { new MiniDmpSender(L"interface_alpha", L"Interface", version.get()) }; - + MiniDmpSender mpSender { "interface_alpha", "Interface", BuildInfo::VERSION.toLatin1().constData() }; #endif QString applicationName = "High Fidelity Interface - " + qgetenv("USERNAME"); From 20cf7c0099e55eff21e8070e835e25e3bb52346d Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 9 Feb 2016 11:45:32 -0800 Subject: [PATCH 4/8] Clean up BugSplat cmake --- cmake/macros/AddBugSplat.cmake | 1 + cmake/modules/FindBugSplat.cmake | 9 +++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/cmake/macros/AddBugSplat.cmake b/cmake/macros/AddBugSplat.cmake index 5facd1226c..b8ab98a499 100644 --- a/cmake/macros/AddBugSplat.cmake +++ b/cmake/macros/AddBugSplat.cmake @@ -8,6 +8,7 @@ macro(add_bugsplat) target_include_directories(${TARGET_NAME} PRIVATE ${BUGSPLAT_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${BUGSPLAT_LIBRARIES}) + add_paths_to_fixup_libs(${BUGSPLAT_DLL_PATH}) add_custom_command(TARGET ${TARGET_NAME} POST_BUILD diff --git a/cmake/modules/FindBugSplat.cmake b/cmake/modules/FindBugSplat.cmake index f9fe772b87..48a9a0f41b 100644 --- a/cmake/modules/FindBugSplat.cmake +++ b/cmake/modules/FindBugSplat.cmake @@ -1,5 +1,4 @@ if (WIN32) - message("in findbugsplat") include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") hifi_library_search_hints("BugSplat") @@ -14,9 +13,7 @@ if (WIN32) select_library_configurations(BUGSPLAT) set(BUGSPLAT_LIBRARIES ${BUGSPLAT_LIBRARY_RELEASE}) - - set(BUGSPLAT_REQUIREMENTS BUGSPLAT_INCLUDE_DIRS BUGSPLAT_LIBRARIES BUGSPLAT_DLL_PATH BUGSPLAT_RC_DLL_PATH BUGSPLAT_EXE_PATH) - find_package_handle_standard_args(BugSplat DEFAULT_MSG ${BUGSPLAT_REQUIREMENTS}) - - add_paths_to_fixup_libs(${BUGSPLAT_DLL_PATH}) endif () + +set(BUGSPLAT_REQUIREMENTS BUGSPLAT_INCLUDE_DIRS BUGSPLAT_LIBRARIES BUGSPLAT_DLL_PATH BUGSPLAT_RC_DLL_PATH BUGSPLAT_EXE_PATH) +find_package_handle_standard_args(BugSplat DEFAULT_MSG ${BUGSPLAT_REQUIREMENTS}) From 813d5e5ba03c141f86f069eac6a26ebac0fb858c Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 11 Feb 2016 08:17:05 -0800 Subject: [PATCH 5/8] Add headers and proper bugsplat checking to cmake files --- cmake/macros/AddBugSplat.cmake | 18 ++++++++++++++++-- cmake/modules/FindBugSplat.cmake | 11 +++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/cmake/macros/AddBugSplat.cmake b/cmake/macros/AddBugSplat.cmake index b8ab98a499..87e3ddf125 100644 --- a/cmake/macros/AddBugSplat.cmake +++ b/cmake/macros/AddBugSplat.cmake @@ -1,8 +1,22 @@ -macro(add_bugsplat) - find_package(BugSplat) +# +# AddBugSplat.cmake +# cmake/macros +# +# Created by Ryan Huffman on 02/09/16. +# Copyright 2016 High Fidelity, Inc. +# +# Distributed under the Apache License, Version 2.0. +# See the accompanying file LICENSE or http:#www.apache.org/licenses/LICENSE-2.0.html +# +macro(add_bugsplat) get_property(BUGSPLAT_CHECKED GLOBAL PROPERTY CHECKED_FOR_BUGSPLAT_ONCE) + if (NOT BUGSPLAT_CHECKED) + find_package(BugSplat) + set_property(GLOBAL PROPERTY CHECKED_FOR_NSIGHT_ONCE TRUE) + endif () + if (BUGSPLAT_FOUND) add_definitions(-DHAS_BUGSPLAT) diff --git a/cmake/modules/FindBugSplat.cmake b/cmake/modules/FindBugSplat.cmake index 48a9a0f41b..8bea1cb1e1 100644 --- a/cmake/modules/FindBugSplat.cmake +++ b/cmake/modules/FindBugSplat.cmake @@ -1,3 +1,14 @@ +# +# FindBugSplat.cmake +# cmake/modules +# +# Created by Ryan Huffman on 02/09/16. +# Copyright 2016 High Fidelity, Inc. +# +# Distributed under the Apache License, Version 2.0. +# See the accompanying file LICENSE or http:#www.apache.org/licenses/LICENSE-2.0.html +# + if (WIN32) include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") hifi_library_search_hints("BugSplat") From 3355019cbed8d6bd00b013bae931102ab3e28aca Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 11 Feb 2016 08:17:20 -0800 Subject: [PATCH 6/8] Add custom bugsplat flags --- interface/src/main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 4a875de844..50f02515e3 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -34,8 +34,10 @@ int main(int argc, const char* argv[]) { disableQtBearerPoll(); // Fixes wifi ping spikes #if HAS_BUGSPLAT - // BugSplat initialization - MiniDmpSender mpSender { "interface_alpha", "Interface", BuildInfo::VERSION.toLatin1().constData() }; + // Prevent other threads from hijacking the Exception filter, and allocate 4MB up-front that may be useful in + // low-memory scenarios. + DWORD bugSplatFlags = MDSF_PREVENTHIJACKING | MDSF_USEGUARDMEMORY; + MiniDmpSender mpSender { "interface_alpha", "Interface", BuildInfo::VERSION.toLatin1().constData(), nullptr, bugSplatFlags }; #endif QString applicationName = "High Fidelity Interface - " + qgetenv("USERNAME"); From 71b72aceb880bd855498a40ab7786a20ee71cfbf Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 11 Feb 2016 09:46:12 -0800 Subject: [PATCH 7/8] Fix CHECKED_FOR_BUGSPLAT_ONCE --- cmake/macros/AddBugSplat.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/AddBugSplat.cmake b/cmake/macros/AddBugSplat.cmake index 87e3ddf125..979dcfe817 100644 --- a/cmake/macros/AddBugSplat.cmake +++ b/cmake/macros/AddBugSplat.cmake @@ -14,7 +14,7 @@ macro(add_bugsplat) if (NOT BUGSPLAT_CHECKED) find_package(BugSplat) - set_property(GLOBAL PROPERTY CHECKED_FOR_NSIGHT_ONCE TRUE) + set_property(GLOBAL PROPERTY CHECKED_FOR_BUGSPLAT_ONCE TRUE) endif () if (BUGSPLAT_FOUND) From d2264163067117d51727b2275128d93204ec1ae2 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 11 Feb 2016 09:46:31 -0800 Subject: [PATCH 8/8] Update params to MiniDmpSender to be const --- interface/src/main.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 50f02515e3..f45a6c08b9 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -36,8 +36,11 @@ int main(int argc, const char* argv[]) { #if HAS_BUGSPLAT // Prevent other threads from hijacking the Exception filter, and allocate 4MB up-front that may be useful in // low-memory scenarios. - DWORD bugSplatFlags = MDSF_PREVENTHIJACKING | MDSF_USEGUARDMEMORY; - MiniDmpSender mpSender { "interface_alpha", "Interface", BuildInfo::VERSION.toLatin1().constData(), nullptr, bugSplatFlags }; + static const DWORD BUG_SPLAT_FLAGS = MDSF_PREVENTHIJACKING | MDSF_USEGUARDMEMORY; + static const char* BUG_SPLAT_DATABASE = "interface_alpha"; + static const char* BUG_SPLAT_APPLICATION_NAME = "Interface"; + MiniDmpSender mpSender { BUG_SPLAT_DATABASE, BUG_SPLAT_APPLICATION_NAME, BuildInfo::VERSION.toLatin1().constData(), + nullptr, BUG_SPLAT_FLAGS }; #endif QString applicationName = "High Fidelity Interface - " + qgetenv("USERNAME");