From b8f821a6a61088473760d9a1e957601815146658 Mon Sep 17 00:00:00 2001 From: Clement Date: Thu, 5 Jul 2018 12:05:48 -0700 Subject: [PATCH 01/11] Use binary path in args to find crashpad handler --- interface/src/CrashHandler.h | 5 ++--- interface/src/CrashHandler_Breakpad.cpp | 6 +++--- interface/src/CrashHandler_Crashpad.cpp | 26 ++++++++++++++----------- interface/src/CrashHandler_None.cpp | 7 ++++--- interface/src/main.cpp | 2 +- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/interface/src/CrashHandler.h b/interface/src/CrashHandler.h index 4a6483c700..6f8e9c3bf6 100644 --- a/interface/src/CrashHandler.h +++ b/interface/src/CrashHandler.h @@ -14,8 +14,7 @@ #include -bool startCrashHandler(); +bool startCrashHandler(std::string appPath); void setCrashAnnotation(std::string name, std::string value); - -#endif \ No newline at end of file +#endif // hifi_CrashHandler_h diff --git a/interface/src/CrashHandler_Breakpad.cpp b/interface/src/CrashHandler_Breakpad.cpp index f2a174b6ea..c11e0e2a12 100644 --- a/interface/src/CrashHandler_Breakpad.cpp +++ b/interface/src/CrashHandler_Breakpad.cpp @@ -9,10 +9,10 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include "CrashHandler.h" - #if HAS_BREAKPAD +#include "CrashHandler.h" + #include #include @@ -55,7 +55,7 @@ void flushAnnotations() { settings.sync(); } -bool startCrashHandler() { +bool startCrashHandler(std::string appPath) { annotations["version"] = BuildInfo::VERSION; annotations["build_number"] = BuildInfo::BUILD_NUMBER; annotations["build_type"] = BuildInfo::BUILD_TYPE_STRING; diff --git a/interface/src/CrashHandler_Crashpad.cpp b/interface/src/CrashHandler_Crashpad.cpp index 76d4a8e2e1..d11969491a 100644 --- a/interface/src/CrashHandler_Crashpad.cpp +++ b/interface/src/CrashHandler_Crashpad.cpp @@ -9,21 +9,18 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#if HAS_CRASHPAD + #include "CrashHandler.h" #include -#include - -#if HAS_CRASHPAD - #include #include -#include +#include #include - -#include +#include #include #include @@ -38,12 +35,13 @@ using namespace crashpad; static const std::string BACKTRACE_URL { CMAKE_BACKTRACE_URL }; static const std::string BACKTRACE_TOKEN { CMAKE_BACKTRACE_TOKEN }; -extern QString qAppFileName(); - CrashpadClient* client { nullptr }; std::mutex annotationMutex; crashpad::SimpleStringDictionary* crashpadAnnotations { nullptr }; +#ifdef Q_OS_WIN +#include + LONG WINAPI vectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) { if (!client) { return EXCEPTION_CONTINUE_SEARCH; @@ -56,8 +54,9 @@ LONG WINAPI vectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) { return EXCEPTION_CONTINUE_SEARCH; } +#endif -bool startCrashHandler() { +bool startCrashHandler(std::string appPath) { if (BACKTRACE_URL.empty() || BACKTRACE_TOKEN.empty()) { return false; } @@ -81,8 +80,13 @@ bool startCrashHandler() { QDir(crashpadDbDir).mkpath(crashpadDbName); // Make sure the directory exists const auto crashpadDbPath = crashpadDbDir.toStdString() + "/" + crashpadDbName; + static const QString CRASHPAD_HANDLER_NAME { "crashpad_handler" }; // Locate Crashpad handler - const std::string CRASHPAD_HANDLER_PATH = QFileInfo(qAppFileName()).absolutePath().toStdString() + "/crashpad_handler.exe"; + const QFileInfo interfaceBinary { QString::fromStdString(appPath) }; + const QDir interfaceDir = interfaceBinary.dir(); + assert(interfaceDir.exists(CRASHPAD_HANDLER_NAME)); + const std::string CRASHPAD_HANDLER_PATH = interfaceDir.filePath(CRASHPAD_HANDLER_NAME).toStdString(); + qDebug() << "CRASHPAD_HANDLER_PATH:" << CRASHPAD_HANDLER_PATH.c_str(); // Setup different file paths base::FilePath::StringType dbPath; diff --git a/interface/src/CrashHandler_None.cpp b/interface/src/CrashHandler_None.cpp index cba585f7b7..77b8ab332e 100644 --- a/interface/src/CrashHandler_None.cpp +++ b/interface/src/CrashHandler_None.cpp @@ -9,14 +9,15 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#if !defined(HAS_CRASHPAD) && !defined(HAS_BREAKPAD) + #include "CrashHandler.h" #include + #include -#if !defined(HAS_CRASHPAD) && !defined(HAS_BREAKPAD) - -bool startCrashHandler() { +bool startCrashHandler(std::string appPath) { qDebug() << "No crash handler available."; return false; } diff --git a/interface/src/main.cpp b/interface/src/main.cpp index d6665f1036..85a83d88d1 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -91,7 +91,7 @@ int main(int argc, const char* argv[]) { qDebug() << "UserActivityLogger is enabled:" << ual.isEnabled(); if (ual.isEnabled()) { - auto crashHandlerStarted = startCrashHandler(); + auto crashHandlerStarted = startCrashHandler(argv[0]); qDebug() << "Crash handler started:" << crashHandlerStarted; } From 546ee2b96f74499eae54cc8becab6ba90d9dd88f Mon Sep 17 00:00:00 2001 From: Clement Date: Thu, 5 Jul 2018 14:18:09 -0700 Subject: [PATCH 02/11] cleanup cmake code --- cmake/externals/crashpad/CMakeLists.txt | 46 +++++++++++++++++++------ cmake/macros/AddCrashpad.cmake | 6 +++- interface/src/CrashHandler_Crashpad.cpp | 9 ++++- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/cmake/externals/crashpad/CMakeLists.txt b/cmake/externals/crashpad/CMakeLists.txt index e509e115e4..bfddd5798f 100644 --- a/cmake/externals/crashpad/CMakeLists.txt +++ b/cmake/externals/crashpad/CMakeLists.txt @@ -14,21 +14,45 @@ if (WIN32) LOG_DOWNLOAD 1 ) - ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE PATH "List of Crashpad include directories") - + set(BIN_RELEASE_PATH "${SOURCE_DIR}/out/Release_x64") + set(BIN_EXT ".exe") + set(LIB_RELEASE_PATH "${SOURCE_DIR}/out/Release_x64/lib_MD") + set(LIB_DEBUG_PATH "${SOURCE_DIR}/out/Debug_x64/lib_MD") + set(LIB_PREFIX "") set(LIB_EXT "lib") +elseif (APPLE) + ExternalProject_Add( + ${EXTERNAL_NAME} + URL http://public.highfidelity.com/dependencies/crashpad_mac_070318.zip + URL_MD5 ba1501dc163591ac2d1be74946967e2a + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + LOG_DOWNLOAD 1 + ) - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${SOURCE_DIR}/out/Release_x64/lib_MD/${LIB_PREFIX}crashpad_client.${LIB_EXT} CACHE FILEPATH "Path to Crashpad release library") - set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY_RELEASE ${SOURCE_DIR}/out/Release_x64/lib_MD/${LIB_PREFIX}base.${LIB_EXT} CACHE FILEPATH "Path to Crashpad base release library") - set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY_RELEASE ${SOURCE_DIR}/out/Release_x64/lib_MD/${LIB_PREFIX}crashpad_util.${LIB_EXT} CACHE FILEPATH "Path to Crashpad util release library") + set(BIN_RELEASE_PATH "${SOURCE_DIR}/out/Release") + set(BIN_EXT "") + set(LIB_RELEASE_PATH "${SOURCE_DIR}/out/Release/lib") + set(LIB_DEBUG_PATH "${SOURCE_DIR}/out/Debug/lib") + set(LIB_PREFIX "lib") + set(LIB_EXT "a") +endif () - set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${SOURCE_DIR}/out/Debug_x64/lib_MD/${LIB_PREFIX}crashpad_client.${LIB_EXT} CACHE FILEPATH "Path to Crashpad debug library") - set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY_DEBUG ${SOURCE_DIR}/out/Debug_x64/lib_MD/${LIB_PREFIX}base.${LIB_EXT} CACHE FILEPATH "Path to Crashpad base debug library") - set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY_DEBUG ${SOURCE_DIR}/out/Debug_x64/lib_MD/${LIB_PREFIX}crashpad_util.${LIB_EXT} CACHE FILEPATH "Path to Crashpad util debug library") +if (WIN32 OR APPLE) + ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - set(CRASHPAD_HANDLER_EXE_PATH ${SOURCE_DIR}/out/Release_x64/crashpad_handler.exe CACHE FILEPATH "Path to the Crashpad handler executable") + set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE PATH "List of Crashpad include directories") + + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${LIB_RELEASE_PATH}/${LIB_PREFIX}crashpad_client.${LIB_EXT} CACHE FILEPATH "Path to Crashpad release library") + set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY_RELEASE ${LIB_RELEASE_PATH}/${LIB_PREFIX}base.${LIB_EXT} CACHE FILEPATH "Path to Crashpad base release library") + set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY_RELEASE ${LIB_RELEASE_PATH}/${LIB_PREFIX}crashpad_util.${LIB_EXT} CACHE FILEPATH "Path to Crashpad util release library") + + set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${LIB_RELEASE_PATH}/${LIB_PREFIX}crashpad_client.${LIB_EXT} CACHE FILEPATH "Path to Crashpad debug library") + set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY_DEBUG ${LIB_RELEASE_PATH}/${LIB_PREFIX}base.${LIB_EXT} CACHE FILEPATH "Path to Crashpad base debug library") + set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY_DEBUG ${LIB_RELEASE_PATH}/${LIB_PREFIX}crashpad_util.${LIB_EXT} CACHE FILEPATH "Path to Crashpad util debug library") + + set(CRASHPAD_HANDLER_EXE_PATH ${BIN_RELEASE_PATH}/crashpad_handler${BIN_EXT} CACHE FILEPATH "Path to the Crashpad handler binary") endif () # Hide this external target (for ide users) diff --git a/cmake/macros/AddCrashpad.cmake b/cmake/macros/AddCrashpad.cmake index 7d161be7f0..113ab53aae 100644 --- a/cmake/macros/AddCrashpad.cmake +++ b/cmake/macros/AddCrashpad.cmake @@ -23,7 +23,7 @@ macro(add_crashpad) set(CMAKE_BACKTRACE_TOKEN $ENV{CMAKE_BACKTRACE_TOKEN}) endif() - if (WIN32 AND USE_CRASHPAD) + if ((WIN32 OR APPLE) AND USE_CRASHPAD) get_property(CRASHPAD_CHECKED GLOBAL PROPERTY CHECKED_FOR_CRASHPAD_ONCE) if (NOT CRASHPAD_CHECKED) @@ -42,6 +42,10 @@ macro(add_crashpad) if (WIN32) set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "/ignore:4099") + elseif (APPLE) + find_library(Security Security) + target_link_libraries(${TARGET_NAME} ${Security}) + target_link_libraries(${TARGET_NAME} "-lbsm") endif() add_custom_command( diff --git a/interface/src/CrashHandler_Crashpad.cpp b/interface/src/CrashHandler_Crashpad.cpp index d11969491a..16b28a6ac3 100644 --- a/interface/src/CrashHandler_Crashpad.cpp +++ b/interface/src/CrashHandler_Crashpad.cpp @@ -39,6 +39,12 @@ CrashpadClient* client { nullptr }; std::mutex annotationMutex; crashpad::SimpleStringDictionary* crashpadAnnotations { nullptr }; +#if defined(Q_OS_WIN) +static const QString CRASHPAD_HANDLER_NAME { "crashpad_handler.exe" }; +#else +static const QString CRASHPAD_HANDLER_NAME { "crashpad_handler" }; +#endif + #ifdef Q_OS_WIN #include @@ -80,7 +86,6 @@ bool startCrashHandler(std::string appPath) { QDir(crashpadDbDir).mkpath(crashpadDbName); // Make sure the directory exists const auto crashpadDbPath = crashpadDbDir.toStdString() + "/" + crashpadDbName; - static const QString CRASHPAD_HANDLER_NAME { "crashpad_handler" }; // Locate Crashpad handler const QFileInfo interfaceBinary { QString::fromStdString(appPath) }; const QDir interfaceDir = interfaceBinary.dir(); @@ -105,7 +110,9 @@ bool startCrashHandler(std::string appPath) { // Enable automated uploads. database->GetSettings()->SetUploadsEnabled(true); +#ifdef Q_OS_WIN AddVectoredExceptionHandler(0, vectoredExceptionHandler); +#endif return client->StartHandler(handler, db, db, BACKTRACE_URL, annotations, arguments, true, true); } From 72dbbd816bec159a7f8bf40b37279241b0d4297d Mon Sep 17 00:00:00 2001 From: Clement Date: Thu, 5 Jul 2018 15:07:24 -0700 Subject: [PATCH 03/11] Fix cmake --- cmake/externals/crashpad/CMakeLists.txt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cmake/externals/crashpad/CMakeLists.txt b/cmake/externals/crashpad/CMakeLists.txt index bfddd5798f..a6d7e76127 100644 --- a/cmake/externals/crashpad/CMakeLists.txt +++ b/cmake/externals/crashpad/CMakeLists.txt @@ -1,8 +1,6 @@ include(ExternalProject) set(EXTERNAL_NAME crashpad) -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - if (WIN32) ExternalProject_Add( ${EXTERNAL_NAME} @@ -14,6 +12,9 @@ if (WIN32) LOG_DOWNLOAD 1 ) + string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) + ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) + set(BIN_RELEASE_PATH "${SOURCE_DIR}/out/Release_x64") set(BIN_EXT ".exe") set(LIB_RELEASE_PATH "${SOURCE_DIR}/out/Release_x64/lib_MD") @@ -31,6 +32,9 @@ elseif (APPLE) LOG_DOWNLOAD 1 ) + string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) + ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) + set(BIN_RELEASE_PATH "${SOURCE_DIR}/out/Release") set(BIN_EXT "") set(LIB_RELEASE_PATH "${SOURCE_DIR}/out/Release/lib") @@ -40,7 +44,6 @@ elseif (APPLE) endif () if (WIN32 OR APPLE) - ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE PATH "List of Crashpad include directories") @@ -48,9 +51,9 @@ if (WIN32 OR APPLE) set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY_RELEASE ${LIB_RELEASE_PATH}/${LIB_PREFIX}base.${LIB_EXT} CACHE FILEPATH "Path to Crashpad base release library") set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY_RELEASE ${LIB_RELEASE_PATH}/${LIB_PREFIX}crashpad_util.${LIB_EXT} CACHE FILEPATH "Path to Crashpad util release library") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${LIB_RELEASE_PATH}/${LIB_PREFIX}crashpad_client.${LIB_EXT} CACHE FILEPATH "Path to Crashpad debug library") - set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY_DEBUG ${LIB_RELEASE_PATH}/${LIB_PREFIX}base.${LIB_EXT} CACHE FILEPATH "Path to Crashpad base debug library") - set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY_DEBUG ${LIB_RELEASE_PATH}/${LIB_PREFIX}crashpad_util.${LIB_EXT} CACHE FILEPATH "Path to Crashpad util debug library") + set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${LIB_DEBUG_PATH}/${LIB_PREFIX}crashpad_client.${LIB_EXT} CACHE FILEPATH "Path to Crashpad debug library") + set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY_DEBUG ${LIB_DEBUG_PATH}/${LIB_PREFIX}base.${LIB_EXT} CACHE FILEPATH "Path to Crashpad base debug library") + set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY_DEBUG ${LIB_DEBUG_PATH}/${LIB_PREFIX}crashpad_util.${LIB_EXT} CACHE FILEPATH "Path to Crashpad util debug library") set(CRASHPAD_HANDLER_EXE_PATH ${BIN_RELEASE_PATH}/crashpad_handler${BIN_EXT} CACHE FILEPATH "Path to the Crashpad handler binary") endif () From 8c283806b3bb658ce29004f4355f5b29bf84b338 Mon Sep 17 00:00:00 2001 From: Clement Date: Thu, 5 Jul 2018 20:02:57 -0700 Subject: [PATCH 04/11] Fix Warnings --- interface/src/CrashHandler_Crashpad.cpp | 5 +++++ interface/src/workload/GameWorkloadRenderer.cpp | 3 +-- libraries/render-utils/src/Model.cpp | 3 +-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/interface/src/CrashHandler_Crashpad.cpp b/interface/src/CrashHandler_Crashpad.cpp index 16b28a6ac3..7729ced702 100644 --- a/interface/src/CrashHandler_Crashpad.cpp +++ b/interface/src/CrashHandler_Crashpad.cpp @@ -22,12 +22,17 @@ #include #include +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++14-extensions" + #include #include #include #include #include +#pragma clang diagnostic pop + #include using namespace crashpad; diff --git a/interface/src/workload/GameWorkloadRenderer.cpp b/interface/src/workload/GameWorkloadRenderer.cpp index 8cf19b56dd..a8b65492d3 100644 --- a/interface/src/workload/GameWorkloadRenderer.cpp +++ b/interface/src/workload/GameWorkloadRenderer.cpp @@ -40,7 +40,6 @@ void GameSpaceToRender::run(const workload::WorkloadContextPointer& runContext, auto visible = _showAllProxies || _showAllViews; auto showProxies = _showAllProxies; auto showViews = _showAllViews; - auto freezeViews = _freezeViews; render::Transaction transaction; auto scene = gameWorkloadContext->_scene; @@ -71,7 +70,7 @@ void GameSpaceToRender::run(const workload::WorkloadContextPointer& runContext, transaction.resetItem(_spaceRenderItemID, std::make_shared(renderItem)); } - transaction.updateItem(_spaceRenderItemID, [visible, showProxies, proxies, freezeViews, showViews, views](GameWorkloadRenderItem& item) { + transaction.updateItem(_spaceRenderItemID, [visible, showProxies, proxies, showViews, views](GameWorkloadRenderItem& item) { item.setVisible(visible); item.showProxies(showProxies); item.setAllProxies(proxies); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index dc65863c6e..41b95312f6 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -1575,13 +1575,12 @@ void Model::removeMaterial(graphics::MaterialPointer material, const std::string for (auto shapeID : shapeIDs) { if (shapeID < _modelMeshRenderItemIDs.size()) { auto itemID = _modelMeshRenderItemIDs[shapeID]; - bool visible = isVisible(); auto renderItemsKey = _renderItemKeyGlobalFlags; bool wireframe = isWireframe(); auto meshIndex = _modelMeshRenderItemShapes[shapeID].meshIndex; bool invalidatePayloadShapeKey = shouldInvalidatePayloadShapeKey(meshIndex); bool useDualQuaternionSkinning = _useDualQuaternionSkinning; - transaction.updateItem(itemID, [material, visible, renderItemsKey, + transaction.updateItem(itemID, [material, renderItemsKey, invalidatePayloadShapeKey, wireframe, useDualQuaternionSkinning](ModelMeshPartPayload& data) { data.removeMaterial(material); // if the material changed, we might need to update our item key or shape key From d9d72774d8580630c188cfbc0f2e94990e7ee94e Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 6 Jul 2018 15:51:40 -0700 Subject: [PATCH 05/11] Add exception for backtrace requests --- cmake/modules/MacOSXBundleInfo.plist.in | 20 ++++++++++++++++++++ interface/CMakeLists.txt | 2 ++ 2 files changed, 22 insertions(+) diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index a06fac092f..c772436df7 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -45,5 +45,25 @@ NSHighResolutionCapable + NSAppTransportSecurity + + NSExceptionDomains + + ${MACOSX_BUNDLE_BACKTRACE_DOMAIN_NAME} + + NSExceptionRequiresForwardSecrecy + + + NSIncludesSubdomains + + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + NSTemporaryExceptionMinimumTLSVersion + TLSv1.2 + + + diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index ea30909a08..f79c2c0d6f 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -127,6 +127,8 @@ if (APPLE) endif () endif () + set(MACOSX_BUNDLE_BACKTRACE_DOMAIN_NAME highfidelity.sp.backtrace.io) + # set how the icon shows up in the Info.plist file set(MACOSX_BUNDLE_ICON_FILE "${INTERFACE_ICON_FILENAME}") From 23e5dd0d2cfcd710328d7e9174730faf014c9390 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 6 Jul 2018 15:52:30 -0700 Subject: [PATCH 06/11] annotate with fingerprint immidiately --- interface/src/Application.cpp | 5 +---- interface/src/CrashHandler_Breakpad.cpp | 6 +++++- interface/src/CrashHandler_Crashpad.cpp | 22 +++++++++++++++------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index fb7d6a4a0f..41d29b8735 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1445,8 +1445,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // add firstRun flag from settings to launch event Setting::Handle firstRun { Settings::firstRun, true }; - QString machineFingerPrint = uuidStringWithoutCurlyBraces(FingerprintUtils::getMachineFingerprint()); - auto& userActivityLogger = UserActivityLogger::getInstance(); if (userActivityLogger.isEnabled()) { // sessionRunTime will be reset soon by loadSettings. Grab it now to get previous session value. @@ -1498,13 +1496,12 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo properties["first_run"] = firstRun.get(); // add the user's machine ID to the launch event + QString machineFingerPrint = uuidStringWithoutCurlyBraces(FingerprintUtils::getMachineFingerprint()); properties["machine_fingerprint"] = machineFingerPrint; userActivityLogger.logAction("launch", properties); } - setCrashAnnotation("machine_fingerprint", machineFingerPrint.toStdString()); - _entityEditSender.setMyAvatar(myAvatar.get()); // The entity octree will have to know about MyAvatar for the parentJointName import diff --git a/interface/src/CrashHandler_Breakpad.cpp b/interface/src/CrashHandler_Breakpad.cpp index c11e0e2a12..60e6ed0297 100644 --- a/interface/src/CrashHandler_Breakpad.cpp +++ b/interface/src/CrashHandler_Breakpad.cpp @@ -23,8 +23,9 @@ #include #include -#include #include +#include +#include google_breakpad::ExceptionHandler* gBreakpadHandler; @@ -60,6 +61,9 @@ bool startCrashHandler(std::string appPath) { annotations["build_number"] = BuildInfo::BUILD_NUMBER; annotations["build_type"] = BuildInfo::BUILD_TYPE_STRING; + auto machineFingerPrint = uuidStringWithoutCurlyBraces(FingerprintUtils::getMachineFingerprint()); + annotations["machine_fingerprint"] = machineFingerPrint.toStdString(); + flushAnnotations(); gBreakpadHandler = new google_breakpad::ExceptionHandler( diff --git a/interface/src/CrashHandler_Crashpad.cpp b/interface/src/CrashHandler_Crashpad.cpp index 7729ced702..abe0609263 100644 --- a/interface/src/CrashHandler_Crashpad.cpp +++ b/interface/src/CrashHandler_Crashpad.cpp @@ -34,6 +34,8 @@ #pragma clang diagnostic pop #include +#include +#include using namespace crashpad; @@ -83,6 +85,10 @@ bool startCrashHandler(std::string appPath) { annotations["build_number"] = BuildInfo::BUILD_NUMBER.toStdString(); annotations["build_type"] = BuildInfo::BUILD_TYPE_STRING.toStdString(); + auto machineFingerPrint = uuidStringWithoutCurlyBraces(FingerprintUtils::getMachineFingerprint()); + annotations["machine_fingerprint"] = machineFingerPrint.toStdString(); + + arguments.push_back("--no-rate-limit"); // Setup Crashpad DB directory @@ -123,14 +129,16 @@ bool startCrashHandler(std::string appPath) { } void setCrashAnnotation(std::string name, std::string value) { - std::lock_guard guard(annotationMutex); - if (!crashpadAnnotations) { - crashpadAnnotations = new crashpad::SimpleStringDictionary(); // don't free this, let it leak - crashpad::CrashpadInfo* crashpad_info = crashpad::CrashpadInfo::GetCrashpadInfo(); - crashpad_info->set_simple_annotations(crashpadAnnotations); + if (client) { + std::lock_guard guard(annotationMutex); + if (!crashpadAnnotations) { + crashpadAnnotations = new crashpad::SimpleStringDictionary(); // don't free this, let it leak + crashpad::CrashpadInfo* crashpad_info = crashpad::CrashpadInfo::GetCrashpadInfo(); + crashpad_info->set_simple_annotations(crashpadAnnotations); + } + std::replace(value.begin(), value.end(), ',', ';'); + crashpadAnnotations->SetKeyValue(name, value); } - std::replace(value.begin(), value.end(), ',', ';'); - crashpadAnnotations->SetKeyValue(name, value); } #endif From c02366a811a3423dcbde0345afb5b0e3c5acdae4 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 6 Jul 2018 16:14:58 -0700 Subject: [PATCH 07/11] Fix android build failure --- interface/src/CrashHandler_Breakpad.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/src/CrashHandler_Breakpad.cpp b/interface/src/CrashHandler_Breakpad.cpp index 60e6ed0297..c21bfa95e0 100644 --- a/interface/src/CrashHandler_Breakpad.cpp +++ b/interface/src/CrashHandler_Breakpad.cpp @@ -26,6 +26,7 @@ #include #include #include +#include google_breakpad::ExceptionHandler* gBreakpadHandler; @@ -62,7 +63,7 @@ bool startCrashHandler(std::string appPath) { annotations["build_type"] = BuildInfo::BUILD_TYPE_STRING; auto machineFingerPrint = uuidStringWithoutCurlyBraces(FingerprintUtils::getMachineFingerprint()); - annotations["machine_fingerprint"] = machineFingerPrint.toStdString(); + annotations["machine_fingerprint"] = machineFingerPrint; flushAnnotations(); From 1aeb66f70f30cbef660bc23ab0e4efee715ac004 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 6 Jul 2018 18:15:16 -0700 Subject: [PATCH 08/11] Fix Windows warning --- interface/src/CrashHandler_Crashpad.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/interface/src/CrashHandler_Crashpad.cpp b/interface/src/CrashHandler_Crashpad.cpp index abe0609263..f0b5d916b8 100644 --- a/interface/src/CrashHandler_Crashpad.cpp +++ b/interface/src/CrashHandler_Crashpad.cpp @@ -22,8 +22,11 @@ #include #include + +#if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc++14-extensions" +#endif #include #include @@ -31,7 +34,9 @@ #include #include +#if defined(__clang__) #pragma clang diagnostic pop +#endif #include #include From 107c5d74ac9a2f4dac676d34beb5af5640f66ec0 Mon Sep 17 00:00:00 2001 From: Clement Date: Mon, 9 Jul 2018 15:51:36 -0700 Subject: [PATCH 09/11] Generate debug symbols for Macos Release And then strip them from the binary --- cmake/compiler.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake index 968a65a6dd..de9f8a22fa 100644 --- a/cmake/compiler.cmake +++ b/cmake/compiler.cmake @@ -66,6 +66,13 @@ elseif ((NOT MSVC12) AND (NOT MSVC14)) endif() endif () +if (CMAKE_GENERATOR STREQUAL "Xcode") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") + set(CMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] "YES") + set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] "dwarf-with-dsym") + set(CMAKE_XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING[variant=Release] "YES") +endif() + if (APPLE) set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") From b5252da3f28347976003e9ff13255b8fceefdc4e Mon Sep 17 00:00:00 2001 From: Clement Date: Tue, 10 Jul 2018 16:53:11 -0700 Subject: [PATCH 10/11] CR --- cmake/externals/crashpad/CMakeLists.txt | 4 ++-- interface/src/CrashHandler_Crashpad.cpp | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cmake/externals/crashpad/CMakeLists.txt b/cmake/externals/crashpad/CMakeLists.txt index a6d7e76127..648ec83280 100644 --- a/cmake/externals/crashpad/CMakeLists.txt +++ b/cmake/externals/crashpad/CMakeLists.txt @@ -1,6 +1,8 @@ include(ExternalProject) set(EXTERNAL_NAME crashpad) +string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) + if (WIN32) ExternalProject_Add( ${EXTERNAL_NAME} @@ -12,7 +14,6 @@ if (WIN32) LOG_DOWNLOAD 1 ) - string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) set(BIN_RELEASE_PATH "${SOURCE_DIR}/out/Release_x64") @@ -32,7 +33,6 @@ elseif (APPLE) LOG_DOWNLOAD 1 ) - string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) set(BIN_RELEASE_PATH "${SOURCE_DIR}/out/Release") diff --git a/interface/src/CrashHandler_Crashpad.cpp b/interface/src/CrashHandler_Crashpad.cpp index f0b5d916b8..d1b5103990 100644 --- a/interface/src/CrashHandler_Crashpad.cpp +++ b/interface/src/CrashHandler_Crashpad.cpp @@ -107,7 +107,6 @@ bool startCrashHandler(std::string appPath) { const QDir interfaceDir = interfaceBinary.dir(); assert(interfaceDir.exists(CRASHPAD_HANDLER_NAME)); const std::string CRASHPAD_HANDLER_PATH = interfaceDir.filePath(CRASHPAD_HANDLER_NAME).toStdString(); - qDebug() << "CRASHPAD_HANDLER_PATH:" << CRASHPAD_HANDLER_PATH.c_str(); // Setup different file paths base::FilePath::StringType dbPath; From 85f56e2aa7936ee1aff4c64d574a03d39d1b1456 Mon Sep 17 00:00:00 2001 From: Clement Date: Tue, 10 Jul 2018 17:41:07 -0700 Subject: [PATCH 11/11] Remove Mac domain exception --- cmake/modules/MacOSXBundleInfo.plist.in | 20 -------------------- interface/CMakeLists.txt | 2 -- 2 files changed, 22 deletions(-) diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index c772436df7..a06fac092f 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -45,25 +45,5 @@ NSHighResolutionCapable - NSAppTransportSecurity - - NSExceptionDomains - - ${MACOSX_BUNDLE_BACKTRACE_DOMAIN_NAME} - - NSExceptionRequiresForwardSecrecy - - - NSIncludesSubdomains - - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - - NSTemporaryExceptionMinimumTLSVersion - TLSv1.2 - - - diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index f79c2c0d6f..ea30909a08 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -127,8 +127,6 @@ if (APPLE) endif () endif () - set(MACOSX_BUNDLE_BACKTRACE_DOMAIN_NAME highfidelity.sp.backtrace.io) - # set how the icon shows up in the Info.plist file set(MACOSX_BUNDLE_ICON_FILE "${INTERFACE_ICON_FILENAME}")