From 4ca0048ec9605fe5df00c2d8c00ba5422126f03d Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 7 Oct 2016 15:21:24 +1300 Subject: [PATCH 01/13] Display minimized users list when not logged in --- scripts/system/users.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/scripts/system/users.js b/scripts/system/users.js index 76722bd58d..454f8811a6 100644 --- a/scripts/system/users.js +++ b/scripts/system/users.js @@ -565,28 +565,28 @@ var usersWindow = (function () { function updateOverlayVisibility() { Overlays.editOverlay(windowBorder, { - visible: isLoggedIn && isVisible && isBorderVisible + visible: isVisible && isBorderVisible }); Overlays.editOverlay(windowPane, { - visible: isLoggedIn && isVisible + visible: isVisible }); Overlays.editOverlay(windowHeading, { - visible: isLoggedIn && isVisible + visible: isVisible }); Overlays.editOverlay(minimizeButton, { visible: isLoggedIn && isVisible }); Overlays.editOverlay(scrollbarBackground, { - visible: isLoggedIn && isVisible && isUsingScrollbars && !isMinimized + visible: isVisible && isUsingScrollbars && !isMinimized }); Overlays.editOverlay(scrollbarBar, { - visible: isLoggedIn && isVisible && isUsingScrollbars && !isMinimized + visible: isVisible && isUsingScrollbars && !isMinimized }); Overlays.editOverlay(friendsButton, { - visible: isLoggedIn && isVisible && !isMinimized + visible: isVisible && !isMinimized }); - displayControl.setVisible(isLoggedIn && isVisible && !isMinimized); - visibilityControl.setVisible(isLoggedIn && isVisible && !isMinimized); + displayControl.setVisible(isVisible && !isMinimized); + visibilityControl.setVisible(isVisible && !isMinimized); } function checkLoggedIn() { @@ -594,6 +594,13 @@ var usersWindow = (function () { isLoggedIn = Account.isLoggedIn(); if (isLoggedIn !== wasLoggedIn) { + if (wasLoggedIn) { + setMinimized(true); + calculateWindowHeight(); + updateOverlayPositions(); + updateUsersDisplay(); + } + updateOverlayVisibility(); } } From c637649805edf81f794dfd944a6936c3d1fa7ff8 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 7 Oct 2016 15:25:47 +1300 Subject: [PATCH 02/13] Make users online title say to login to view --- scripts/system/users.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/users.js b/scripts/system/users.js index 454f8811a6..9dc451a8ed 100644 --- a/scripts/system/users.js +++ b/scripts/system/users.js @@ -559,7 +559,7 @@ var usersWindow = (function () { }); Overlays.editOverlay(windowHeading, { - text: linesOfUsers.length > 0 ? "Users online" : "No users online" + text: isLoggedIn ? (linesOfUsers.length > 0 ? "Users online" : "No users online") : "Users online - log in to view" }); } @@ -1028,7 +1028,7 @@ var usersWindow = (function () { color: WINDOW_HEADING_COLOR, alpha: WINDOW_HEADING_ALPHA, backgroundAlpha: 0.0, - text: "No users online", + text: "Users online", font: WINDOW_FONT, visible: false }); From c76bb01359f45173d7415e8f9be63b052b7ddc34 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 7 Oct 2016 15:39:46 +1300 Subject: [PATCH 03/13] Make Interface title say if user not logged in --- interface/src/Application.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 610144b2cc..c7101f7434 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4568,11 +4568,15 @@ void Application::resetSensors(bool andReload) { void Application::updateWindowTitle() const { - QString buildVersion = " (build " + applicationVersion() + ")"; auto nodeList = DependencyManager::get(); + auto accountManager = DependencyManager::get(); - QString connectionStatus = nodeList->getDomainHandler().isConnected() ? "" : " (NOT CONNECTED) "; - QString username = DependencyManager::get()->getAccountInfo().getUsername(); + QString buildVersion = " (build " + applicationVersion() + ")"; + + QString loginStatus = accountManager->isLoggedIn() ? "" : " (NOT LOGGED IN)"; + + QString connectionStatus = nodeList->getDomainHandler().isConnected() ? "" : " (NOT CONNECTED)"; + QString username = accountManager->getAccountInfo().getUsername(); QString currentPlaceName = DependencyManager::get()->getHost(); if (currentPlaceName.isEmpty()) { @@ -4580,7 +4584,7 @@ void Application::updateWindowTitle() const { } QString title = QString() + (!username.isEmpty() ? username + " @ " : QString()) - + currentPlaceName + connectionStatus + buildVersion; + + currentPlaceName + connectionStatus + loginStatus + buildVersion; #ifndef WIN32 // crashes with vs2013/win32 From 52fbb654fae3f876a6a34d2880b9df3eb8f41b74 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 7 Oct 2016 15:43:54 +1300 Subject: [PATCH 04/13] Tweak location of users online minimize/maximize button --- scripts/system/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/users.js b/scripts/system/users.js index 9dc451a8ed..1e1a68fd9c 100644 --- a/scripts/system/users.js +++ b/scripts/system/users.js @@ -469,7 +469,7 @@ var usersWindow = (function () { Overlays.editOverlay(minimizeButton, { x: windowLeft + WINDOW_WIDTH - WINDOW_MARGIN / 2 - MIN_MAX_BUTTON_WIDTH, - y: windowTop + WINDOW_MARGIN / 2 + y: windowTop + WINDOW_MARGIN }); scrollbarBackgroundPosition.x = windowLeft + WINDOW_WIDTH - 0.5 * WINDOW_MARGIN - SCROLLBAR_BACKGROUND_WIDTH; From 7ab76984ad8f08900fd27c63f20f0c3e60dbca84 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 10 Oct 2016 16:54:08 -0700 Subject: [PATCH 05/13] Fix crash when switching to desktop mode from oculus HMD mode Removed internalPresent in oculus uncustomizeContext. It had no ill effects. --- plugins/oculus/src/OculusBaseDisplayPlugin.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp index 83da154b1f..377050064a 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp @@ -63,7 +63,6 @@ void OculusBaseDisplayPlugin::customizeContext() { void OculusBaseDisplayPlugin::uncustomizeContext() { Parent::uncustomizeContext(); - internalPresent(); } bool OculusBaseDisplayPlugin::internalActivate() { From 0951ca6bbe07e301b575389412a4dd0d4ca99c87 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 10 Oct 2016 18:43:24 -0700 Subject: [PATCH 06/13] Add check for bad texture resource slot --- libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp index f18962976c..ed0b9607e6 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp @@ -192,6 +192,11 @@ void GLBackend::resetResourceStage() { void GLBackend::do_setResourceTexture(const Batch& batch, size_t paramOffset) { GLuint slot = batch._params[paramOffset + 1]._uint; + if (slot >= (GLuint) MAX_NUM_RESOURCE_TEXTURES) { + // "GLBackend::do_setResourceTexture: Trying to set a resource Texture at slot #" + slot + " which doesn't exist. MaxNumResourceTextures = " + getMaxNumResourceTextures()); + return; + } + TexturePointer resourceTexture = batch._textures.get(batch._params[paramOffset + 0]._uint); if (!resourceTexture) { From ec5850b82bce689d482b3cacd956b512e2d6206e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 10 Oct 2016 17:59:01 -0700 Subject: [PATCH 07/13] emit ReceivedMessage progress signals more frequently for new timeout --- libraries/networking/src/ReceivedMessage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/ReceivedMessage.cpp b/libraries/networking/src/ReceivedMessage.cpp index cd3eb03473..e860fa0829 100644 --- a/libraries/networking/src/ReceivedMessage.cpp +++ b/libraries/networking/src/ReceivedMessage.cpp @@ -54,7 +54,7 @@ void ReceivedMessage::appendPacket(NLPacket& packet) { "We should not be appending to a complete message"); // Limit progress signal to every X packets - const int EMIT_PROGRESS_EVERY_X_PACKETS = 100; + const int EMIT_PROGRESS_EVERY_X_PACKETS = 5; ++_numPackets; From 826c2f1a9febf132c8dabcced0c67ce81e2ac860 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Oct 2016 09:53:02 -0700 Subject: [PATCH 08/13] push the AssetResourceRequest timeout to 15s --- libraries/networking/src/AssetResourceRequest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index f320f00dbb..3c53288dfb 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -39,7 +39,7 @@ bool AssetResourceRequest::urlIsAssetHash() const { void AssetResourceRequest::setupTimer() { Q_ASSERT(!_sendTimer); - static const int TIMEOUT_MS = 2000; + static const int TIMEOUT_MS = 15000; _sendTimer = new QTimer(this); connect(_sendTimer, &QTimer::timeout, this, &AssetResourceRequest::onTimeout); From 350977f03e77ca73043e24159d20893acd53de60 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Tue, 11 Oct 2016 10:49:43 -0700 Subject: [PATCH 09/13] Speculative fix for crash in AudioClient --- libraries/audio-client/src/AudioClient.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 6fbd93e386..5fced85d2d 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -867,6 +867,10 @@ void AudioClient::handleLocalEchoAndReverb(QByteArray& inputByteArray) { void AudioClient::handleAudioInput() { + if (!_inputDevice) { + return; + } + // input samples required to produce exactly NETWORK_FRAME_SAMPLES of output const int inputSamplesRequired = (_inputToNetworkResampler ? _inputToNetworkResampler->getMinInput(AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL) : From a0c27e2130e788f417013136a44c251c7c893da5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Oct 2016 13:17:57 -0700 Subject: [PATCH 10/13] remove timer forced timeouts in ARR, occasionally ouput DL progress --- .../networking/src/AssetResourceRequest.cpp | 72 ++++++------------- .../networking/src/AssetResourceRequest.h | 10 ++- libraries/networking/src/ReceivedMessage.cpp | 2 +- 3 files changed, 26 insertions(+), 58 deletions(-) diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index 3c53288dfb..2be4145cd0 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -11,10 +11,12 @@ #include "AssetResourceRequest.h" +#include + #include "AssetClient.h" #include "AssetUtils.h" #include "MappingRequest.h" -#include +#include "NetworkLogging.h" AssetResourceRequest::~AssetResourceRequest() { if (_assetMappingRequest) { @@ -24,10 +26,6 @@ AssetResourceRequest::~AssetResourceRequest() { if (_assetRequest) { _assetRequest->deleteLater(); } - - if (_sendTimer) { - cleanupTimer(); - } } bool AssetResourceRequest::urlIsAssetHash() const { @@ -37,24 +35,6 @@ bool AssetResourceRequest::urlIsAssetHash() const { return hashRegex.exactMatch(_url.toString()); } -void AssetResourceRequest::setupTimer() { - Q_ASSERT(!_sendTimer); - static const int TIMEOUT_MS = 15000; - - _sendTimer = new QTimer(this); - connect(_sendTimer, &QTimer::timeout, this, &AssetResourceRequest::onTimeout); - - _sendTimer->setSingleShot(true); - _sendTimer->start(TIMEOUT_MS); -} - -void AssetResourceRequest::cleanupTimer() { - Q_ASSERT(_sendTimer); - disconnect(_sendTimer, 0, this, 0); - _sendTimer->deleteLater(); - _sendTimer = nullptr; -} - void AssetResourceRequest::doSend() { // We'll either have a hash or an ATP path to a file (that maps to a hash) if (urlIsAssetHash()) { @@ -81,8 +61,6 @@ void AssetResourceRequest::requestMappingForPath(const AssetPath& path) { Q_ASSERT(_state == InProgress); Q_ASSERT(request == _assetMappingRequest); - cleanupTimer(); - switch (request->getError()) { case MappingRequest::NoError: // we have no error, we should have a resulting hash - use that to send of a request for that asset @@ -118,7 +96,6 @@ void AssetResourceRequest::requestMappingForPath(const AssetPath& path) { _assetMappingRequest = nullptr; }); - setupTimer(); _assetMappingRequest->start(); } @@ -133,8 +110,6 @@ void AssetResourceRequest::requestHash(const AssetHash& hash) { Q_ASSERT(_state == InProgress); Q_ASSERT(req == _assetRequest); Q_ASSERT(req->getState() == AssetRequest::Finished); - - cleanupTimer(); switch (req->getError()) { case AssetRequest::Error::NoError: @@ -162,35 +137,30 @@ void AssetResourceRequest::requestHash(const AssetHash& hash) { _assetRequest = nullptr; }); - setupTimer(); _assetRequest->start(); } void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { Q_ASSERT(_state == InProgress); - // We've received data, so reset the timer - _sendTimer->start(); - emit progress(bytesReceived, bytesTotal); + + static const int DOWNLOAD_PROGRESS_LOG_INTERVAL_SECONDS = 5; + auto now = p_high_resolution_clock::now(); + + // if we haven't received the full asset check if it is time to output progress to log + // we do so every X seconds to assist with ATP download tracking + + if (bytesReceived != bytesTotal + && now - _lastProgressDebug > std::chrono::seconds(DOWNLOAD_PROGRESS_LOG_INTERVAL_SECONDS)) { + + int percentage = roundf((float) bytesReceived / (float) bytesTotal * 100.0f); + + qCDebug(networking).nospace() << "Progress for " << _url.path() << " - " + << bytesReceived << " bytes of " << bytesTotal << " - " << percentage << "%"; + + _lastProgressDebug = now; + } + } -void AssetResourceRequest::onTimeout() { - if (_state == InProgress) { - qWarning() << "Asset request timed out: " << _url; - if (_assetRequest) { - disconnect(_assetRequest, 0, this, 0); - _assetRequest->deleteLater(); - _assetRequest = nullptr; - } - if (_assetMappingRequest) { - disconnect(_assetMappingRequest, 0, this, 0); - _assetMappingRequest->deleteLater(); - _assetMappingRequest = nullptr; - } - _result = Timeout; - _state = Finished; - emit finished(); - } - cleanupTimer(); -} diff --git a/libraries/networking/src/AssetResourceRequest.h b/libraries/networking/src/AssetResourceRequest.h index c462fbc3f8..93f76cb154 100644 --- a/libraries/networking/src/AssetResourceRequest.h +++ b/libraries/networking/src/AssetResourceRequest.h @@ -14,6 +14,8 @@ #include +#include + #include "AssetRequest.h" #include "ResourceRequest.h" @@ -28,21 +30,17 @@ protected: private slots: void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); - void onTimeout(); private: - void setupTimer(); - void cleanupTimer(); - bool urlIsAssetHash() const; void requestMappingForPath(const AssetPath& path); void requestHash(const AssetHash& hash); - QTimer* _sendTimer { nullptr }; - GetMappingRequest* _assetMappingRequest { nullptr }; AssetRequest* _assetRequest { nullptr }; + + p_high_resolution_clock::time_point _lastProgressDebug; }; #endif diff --git a/libraries/networking/src/ReceivedMessage.cpp b/libraries/networking/src/ReceivedMessage.cpp index e860fa0829..150ae5c91b 100644 --- a/libraries/networking/src/ReceivedMessage.cpp +++ b/libraries/networking/src/ReceivedMessage.cpp @@ -54,7 +54,7 @@ void ReceivedMessage::appendPacket(NLPacket& packet) { "We should not be appending to a complete message"); // Limit progress signal to every X packets - const int EMIT_PROGRESS_EVERY_X_PACKETS = 5; + const int EMIT_PROGRESS_EVERY_X_PACKETS = 50; ++_numPackets; From 07d0a038a56450188077874160cba46a163aae90 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Oct 2016 13:21:15 -0700 Subject: [PATCH 11/13] set the initial last progress debug 5s back --- libraries/networking/src/AssetResourceRequest.cpp | 9 ++++++++- libraries/networking/src/AssetResourceRequest.h | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index 2be4145cd0..f3e5f33507 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -18,6 +18,14 @@ #include "MappingRequest.h" #include "NetworkLogging.h" +static const int DOWNLOAD_PROGRESS_LOG_INTERVAL_SECONDS = 5; + +AssetResourceRequest::AssetResourceRequest(const QUrl& url) : + ResourceRequest(url) +{ + _lastProgressDebug = p_high_resolution_clock::now() - std::chrono::seconds(DOWNLOAD_PROGRESS_LOG_INTERVAL_SECONDS); +} + AssetResourceRequest::~AssetResourceRequest() { if (_assetMappingRequest) { _assetMappingRequest->deleteLater(); @@ -145,7 +153,6 @@ void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytes emit progress(bytesReceived, bytesTotal); - static const int DOWNLOAD_PROGRESS_LOG_INTERVAL_SECONDS = 5; auto now = p_high_resolution_clock::now(); // if we haven't received the full asset check if it is time to output progress to log diff --git a/libraries/networking/src/AssetResourceRequest.h b/libraries/networking/src/AssetResourceRequest.h index 93f76cb154..3f110fae17 100644 --- a/libraries/networking/src/AssetResourceRequest.h +++ b/libraries/networking/src/AssetResourceRequest.h @@ -22,7 +22,7 @@ class AssetResourceRequest : public ResourceRequest { Q_OBJECT public: - AssetResourceRequest(const QUrl& url) : ResourceRequest(url) { } + AssetResourceRequest(const QUrl& url); virtual ~AssetResourceRequest() override; protected: From 20ea7e6c987b7466e7d9ce275303b09e22c0eee3 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Oct 2016 13:21:53 -0700 Subject: [PATCH 12/13] change QLoggingCategory include casing --- libraries/networking/src/AssetResourceRequest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index f3e5f33507..731803abcd 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -11,7 +11,7 @@ #include "AssetResourceRequest.h" -#include +#include #include "AssetClient.h" #include "AssetUtils.h" From 504e92607a71736f36edf48b3c3825eb727fbf85 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Oct 2016 13:23:52 -0700 Subject: [PATCH 13/13] change format of debug message --- libraries/networking/src/AssetResourceRequest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index 731803abcd..11ced60ec4 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -164,7 +164,7 @@ void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytes int percentage = roundf((float) bytesReceived / (float) bytesTotal * 100.0f); qCDebug(networking).nospace() << "Progress for " << _url.path() << " - " - << bytesReceived << " bytes of " << bytesTotal << " - " << percentage << "%"; + << bytesReceived << " of " << bytesTotal << " bytes - " << percentage << "%"; _lastProgressDebug = now; }