Performance Optimizations (#450)

* Make derived transform classes less involved in simulation state
* Add performance measurements in openspaceengine
* Avoid redundant transformation lookups
* Fix bug causing redundant calls to GPULayerManager::bind
* Move water reflectance to alpha component of normal buffer. Remove otherData buffer.
This commit is contained in:
Emil Axelsson
2018-01-08 09:43:41 +01:00
committed by GitHub
parent 237affa80d
commit 4c2f72226f
57 changed files with 296 additions and 205 deletions

View File

@@ -41,6 +41,9 @@
#include <openspace/interaction/luaconsole.h>
#include <openspace/network/networkengine.h>
#include <openspace/network/parallelconnection.h>
#include <openspace/performance/performancemeasurement.h>
#include <openspace/rendering/dashboard.h>
#include <openspace/rendering/dashboarditem.h>
#include <openspace/rendering/loadingscreen.h>
@@ -1209,6 +1212,15 @@ void OpenSpaceEngine::initializeGL() {
void OpenSpaceEngine::preSynchronization() {
LTRACE("OpenSpaceEngine::preSynchronization(begin)");
std::unique_ptr<performance::PerformanceMeasurement> perf;
if (OsEng.renderEngine().performanceManager()) {
perf = std::make_unique<performance::PerformanceMeasurement>(
"OpenSpaceEngine::preSynchronization",
OsEng.renderEngine().performanceManager()
);
}
FileSys.triggerFilesystemEvents();
if (_hasScheduledAssetLoading) {
@@ -1258,6 +1270,14 @@ void OpenSpaceEngine::preSynchronization() {
void OpenSpaceEngine::postSynchronizationPreDraw() {
LTRACE("OpenSpaceEngine::postSynchronizationPreDraw(begin)");
std::unique_ptr<performance::PerformanceMeasurement> perf;
if (OsEng.renderEngine().performanceManager()) {
perf = std::make_unique<performance::PerformanceMeasurement>(
"OpenSpaceEngine::postSynchronizationPreDraw",
OsEng.renderEngine().performanceManager()
);
}
bool master = _windowWrapper->isMaster();
_syncEngine->postSynchronization(SyncEngine::IsMaster(master));
@@ -1315,6 +1335,15 @@ void OpenSpaceEngine::render(const glm::mat4& sceneMatrix,
const glm::mat4& projectionMatrix)
{
LTRACE("OpenSpaceEngine::render(begin)");
std::unique_ptr<performance::PerformanceMeasurement> perf;
if (OsEng.renderEngine().performanceManager()) {
perf = std::make_unique<performance::PerformanceMeasurement>(
"OpenSpaceEngine::render",
OsEng.renderEngine().performanceManager()
);
}
OnExit([] {
LTRACE("OpenSpaceEngine::render(end)");
});
@@ -1340,6 +1369,14 @@ void OpenSpaceEngine::drawOverlays() {
LTRACE("OpenSpaceEngine::drawOverlays(end)");
});
std::unique_ptr<performance::PerformanceMeasurement> perf;
if (OsEng.renderEngine().performanceManager()) {
perf = std::make_unique<performance::PerformanceMeasurement>(
"OpenSpaceEngine::drawOverlays",
OsEng.renderEngine().performanceManager()
);
}
const bool isGuiWindow =
_windowWrapper->hasGuiWindow() ? _windowWrapper->isGuiWindow() : true;
@@ -1368,6 +1405,14 @@ void OpenSpaceEngine::drawOverlays() {
void OpenSpaceEngine::postDraw() {
LTRACE("OpenSpaceEngine::postDraw(begin)");
std::unique_ptr<performance::PerformanceMeasurement> perf;
if (OsEng.renderEngine().performanceManager()) {
perf = std::make_unique<performance::PerformanceMeasurement>(
"OpenSpaceEngine::postDraw",
OsEng.renderEngine().performanceManager()
);
}
_renderEngine->postDraw();
for (const auto& func : _moduleCallbacks.postDraw) {