144 lines
4.1 KiB
C++
144 lines
4.1 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "core/core_profiler.h"
|
|
#include "core/raster_font.h"
|
|
#include "core/renderer.h"
|
|
|
|
using namespace GS;
|
|
|
|
#if __ENABLE_ALLOCATION_STAT__
|
|
static Time time_last;
|
|
#endif
|
|
|
|
//--------------------------------------------------------------------------
|
|
void Core::DrawAllocProfilerText(Render::Renderer &render, Render::RasterFont *font[2], float &x, float &y, float w, float h)
|
|
{
|
|
#if __ENABLE_ALLOCATION_STAT__
|
|
|
|
Time time = Platform::Get().GetTime();
|
|
Time time_elapsed = Types::Max(nTime(1), time - Platform::Get().GetStartTime());
|
|
|
|
// Update averages.
|
|
Time time_delta = time - time_last;
|
|
|
|
if (time_delta.toSec() > 1)
|
|
{
|
|
for (uint n = 0; n < nIAlloc::SystemCount; ++n)
|
|
{
|
|
nIAlloc::Stat &stat = nIAlloc::system_stat[n];
|
|
stat.alloc_avg = stat.alloc_count / time_delta.toSec();
|
|
stat.alloc_count = 0;
|
|
}
|
|
time_last = time;
|
|
}
|
|
|
|
//
|
|
nColor title_color(1.f, 0.9f, 0);
|
|
nRenderer::WriterConfig config(false);
|
|
|
|
render.Write(*font[1], "Allocation System\n\n", x, y, config, 1, &title_color);
|
|
float col, _col;
|
|
|
|
// Output legend.
|
|
#define MOVE_COL(EXP) { EXP; _col = col; }
|
|
MOVE_COL(col = x)
|
|
|
|
render.Write(*font[0], "System", _col, y, config);
|
|
MOVE_COL(col += 120)
|
|
|
|
render.Write(*font[0], "| Commit", _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], "| Commit Peak", _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
|
|
render.Write(*font[0], "| Alive", _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], "| Alive Peak", _col, y, config);
|
|
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], "| Pressure (a/s)", _col, y, config);
|
|
|
|
y += 16 + 8;
|
|
|
|
// Output per system stats.
|
|
String current_group;
|
|
|
|
for (uint n = 0; n < nIAlloc::SystemCount; ++n)
|
|
{
|
|
// Output allocation group on change.
|
|
if (current_group != nIAlloc::system_desc[n].group)
|
|
{
|
|
// y += 4;
|
|
// MOVE_COL(col = x)
|
|
// render.Write(*font[0], nIAlloc::system_desc[n].group, _col, y, config, 1, &title_color);
|
|
// y += 16 + 8;
|
|
current_group = nIAlloc::system_desc[n].group;
|
|
}
|
|
|
|
// Output statistics.
|
|
nIAlloc::Stat &stat = nIAlloc::system_stat[n];
|
|
MOVE_COL(col = x)
|
|
|
|
render.Write(*font[0], nIAlloc::system_desc[n].name, _col, y, config);
|
|
MOVE_COL(col += 120)
|
|
|
|
render.Write(*font[0], String::Format("| %s", FormatNumber((float)stat.size, MemorySize).c_str()), _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], String::Format("| %s", FormatNumber((float)stat.size_peak, MemorySize).c_str()), _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
|
|
render.Write(*font[0], String::Format("| %d", stat.alive_count), _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], String::Format("| %d", stat.alive_count_peak), _col, y, config);
|
|
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], String::Format("| %d", stat.alloc_avg), _col, y, config);
|
|
|
|
y += 16;
|
|
}
|
|
|
|
// Totals.
|
|
size_t total_size = 0,
|
|
total_size_peak = 0;
|
|
uint total_count = 0,
|
|
total_count_peak = 0,
|
|
total_pressure = 0;
|
|
|
|
for (uint n = 0; n < nIAlloc::SystemCount; ++n)
|
|
{
|
|
nIAlloc::Stat &stat = nIAlloc::system_stat[n];
|
|
|
|
total_size += stat.size;
|
|
total_size_peak += stat.size_peak;
|
|
total_count += stat.alive_count;
|
|
total_count_peak += stat.alive_count_peak;
|
|
total_pressure += stat.alloc_avg;
|
|
}
|
|
|
|
y += 8;
|
|
|
|
MOVE_COL(col = x)
|
|
|
|
render.Write(*font[0], "Total", _col, y, config);
|
|
MOVE_COL(col += 120)
|
|
|
|
render.Write(*font[0], String::Format("| %s", FormatNumber((float)total_size, MemorySize).c_str()), _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], String::Format("| %s", FormatNumber((float)total_size_peak, MemorySize).c_str()), _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
|
|
render.Write(*font[0], String::Format("| %d", total_count), _col, y, config);
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], String::Format("| %d", total_count_peak), _col, y, config);
|
|
|
|
MOVE_COL(col += 90)
|
|
render.Write(*font[0], String::Format("| %d", total_pressure), _col, y, config);
|
|
|
|
#endif
|
|
}
|
|
//--------------------------------------------------------------------------
|