diff options
author | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
commit | 420b91db29485df39fd6e724e782c449158811cb (patch) | |
tree | b471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llmemoryview.cpp |
Print done when done.
Diffstat (limited to 'indra/newview/llmemoryview.cpp')
-rw-r--r-- | indra/newview/llmemoryview.cpp | 223 |
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(); +} |