summaryrefslogtreecommitdiff
path: root/indra/newview/llmemoryview.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llmemoryview.cpp
Print done when done.
Diffstat (limited to 'indra/newview/llmemoryview.cpp')
-rw-r--r--indra/newview/llmemoryview.cpp223
1 files changed, 223 insertions, 0 deletions
diff --git a/indra/newview/llmemoryview.cpp b/indra/newview/llmemoryview.cpp
new file mode 100644
index 0000000000..5edb373cbb
--- /dev/null
+++ b/indra/newview/llmemoryview.cpp
@@ -0,0 +1,223 @@
+/**
+ * @file llmemoryview.cpp
+ * @brief LLMemoryView class implementation
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "indra_constants.h"
+#include "llmemoryview.h"
+
+#include "llrect.h"
+#include "llerror.h"
+#include "llgl.h"
+#include "llmath.h"
+#include "llfontgl.h"
+
+#include "viewer.h"
+#include "llui.h"
+#include "llviewercontrol.h"
+#include "llstat.h"
+
+#include "llfasttimer.h"
+
+LLMemoryView::LLMemoryView(const std::string& name, const LLRect& rect)
+: LLView(name, rect, TRUE)
+{
+ setVisible(FALSE);
+}
+
+LLMemoryView::~LLMemoryView()
+{
+}
+
+EWidgetType LLMemoryView::getWidgetType() const
+{
+ return WIDGET_TYPE_MEMORY_VIEW;
+}
+
+LLString LLMemoryView::getWidgetTag() const
+{
+ return LL_MEMORY_VIEW_TAG;
+}
+
+BOOL LLMemoryView::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ if (mask & MASK_SHIFT)
+ {
+ }
+ else if (mask & MASK_CONTROL)
+ {
+ }
+ else
+ {
+ }
+ return TRUE;
+}
+
+BOOL LLMemoryView::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ return TRUE;
+}
+
+
+BOOL LLMemoryView::handleHover(S32 x, S32 y, MASK mask)
+{
+ return FALSE;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+struct mtv_display_info {
+ S32 memtype;
+ const char *desc;
+ LLColor4 *color;
+};
+
+static LLColor4 red0(0.5f, 0.0f, 0.0f, 1.0f);
+
+static struct mtv_display_info mtv_display_table[] =
+{
+ { LLMemType::MTYPE_INIT, "Init", &LLColor4::white },
+ { LLMemType::MTYPE_STARTUP, "Startup", &LLColor4::cyan1 },
+ { LLMemType::MTYPE_MAIN, "Main", &LLColor4::cyan2 },
+ { LLMemType::MTYPE_IMAGEBASE, "ImageBase", &LLColor4::yellow1 },
+ { LLMemType::MTYPE_IMAGERAW, "ImageRaw", &LLColor4::yellow2 },
+ { LLMemType::MTYPE_IMAGEFORMATTED, "ImageFmtd", &LLColor4::yellow3 },
+ { LLMemType::MTYPE_APPFMTIMAGE, "ViewerImageFmt", &LLColor4::orange1 },
+ { LLMemType::MTYPE_APPRAWIMAGE, "ViewerImageRaw", &LLColor4::orange2 },
+ { LLMemType::MTYPE_APPAUXRAWIMAGE, "ViewerImageAux", &LLColor4::orange3 },
+ { LLMemType::MTYPE_DRAWABLE, "Drawable", &LLColor4::green1 },
+ { LLMemType::MTYPE_OBJECT, "ViewerObject", &LLColor4::green2 },
+ { LLMemType::MTYPE_PIPELINE, "Pipeline", &LLColor4::green3 },
+ { LLMemType::MTYPE_PARTICLES, "Particles", &LLColor4::green4 },
+ { LLMemType::MTYPE_SPACE_PARTITION, "Space Partition", &LLColor4::blue2 },
+ { LLMemType::MTYPE_AVATAR, "Avatar", &LLColor4::purple1 },
+ { LLMemType::MTYPE_REGIONS, "Regions", &LLColor4::blue1 },
+ { LLMemType::MTYPE_TEMP1, "Temp1", &LLColor4::red1 },
+ { LLMemType::MTYPE_TEMP2, "Temp2", &LLColor4::magenta1 },
+ { LLMemType::MTYPE_TEMP3, "Temp3", &LLColor4::red2 },
+ { LLMemType::MTYPE_TEMP4, "Temp4", &LLColor4::magenta2 },
+ { LLMemType::MTYPE_TEMP5, "Temp5", &LLColor4::red3 },
+ { LLMemType::MTYPE_TEMP6, "Temp6", &LLColor4::magenta3 },
+ { LLMemType::MTYPE_TEMP7, "Temp7", &LLColor4::red4 },
+ { LLMemType::MTYPE_TEMP8, "Temp8", &LLColor4::magenta4 },
+
+ { LLMemType::MTYPE_OTHER, "Other", &red0 },
+};
+static const int MTV_DISPLAY_NUM = (sizeof(mtv_display_table)/sizeof(mtv_display_table[0]));
+
+void LLMemoryView::draw()
+{
+ std::string tdesc;
+ S32 width = mRect.getWidth();
+ S32 height = mRect.getHeight();
+
+ LLGLSUIDefault gls_ui;
+ LLGLSNoTexture gls_no_tex;
+ gl_rect_2d(0, height, width, 0, LLColor4(0.f, 0.f, 0.f, 0.25f));
+
+#if MEM_TRACK_TYPE
+
+ S32 left, top, right, bottom;
+ S32 x, y;
+
+ S32 margin = 10;
+ S32 texth = (S32)LLFontGL::sMonospace->getLineHeight();
+
+ S32 xleft = margin;
+ S32 ytop = height - margin;
+ S32 labelwidth = 0;
+ S32 maxmaxbytes = 1;
+
+ // Make sure all timers are accounted for
+ // Set 'MT_OTHER' to unaccounted ticks last frame
+ {
+ S32 display_memtypes[LLMemType::MTYPE_NUM_TYPES];
+ for (S32 i=0; i < LLMemType::MTYPE_NUM_TYPES; i++)
+ {
+ display_memtypes[i] = 0;
+ }
+ for (S32 i=0; i < MTV_DISPLAY_NUM; i++)
+ {
+ S32 tidx = mtv_display_table[i].memtype;
+ display_memtypes[tidx]++;
+ }
+ LLMemType::sMemCount[LLMemType::MTYPE_OTHER] = 0;
+ LLMemType::sMaxMemCount[LLMemType::MTYPE_OTHER] = 0;
+ for (S32 tidx = 0; tidx < LLMemType::MTYPE_NUM_TYPES; tidx++)
+ {
+ if (display_memtypes[tidx] == 0)
+ {
+ LLMemType::sMemCount[LLMemType::MTYPE_OTHER] += LLMemType::sMemCount[tidx];
+ LLMemType::sMaxMemCount[LLMemType::MTYPE_OTHER] += LLMemType::sMaxMemCount[tidx];
+ }
+ }
+ }
+
+ // Labels
+ {
+ LLGLSTexture gls_texture;
+ y = ytop;
+ S32 peak = 0;
+ for (S32 i=0; i<MTV_DISPLAY_NUM; i++)
+ {
+ x = xleft;
+
+ int tidx = mtv_display_table[i].memtype;
+ S32 bytes = LLMemType::sMemCount[tidx];
+ S32 maxbytes = LLMemType::sMaxMemCount[tidx];
+ maxmaxbytes = llmax(maxbytes, maxmaxbytes);
+ peak += maxbytes;
+ S32 mbytes = bytes >> 20;
+
+ tdesc = llformat("%s [%4d MB]",mtv_display_table[i].desc,mbytes);
+ LLFontGL::sMonospace->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
+
+ y -= (texth + 2);
+
+ S32 textw = LLFontGL::sMonospace->getWidth(tdesc);
+ if (textw > labelwidth)
+ labelwidth = textw;
+ }
+ x = xleft;
+ tdesc = llformat("Total Bytes: %d MB Overhead: %d KB",
+ LLMemType::sTotalMem >> 20, LLMemType::sOverheadMem >> 10);
+ LLFontGL::sMonospace->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
+ }
+
+ // Bars
+ y = ytop;
+ labelwidth += 8;
+ S32 barw = width - labelwidth - xleft - margin;
+ for (S32 i=0; i<MTV_DISPLAY_NUM; i++)
+ {
+ x = xleft + labelwidth;
+
+ int tidx = mtv_display_table[i].memtype;
+ S32 bytes = LLMemType::sMemCount[tidx];
+ F32 frac = (F32)bytes / (F32)maxmaxbytes;
+ S32 w = (S32)(frac * (F32)barw);
+ left = x; right = x + w;
+ top = y; bottom = y - texth;
+ gl_rect_2d(left, top, right, bottom, *mtv_display_table[i].color);
+
+ S32 maxbytes = LLMemType::sMaxMemCount[tidx];
+ F32 frac2 = (F32)maxbytes / (F32)maxmaxbytes;
+ S32 w2 = (S32)(frac2 * (F32)barw);
+ left = x + w + 1; right = x + w2;
+ top = y; bottom = y - texth;
+ LLColor4 tcolor = *mtv_display_table[i].color;
+ tcolor.setAlpha(.5f);
+ gl_rect_2d(left, top, right, bottom, tcolor);
+
+ y -= (texth + 2);
+ }
+
+#endif
+
+ LLView::draw();
+}