]> git.sesse.net Git - nageru/blobdiff - main.cpp
Write 1.4.0 changelog.
[nageru] / main.cpp
index a0d8f669ca083085deaca67119451303cd7226a4..e2d2cec4ee42c46f12527c9f29be3972302cb0ea 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -4,13 +4,14 @@ extern "C" {
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <epoxy/gl.h>
-
+#include <sys/mman.h>
+#include <epoxy/gl.h>  // IWYU pragma: keep
 #include <QApplication>
 #include <QCoreApplication>
 #include <QGL>
 #include <QSize>
 #include <QSurfaceFormat>
+#include <string>
 
 #include "context.h"
 #include "flags.h"
@@ -40,6 +41,11 @@ int main(int argc, char *argv[])
        fmt.setProfile(QSurfaceFormat::CoreProfile);
        fmt.setMajorVersion(3);
        fmt.setMinorVersion(1);
+
+       // Turn off vsync, since Qt generally gives us at most frame rate
+       // (display frequency) / (number of QGLWidgets active).
+       fmt.setSwapInterval(0);
+
        QSurfaceFormat::setDefaultFormat(fmt);
 
        QGLFormat::setDefaultFormat(QGLFormat::fromSurfaceFormat(fmt));
@@ -47,11 +53,25 @@ int main(int argc, char *argv[])
        global_share_widget = new QGLWidget();
 
        MainWindow mainWindow;
-       mainWindow.resize(QSize(1500, 810));
+       mainWindow.resize(QSize(1500, 850));
        mainWindow.show();
 
        app.installEventFilter(&mainWindow);  // For white balance color picking.
 
+       // Even on an otherwise unloaded system, it would seem writing the recording
+       // to disk (potentially terabytes of data as time goes by) causes Nageru
+       // to be pushed out of RAM. If we have the right privileges, simply lock us
+       // into memory for better realtime behavior.
+       if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) {
+               perror("mlockall()");
+               fprintf(stderr, "Failed to lock Nageru into RAM. You probably want to\n");
+               fprintf(stderr, "increase \"memlock\" for your user in limits.conf\n");
+               fprintf(stderr, "for better realtime behavior.\n");
+               uses_mlock = false;
+       } else {
+               uses_mlock = true;
+       }
+
        int rc = app.exec();
        global_mixer->quit();
        mainWindow.mixer_shutting_down();