mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-22 03:47:00 +00:00
IO: removed io.MetricsActiveAllocations introduced in 1.63. Same as 'g.DebugMemAllocCount - g.DebugMemFreeCount' (still displayed in Metrics.
This commit is contained in:
parent
f1519efb16
commit
2f431a948c
@ -44,6 +44,8 @@ Breaking changes:
|
|||||||
|
|
||||||
- Debug Tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"),
|
- Debug Tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"),
|
||||||
as earlier name was misleading. Kept inline redirection function. (#4631)
|
as earlier name was misleading. Kept inline redirection function. (#4631)
|
||||||
|
- IO: Removed io.MetricsActiveAllocations introduced in 1.63, was displayed in Metrics and unlikely to
|
||||||
|
be accessed by end-user. Value still visible in the UI and easily to recompute from a delta.
|
||||||
- ListBox, Combo: Changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis.
|
- ListBox, Combo: Changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis.
|
||||||
Before:
|
Before:
|
||||||
getter type: bool (*getter)(void* user_data, int idx, const char** out_text)
|
getter type: bool (*getter)(void* user_data, int idx, const char** out_text)
|
||||||
@ -103,6 +105,7 @@ Other changes:
|
|||||||
Was most often noticable when using an horizontal scrollbar. (#6789)
|
Was most often noticable when using an horizontal scrollbar. (#6789)
|
||||||
- Misc: Most text functions also treat "%.*s" (along with "%s") specially to avoid formatting. (#3466, #6846)
|
- Misc: Most text functions also treat "%.*s" (along with "%s") specially to avoid formatting. (#3466, #6846)
|
||||||
- IO: Setting io.WantSetMousePos ignores incoming MousePos events. (#6837, #228) [@bertaye]
|
- IO: Setting io.WantSetMousePos ignores incoming MousePos events. (#6837, #228) [@bertaye]
|
||||||
|
- Debug Tools: Metrics: Added log recent alloc/free calls.
|
||||||
- ImDrawList: Added AddEllipse(), AddEllipseFilled(), PathEllipticalArcTo(). (#2743) [@Doohl]
|
- ImDrawList: Added AddEllipse(), AddEllipseFilled(), PathEllipticalArcTo(). (#2743) [@Doohl]
|
||||||
- ImVector: Added find_index() helper.
|
- ImVector: Added find_index() helper.
|
||||||
- Backends: GLFW: Clear emscripten's MouseWheel callback before shutdown. (#6790, #6096, #4019) [@halx99]
|
- Backends: GLFW: Clear emscripten's MouseWheel callback before shutdown. (#6790, #6096, #4019) [@halx99]
|
||||||
|
57
imgui.cpp
57
imgui.cpp
@ -424,6 +424,7 @@ CODE
|
|||||||
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
||||||
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
||||||
|
|
||||||
|
- 2023/09/27 (1.90.0) - io: removed io.MetricsActiveAllocations introduced in 1.63. Same as 'g.DebugMemAllocCount - g.DebugMemFreeCount' (still displayed in Metrics, unlikely to be accessed by end-user).
|
||||||
- 2023/09/26 (1.90.0) - debug tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"), as earlier name was misleading. Kept inline redirection function. (#4631)
|
- 2023/09/26 (1.90.0) - debug tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"), as earlier name was misleading. Kept inline redirection function. (#4631)
|
||||||
- 2023/09/15 (1.90.0) - ListBox, Combo: changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis. kept inline redirection function (will obsolete).
|
- 2023/09/15 (1.90.0) - ListBox, Combo: changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis. kept inline redirection function (will obsolete).
|
||||||
- old: bool Combo(const char* label, int* current_item, bool (*getter)(void* user_data, int idx, const char** out_text), ...)
|
- old: bool Combo(const char* label, int* current_item, bool (*getter)(void* user_data, int idx, const char** out_text), ...)
|
||||||
@ -4223,26 +4224,50 @@ float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
|
|||||||
void* ImGui::MemAlloc(size_t size)
|
void* ImGui::MemAlloc(size_t size)
|
||||||
{
|
{
|
||||||
void* ptr = (*GImAllocatorAllocFunc)(size, GImAllocatorUserData);
|
void* ptr = (*GImAllocatorAllocFunc)(size, GImAllocatorUserData);
|
||||||
|
#ifndef IMGUI_DISABLE_DEBUG_TOOLS
|
||||||
if (ImGuiContext* ctx = GImGui)
|
if (ImGuiContext* ctx = GImGui)
|
||||||
{
|
DebugAllocHook(&ctx->DebugAllocInfo, ctx->FrameCount, ptr, size);
|
||||||
ctx->IO.MetricsActiveAllocations++;
|
#endif
|
||||||
//printf("[%05d] MemAlloc(%d) -> 0x%p\n", ctx->FrameCount, size, ptr);
|
|
||||||
}
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// IM_FREE() == ImGui::MemFree()
|
// IM_FREE() == ImGui::MemFree()
|
||||||
void ImGui::MemFree(void* ptr)
|
void ImGui::MemFree(void* ptr)
|
||||||
{
|
{
|
||||||
|
#ifndef IMGUI_DISABLE_DEBUG_TOOLS
|
||||||
if (ptr != NULL)
|
if (ptr != NULL)
|
||||||
if (ImGuiContext* ctx = GImGui)
|
if (ImGuiContext* ctx = GImGui)
|
||||||
{
|
DebugAllocHook(&ctx->DebugAllocInfo, ctx->FrameCount, ptr, (size_t)-1);
|
||||||
ctx->IO.MetricsActiveAllocations--;
|
#endif
|
||||||
//printf("[%05d] MemFree(0x%p)\n", ctx->FrameCount, ptr);
|
|
||||||
}
|
|
||||||
return (*GImAllocatorFreeFunc)(ptr, GImAllocatorUserData);
|
return (*GImAllocatorFreeFunc)(ptr, GImAllocatorUserData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We record the number of allocation in recent frames, as a way to audit/sanitize our guiding principles of "no allocations on idle/repeating frames"
|
||||||
|
void ImGui::DebugAllocHook(ImGuiDebugAllocInfo* info, int frame_count, void* ptr, size_t size)
|
||||||
|
{
|
||||||
|
ImGuiDebugAllocEntry* entry = &info->LastEntriesBuf[info->LastEntriesIdx];
|
||||||
|
IM_UNUSED(ptr);
|
||||||
|
if (entry->FrameCount != frame_count)
|
||||||
|
{
|
||||||
|
info->LastEntriesIdx = (info->LastEntriesIdx + 1) % IM_ARRAYSIZE(info->LastEntriesBuf);
|
||||||
|
entry = &info->LastEntriesBuf[info->LastEntriesIdx];
|
||||||
|
entry->FrameCount = frame_count;
|
||||||
|
entry->AllocCount = entry->FreeCount = 0;
|
||||||
|
}
|
||||||
|
if (size != (size_t)-1)
|
||||||
|
{
|
||||||
|
entry->AllocCount++;
|
||||||
|
info->TotalAllocCount++;
|
||||||
|
//printf("[%05d] MemAlloc(%d) -> 0x%p\n", frame_count, size, ptr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
entry->FreeCount++;
|
||||||
|
info->TotalFreeCount++;
|
||||||
|
//printf("[%05d] MemFree(0x%p)\n", frame_count, ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const char* ImGui::GetClipboardText()
|
const char* ImGui::GetClipboardText()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -13720,7 +13745,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
Text("Dear ImGui %s", GetVersion());
|
Text("Dear ImGui %s", GetVersion());
|
||||||
Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
|
Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
|
||||||
Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
|
Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
|
||||||
Text("%d visible windows, %d active allocations", io.MetricsRenderWindows, io.MetricsActiveAllocations);
|
Text("%d visible windows, %d current allocations", io.MetricsRenderWindows, g.DebugAllocInfo.TotalAllocCount - g.DebugAllocInfo.TotalFreeCount);
|
||||||
//SameLine(); if (SmallButton("GC")) { g.GcCompactAll = true; }
|
//SameLine(); if (SmallButton("GC")) { g.GcCompactAll = true; }
|
||||||
|
|
||||||
Separator();
|
Separator();
|
||||||
@ -14034,6 +14059,20 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Settings
|
||||||
|
if (TreeNode("Memory allocations"))
|
||||||
|
{
|
||||||
|
ImGuiDebugAllocInfo* info = &g.DebugAllocInfo;
|
||||||
|
Text("%d current allocations", info->TotalAllocCount - info->TotalFreeCount);
|
||||||
|
int buf_size = IM_ARRAYSIZE(info->LastEntriesBuf);
|
||||||
|
for (int n = buf_size - 1; n >= 0; n--)
|
||||||
|
{
|
||||||
|
ImGuiDebugAllocEntry* entry = &info->LastEntriesBuf[(info->LastEntriesIdx - n + buf_size) % buf_size];
|
||||||
|
BulletText("Frame %06d: %+3d ( %2d malloc, %2d free )", entry->FrameCount, entry->AllocCount - entry->FreeCount, entry->AllocCount, entry->FreeCount);
|
||||||
|
}
|
||||||
|
TreePop();
|
||||||
|
}
|
||||||
|
|
||||||
if (TreeNode("Inputs"))
|
if (TreeNode("Inputs"))
|
||||||
{
|
{
|
||||||
Text("KEYBOARD/GAMEPAD/MOUSE KEYS");
|
Text("KEYBOARD/GAMEPAD/MOUSE KEYS");
|
||||||
|
11
imgui.h
11
imgui.h
@ -2039,11 +2039,6 @@ struct ImGuiIO
|
|||||||
// Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
|
// Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
|
||||||
// (default to use native imm32 api on Windows)
|
// (default to use native imm32 api on Windows)
|
||||||
void (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
|
void (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
||||||
void* ImeWindowHandle; // = NULL // [Obsoleted in 1.87] Set ImGuiViewport::PlatformHandleRaw instead. Set this to your HWND to get automatic IME cursor positioning.
|
|
||||||
#else
|
|
||||||
void* _UnusedPadding; // Unused field to keep data structure the same size.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Optional: Platform locale
|
// Optional: Platform locale
|
||||||
ImWchar PlatformLocaleDecimalPoint; // '.' // [Experimental] Configure decimal point e.g. '.' or ',' useful for some languages (e.g. German), generally pulled from *localeconv()->decimal_point
|
ImWchar PlatformLocaleDecimalPoint; // '.' // [Experimental] Configure decimal point e.g. '.' or ',' useful for some languages (e.g. German), generally pulled from *localeconv()->decimal_point
|
||||||
@ -2090,7 +2085,6 @@ struct ImGuiIO
|
|||||||
int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
|
int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
|
||||||
int MetricsRenderWindows; // Number of visible windows
|
int MetricsRenderWindows; // Number of visible windows
|
||||||
int MetricsActiveWindows; // Number of active windows
|
int MetricsActiveWindows; // Number of active windows
|
||||||
int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
|
|
||||||
ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
|
ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
|
||||||
|
|
||||||
// Legacy: before 1.87, we required backend to fill io.KeyMap[] (imgui->native map) during initialization and io.KeysDown[] (native indices) every frame.
|
// Legacy: before 1.87, we required backend to fill io.KeyMap[] (imgui->native map) during initialization and io.KeysDown[] (native indices) every frame.
|
||||||
@ -2101,6 +2095,11 @@ struct ImGuiIO
|
|||||||
bool KeysDown[ImGuiKey_COUNT]; // [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow.
|
bool KeysDown[ImGuiKey_COUNT]; // [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow.
|
||||||
float NavInputs[ImGuiNavInput_COUNT]; // [LEGACY] Since 1.88, NavInputs[] was removed. Backends from 1.60 to 1.86 won't build. Feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums.
|
float NavInputs[ImGuiNavInput_COUNT]; // [LEGACY] Since 1.88, NavInputs[] was removed. Backends from 1.60 to 1.86 won't build. Feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums.
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
|
void* ImeWindowHandle; // = NULL // [Obsoleted in 1.87] Set ImGuiViewport::PlatformHandleRaw instead. Set this to your HWND to get automatic IME cursor positioning.
|
||||||
|
#else
|
||||||
|
void* _UnusedPadding;
|
||||||
|
#endif
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
|
// [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
|
||||||
|
@ -1783,6 +1783,23 @@ enum ImGuiDebugLogFlags_
|
|||||||
ImGuiDebugLogFlags_OutputToTestEngine = 1 << 11, // Also send output to Test Engine
|
ImGuiDebugLogFlags_OutputToTestEngine = 1 << 11, // Also send output to Test Engine
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ImGuiDebugAllocEntry
|
||||||
|
{
|
||||||
|
int FrameCount;
|
||||||
|
ImS16 AllocCount;
|
||||||
|
ImS16 FreeCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ImGuiDebugAllocInfo
|
||||||
|
{
|
||||||
|
int TotalAllocCount; // Number of call to MemAlloc().
|
||||||
|
int TotalFreeCount;
|
||||||
|
ImS16 LastEntriesIdx; // Current index in buffer
|
||||||
|
ImGuiDebugAllocEntry LastEntriesBuf[6]; // Track last 6 frames that had allocations
|
||||||
|
|
||||||
|
ImGuiDebugAllocInfo() { memset(this, 0, sizeof(*this)); }
|
||||||
|
};
|
||||||
|
|
||||||
struct ImGuiMetricsConfig
|
struct ImGuiMetricsConfig
|
||||||
{
|
{
|
||||||
bool ShowDebugLog = false;
|
bool ShowDebugLog = false;
|
||||||
@ -2133,6 +2150,7 @@ struct ImGuiContext
|
|||||||
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
||||||
ImGuiMetricsConfig DebugMetricsConfig;
|
ImGuiMetricsConfig DebugMetricsConfig;
|
||||||
ImGuiIdStackTool DebugIdStackTool;
|
ImGuiIdStackTool DebugIdStackTool;
|
||||||
|
ImGuiDebugAllocInfo DebugAllocInfo;
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
float FramerateSecPerFrame[60]; // Calculate estimate of framerate for user over the last 60 frames..
|
float FramerateSecPerFrame[60]; // Calculate estimate of framerate for user over the last 60 frames..
|
||||||
@ -3326,6 +3344,7 @@ namespace ImGui
|
|||||||
// Debug Log
|
// Debug Log
|
||||||
IMGUI_API void DebugLog(const char* fmt, ...) IM_FMTARGS(1);
|
IMGUI_API void DebugLog(const char* fmt, ...) IM_FMTARGS(1);
|
||||||
IMGUI_API void DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1);
|
IMGUI_API void DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1);
|
||||||
|
IMGUI_API void DebugAllocHook(ImGuiDebugAllocInfo* info, int frame_count, void* ptr, size_t size); // size >= 0 : alloc, size = -1 : free
|
||||||
|
|
||||||
// Debug Tools
|
// Debug Tools
|
||||||
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user