From 85c9f4d95ffd28db06da307ce7cd91f05c5aa789 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 26 Sep 2019 12:10:59 -0700 Subject: [PATCH 1/9] Use the FCDEBUG mechanism to throttle udt::Socket log-spam --- libraries/networking/src/udt/Socket.cpp | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index 20cb30dbd8..ff64389a25 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -239,11 +239,21 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc int pending = _udpSocket.bytesToWrite(); if (bytesWritten < 0 || pending) { int wsaError = 0; + static std::atomic previousWsaError = 0; #ifdef WIN32 wsaError = WSAGetLastError(); #endif - qCDebug(networking) << "udt::writeDatagram (" << _udpSocket.state() << sockAddr << ") error - " << wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")" + QString errorString; + QDebug(&errorString) << "udt::writeDatagram (" << _udpSocket.state() << sockAddr << ") error - " + << wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")" << (pending ? "pending bytes:" : "pending:") << pending; + + if (previousWsaError.exchange(wsaError) != wsaError) { + qCDebug(networking).noquote() << errorString; + } else { + HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); + } + #ifdef DEBUG_EVENT_QUEUE int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr; @@ -525,12 +535,22 @@ std::vector Socket::getConnectionSockAddrs() { void Socket::handleSocketError(QAbstractSocket::SocketError socketError) { int wsaError = 0; + static std::atomic previousWsaError = 0; #ifdef WIN32 wsaError = WSAGetLastError(); #endif int pending = _udpSocket.bytesToWrite(); - qCDebug(networking) << "udt::Socket (" << _udpSocket.state() << ") error - " << wsaError << socketError << "(" << _udpSocket.errorString() << ")" - << (pending ? "pending bytes:" : "pending:") << pending; + QString errorString; + QDebug(&errorString) << "udt::Socket (" << _udpSocket.state() << ") error - " << wsaError << socketError << + "(" << _udpSocket.errorString() << ")" << (pending ? "pending bytes:" : "pending:") + << pending; + + if (previousWsaError.exchange(wsaError) != wsaError) { + qCDebug(networking).noquote() << errorString; + } else { + HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); + } + #ifdef DEBUG_EVENT_QUEUE int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); qCDebug(networking) << "Networking queue size - " << nodeListQueueSize; From 1b064a0ebebbcaf370d314a851528da797429cba Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Thu, 26 Sep 2019 14:29:01 -0700 Subject: [PATCH 2/9] Fix Q key on first person cam. Let camera control flying Y axis --- interface/resources/controllers/keyboardMouse.json | 2 +- interface/src/avatar/MyAvatar.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/interface/resources/controllers/keyboardMouse.json b/interface/resources/controllers/keyboardMouse.json index ff02142891..0e80709f9c 100644 --- a/interface/resources/controllers/keyboardMouse.json +++ b/interface/resources/controllers/keyboardMouse.json @@ -4,7 +4,7 @@ { "from": "Keyboard.A", "when": ["Keyboard.RightMouseButton", "!Keyboard.Control"], "to": "Actions.LATERAL_LEFT" }, { "from": "Keyboard.D", "when": ["Keyboard.RightMouseButton", "!Keyboard.Control"], "to": "Actions.LATERAL_RIGHT" }, { "from": "Keyboard.E", "when": ["!Application.CameraSelfie", "!Application.CameraLookAt", "!Keyboard.Control"], "to": "Actions.LATERAL_RIGHT" }, - { "from": "Keyboard.Q", "when": ["!Application.CameraSelfie"," !Application.CameraLookAt", "!Keyboard.Control"], "to": "Actions.LATERAL_LEFT" }, + { "from": "Keyboard.Q", "when": ["!Application.CameraSelfie", "!Application.CameraLookAt", "!Keyboard.Control"], "to": "Actions.LATERAL_LEFT" }, { "from": "Keyboard.T", "when": "!Keyboard.Control", "to": "Actions.TogglePushToTalk" }, { "comment" : "Mouse turn need to be small continuous increments", diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 6f16e6e1bf..518aa4fe2c 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2709,7 +2709,11 @@ void MyAvatar::updateMotors() { if (_motionBehaviors & AVATAR_MOTION_ACTION_MOTOR_ENABLED) { if (_characterController.getState() == CharacterController::State::Hover || _characterController.computeCollisionMask() == BULLET_COLLISION_MASK_COLLISIONLESS) { - motorRotation = getMyHead()->getHeadOrientation(); + if (qApp->getCamera().getMode() == CAMERA_MODE_LOOK_AT || qApp->getCamera().getMode() == CAMERA_MODE_SELFIE) { + motorRotation = getLookAtRotation(); + } else { + motorRotation = getMyHead()->getHeadOrientation(); + } } else { // non-hovering = walking: follow camera twist about vertical but not lift // we decompose camera's rotation and store the twist part in motorRotation @@ -3632,8 +3636,7 @@ void MyAvatar::updateOrientation(float deltaTime) { glm::vec3 targetPoint = eyesPosition + glm::normalize(cameraVector); const float LOOKAT_MIX_ALPHA = 0.25f; - - if (getDriveKey(TRANSLATE_Y) == 0.0f) { + if (!isFlying() || !hasDriveInput()) { // Approximate the head's look at vector to the camera look at vector with some delay. float mixAlpha = LOOKAT_MIX_ALPHA * timeScale; if (mixAlpha > 1.0f) { From ea23a82f3338cc6565630091f813cf9ddcfe7c1e Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Thu, 26 Sep 2019 15:14:47 -0700 Subject: [PATCH 3/9] Make mouse pitch less sensitive --- interface/resources/controllers/keyboardMouse.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/controllers/keyboardMouse.json b/interface/resources/controllers/keyboardMouse.json index 0e80709f9c..1f7ea097da 100644 --- a/interface/resources/controllers/keyboardMouse.json +++ b/interface/resources/controllers/keyboardMouse.json @@ -198,7 +198,7 @@ "to": "Actions.DeltaPitch", "filters": [ - { "type": "scale", "scale": 0.3 } + { "type": "scale", "scale": 0.2 } ] }, @@ -207,7 +207,7 @@ "to": "Actions.DeltaPitch", "filters": [ - { "type": "scale", "scale": 0.3 } + { "type": "scale", "scale": 0.2 } ] }, From 97dab24a698195262b988fe9458369f962bac8bc Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Thu, 26 Sep 2019 15:45:26 -0700 Subject: [PATCH 4/9] Fix Android clang warnings due to unused compiler flags --- cmake/macros/SetupHifiLibrary.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/macros/SetupHifiLibrary.cmake b/cmake/macros/SetupHifiLibrary.cmake index 04687e2c84..108786a651 100644 --- a/cmake/macros/SetupHifiLibrary.cmake +++ b/cmake/macros/SetupHifiLibrary.cmake @@ -20,7 +20,7 @@ macro(SETUP_HIFI_LIBRARY) foreach(SRC ${AVX_SRCS}) if (WIN32) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX) - elseif (APPLE OR UNIX) + elseif (APPLE OR (UNIX AND NOT ANDROID)) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS -mavx) endif() endforeach() @@ -30,7 +30,7 @@ macro(SETUP_HIFI_LIBRARY) foreach(SRC ${AVX2_SRCS}) if (WIN32) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX2) - elseif (APPLE OR UNIX) + elseif (APPLE OR (UNIX AND NOT ANDROID)) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS "-mavx2 -mfma") endif() endforeach() @@ -44,7 +44,7 @@ macro(SETUP_HIFI_LIBRARY) if (COMPILER_SUPPORTS_AVX512) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX512) endif() - elseif (APPLE OR UNIX) + elseif (APPLE OR (UNIX AND NOT ANDROID)) check_cxx_compiler_flag("-mavx512f" COMPILER_SUPPORTS_AVX512) if (COMPILER_SUPPORTS_AVX512) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS -mavx512f) From f17a1c17f300d8deb4c163de5271e3f1d64fd81f Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 26 Sep 2019 15:46:11 -0700 Subject: [PATCH 5/9] Only print Qt event-queue size on change of error code --- libraries/networking/src/udt/Socket.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index ff64389a25..fb33b04838 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -250,14 +250,13 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc if (previousWsaError.exchange(wsaError) != wsaError) { qCDebug(networking).noquote() << errorString; +#ifdef DEBUG_EVENT_QUEUE + int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); + qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr; +#endif // DEBUG_EVENT_QUEUE } else { HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); } - -#ifdef DEBUG_EVENT_QUEUE - int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); - qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr; -#endif // DEBUG_EVENT_QUEUE } return bytesWritten; @@ -547,14 +546,13 @@ void Socket::handleSocketError(QAbstractSocket::SocketError socketError) { if (previousWsaError.exchange(wsaError) != wsaError) { qCDebug(networking).noquote() << errorString; +#ifdef DEBUG_EVENT_QUEUE + int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); + qCDebug(networking) << "Networking queue size - " << nodeListQueueSize; +#endif // DEBUG_EVENT_QUEUE } else { HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); } - -#ifdef DEBUG_EVENT_QUEUE - int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); - qCDebug(networking) << "Networking queue size - " << nodeListQueueSize; -#endif // DEBUG_EVENT_QUEUE } void Socket::handleStateChanged(QAbstractSocket::SocketState socketState) { From 93a1cbdcf97650739cf85884e4ec0a51d95bc851 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 26 Sep 2019 16:45:29 -0700 Subject: [PATCH 6/9] Use direct initialization instead of copy initialization for atomics --- libraries/networking/src/udt/Socket.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index fb33b04838..3e1a56de51 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -239,7 +239,7 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc int pending = _udpSocket.bytesToWrite(); if (bytesWritten < 0 || pending) { int wsaError = 0; - static std::atomic previousWsaError = 0; + static std::atomic previousWsaError (0); #ifdef WIN32 wsaError = WSAGetLastError(); #endif @@ -534,7 +534,7 @@ std::vector Socket::getConnectionSockAddrs() { void Socket::handleSocketError(QAbstractSocket::SocketError socketError) { int wsaError = 0; - static std::atomic previousWsaError = 0; + static std::atomic previousWsaError(0); #ifdef WIN32 wsaError = WSAGetLastError(); #endif From cd6d9b57c47181bc361c8ceca5ed7f1a2f795b96 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 28 Sep 2019 11:26:38 +1200 Subject: [PATCH 7/9] Fix Blocks script displaying a blank page --- .../resources/qml/hifi/tablet/+webengine/BlocksWebView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/+webengine/BlocksWebView.qml b/interface/resources/qml/hifi/tablet/+webengine/BlocksWebView.qml index 050515da37..e600924b42 100644 --- a/interface/resources/qml/hifi/tablet/+webengine/BlocksWebView.qml +++ b/interface/resources/qml/hifi/tablet/+webengine/BlocksWebView.qml @@ -1,6 +1,6 @@ import QtQuick 2.0 import QtWebEngine 1.5 -import "../../controls" as Controls +import "../../../controls" as Controls Controls.TabletWebView { profile: WebEngineProfile { httpUserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36"} From 07d8013e21893af1bf656eac7812d30f73daa69e Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 28 Sep 2019 11:27:20 +1200 Subject: [PATCH 8/9] Don't display "CLOSE" and "BACK" buttons at top of Blocks screen --- unpublishedScripts/marketplace/blocks/blocksApp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/marketplace/blocks/blocksApp.js b/unpublishedScripts/marketplace/blocks/blocksApp.js index 813a77c74a..9c10ba8197 100644 --- a/unpublishedScripts/marketplace/blocks/blocksApp.js +++ b/unpublishedScripts/marketplace/blocks/blocksApp.js @@ -35,7 +35,7 @@ function onClicked() { if (!shown) { - tablet.gotoWebScreen(APP_URL, "", true); + tablet.gotoWebScreen(APP_URL, ""); } else { tablet.gotoHomeScreen(); } From 3d667b4a21ec926f6982aaefe8af8781e579c32b Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 28 Sep 2019 11:27:31 +1200 Subject: [PATCH 9/9] Deprecate tablet.gotoWebScreen()'s loadOtherBase parameter --- libraries/ui/src/ui/TabletScriptingInterface.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.h b/libraries/ui/src/ui/TabletScriptingInterface.h index bae5eda29e..58596d6d92 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.h +++ b/libraries/ui/src/ui/TabletScriptingInterface.h @@ -279,6 +279,7 @@ public: * @param {string} [injectedJavaScriptUrl=""] - The URL of JavaScript to inject into the web page. * @param {boolean} [loadOtherBase=false] - If true, the web page or app is displayed in a frame with "back" * and "close" buttons. + *

Deprecated: This parameter is deprecated and will be removed.

*/ Q_INVOKABLE void gotoWebScreen(const QString& url); Q_INVOKABLE void gotoWebScreen(const QString& url, const QString& injectedJavaScriptUrl, bool loadOtherBase = false);