Skip to content

Commit

Permalink
StatusBox: Split GPU memory details over multiple lines
Browse files Browse the repository at this point in the history
- with the addition of dedicated memory, the info is too long for some
themes, so split out and only update the used/free figures
  • Loading branch information
mark-kendall committed Dec 21, 2020
1 parent 136aee1 commit 001711f
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 25 deletions.
19 changes: 9 additions & 10 deletions mythtv/libs/libmythui/opengl/mythrenderopengl.cpp
Expand Up @@ -1530,21 +1530,20 @@ void MythRenderOpenGL::SetMatrixView(void)
m_projection.ortho(m_viewport);
}

bool MythRenderOpenGL::GetGPUMemory(int &Available, int &Dedicated, int &Total)
std::tuple<int, int, int> MythRenderOpenGL::GetGPUMemory()
{
OpenGLLocker locker(this);
if (m_extraFeaturesUsed & kGLNVMemory)
{
GLint kb = 0;
glGetIntegerv(GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &kb);
Total = kb / 1024;
glGetIntegerv(GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &kb);
Dedicated = kb / 1024;
glGetIntegerv(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &kb);
Available = kb / 1024;
return true;
GLint total = 0;
GLint dedicated = 0;
GLint available = 0;
glGetIntegerv(GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &total);
glGetIntegerv(GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &dedicated);
glGetIntegerv(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &available);
return { total / 1024, dedicated / 1024, available / 1024 };
}
return false;
return { 0, 0, 0 };
}

/*! \brief Check for 16bit framebufferobject support
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythui/opengl/mythrenderopengl.h
Expand Up @@ -165,7 +165,7 @@ class MUI_PUBLIC MythRenderOpenGL : public QOpenGLContext, public QOpenGLFunctio
const QBrush &FillBrush, const QPen &LinePen, int Alpha);
void ClearRect(QOpenGLFramebufferObject *Target, QRect Area, int Color);

bool GetGPUMemory(int &Available, int& Dedicated, int &Total);
std::tuple<int,int,int> GetGPUMemory();

public slots:
void MessageLogged (const QOpenGLDebugMessage &Message);
Expand Down
51 changes: 37 additions & 14 deletions mythtv/programs/mythfrontend/statusbox.cpp
Expand Up @@ -1567,25 +1567,48 @@ void StatusBox::doDisplayStatus()
MythRenderOpenGL* gl = MythRenderOpenGL::GetOpenGLRender();
if (gl && (gl->GetExtraFeatures() & kGLNVMemory))
{
auto UpdateGPUMem = [](StatusBoxItem *Item)
auto GetGPUMem = []()
{
int dedicated = 0;
int total = 0;
int available = 0;
MythRenderOpenGL* opengl = MythRenderOpenGL::GetOpenGLRender();
if (opengl)
opengl->GetGPUMemory(available, dedicated, total);
if (auto * opengl = MythRenderOpenGL::GetOpenGLRender(); opengl)
return opengl->GetGPUMemory();
return std::tuple<int,int,int>{ 0, 0, 0 };
};

auto UpdateUsed = [&GetGPUMem](StatusBoxItem* Item)
{
auto mem = GetGPUMem();
int total = std::get<0>(mem);
if (total > 0)
{
int avail = std::get<2>(mem);
Item->SetText(tr("GPU memory used : %1MB").arg(total - avail));
}
};

auto UpdateFree = [&GetGPUMem](StatusBoxItem* Item)
{
auto mem = GetGPUMem();
int total = std::get<0>(mem);
if (total > 0)
{
int percent = static_cast<int>((available / static_cast<float>(total) * 100.0F));
Item->SetText(tr("GPU Memory: %1 MB total, %2 MB dedicated, %3 MB used, %4 MB (or %5%) free")
.arg(total).arg(dedicated).arg(total - available).arg(available).arg(percent));
int avail = std::get<2>(mem);
int percent = static_cast<int>((avail / static_cast<float>(total) * 100.0F));
Item->SetText(tr("GPU memory free : %1MB (or %2%)").arg(avail).arg(percent));
}
};
StatusBoxItem* gpumem = AddLogLine("");
UpdateGPUMem(gpumem);
connect(gpumem, &StatusBoxItem::UpdateRequired, UpdateGPUMem);
gpumem->Start();

auto current = GetGPUMem();
// Total and dedicated will not change
AddLogLine(tr("GPU memory total : %1MB").arg(std::get<0>(current)));
AddLogLine(tr("GPU memory dedicated: %1MB").arg(std::get<1>(current)));
auto * used = AddLogLine("");
auto * freemem = AddLogLine("");
UpdateUsed(used);
UpdateFree(freemem);
connect(used, &StatusBoxItem::UpdateRequired, UpdateUsed);
connect(freemem, &StatusBoxItem::UpdateRequired, UpdateFree);
used->Start();
freemem->Start();
}

desc = render->GetDescription();
Expand Down

0 comments on commit 001711f

Please sign in to comment.