[host] app: calculate and report the required IVSHMEM size

One of the most common issues reported in the support channels is the
IVSHMEM size being too small. This change adds a calculation to
determine an optimal size and uses the new `os_showMessage` platform
method to display a message box to the user with the error.
This commit is contained in:
Geoffrey McRae 2021-06-04 12:31:15 +10:00
parent 75a9e38e3a
commit fb1b30b728
3 changed files with 18 additions and 1 deletions

View File

@ -40,5 +40,6 @@ void app_quit();
// these must be implemented for each OS // these must be implemented for each OS
const char * os_getExecutable(); const char * os_getExecutable();
const char * os_getDataPath(); const char * os_getDataPath();
void os_showMessage(const char * caption, const char * msg);
bool os_blockScreensaver(); bool os_blockScreensaver();

View File

@ -537,3 +537,8 @@ bool os_blockScreensaver()
} }
return lastResult; return lastResult;
} }
void os_showMessage(const char * caption, const char * msg)
{
MessageBoxA(NULL, msg, caption, MB_OK | MB_ICONINFORMATION);
}

View File

@ -30,6 +30,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include "common/ivshmem.h" #include "common/ivshmem.h"
#include "common/sysinfo.h" #include "common/sysinfo.h"
#include "common/time.h" #include "common/time.h"
#include "common/stringutils.h"
#include <lgmp/host.h> #include <lgmp/host.h>
@ -38,6 +39,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <math.h>
#define CONFIG_FILE "looking-glass-host.ini" #define CONFIG_FILE "looking-glass-host.ini"
#define POINTER_SHAPE_BUFFERS 3 #define POINTER_SHAPE_BUFFERS 3
@ -295,7 +297,16 @@ static bool captureStart(void)
const unsigned int maxFrameSize = app.iface->getMaxFrameSize(); const unsigned int maxFrameSize = app.iface->getMaxFrameSize();
if (maxFrameSize > app.maxFrameSize) if (maxFrameSize > app.maxFrameSize)
{ {
DEBUG_ERROR("Maximum frame size of %d bytes excceds maximum space available", maxFrameSize); DEBUG_ERROR("Maximum frame size of %d bytes exceeds maximum space available", maxFrameSize);
const float needed = ((maxFrameSize * 2) / 1048576.0f) + 10.0f;
const int size = (int)powf(2.0f, ceilf(logf(needed) / logf(2.0f)));
char * msg;
alloc_sprintf(&msg, "IVSHMEM size too small, increase to %d MiB", size);
os_showMessage("Looking Glass Error", msg);
free(msg);
return false; return false;
} }
DEBUG_INFO("Capture Size : %u MiB (%u)", maxFrameSize / 1048576, maxFrameSize); DEBUG_INFO("Capture Size : %u MiB (%u)", maxFrameSize / 1048576, maxFrameSize);