diff options
Diffstat (limited to 'Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp')
-rw-r--r-- | Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp | 781 |
1 files changed, 0 insertions, 781 deletions
diff --git a/Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp b/Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp deleted file mode 100644 index 1fb3fc25282..00000000000 --- a/Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp +++ /dev/null @@ -1,781 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: MemoryUsage.cpp -Responsibility: Sharon Correll -Last reviewed: Not yet. - -Description: - Calculates memory usage for the engine and segments. -----------------------------------------------------------------------------------------------*/ - -#pragma warning(disable: 4244) // conversion from wchar_t to char -#pragma warning(disable: 4702) // unreachable code - -//:>******************************************************************************************** -//:> Include files -//:>******************************************************************************************** - -#include "GrCommon.h" -#include "GrData.h" -#ifndef _WIN32 -#include "GrMstypes.h" -#endif -#include "GrDebug.h" -//#include <fstream> -#include <iostream> -#include <cstring> -//#include <string> -// Forward declarations. - -#include "Main.h" - -//namespace gr -//{ -// class GrTableManager; -// class Segment; -// class GrEngine; -//} -// -//#include "GrTableManager.h" -//#include "GrFeatureValues.h" -//#include "GrSlotState.h" -//#include "SegmentAux.h" -//#include "Segment.h" -#include "MemoryUsage.h" - -//#ifndef _MSC_VER -//#include "config.h" -//#endif - -#ifdef _MSC_VER -#pragma hdrstop -#endif -#undef THIS_FILE -DEFINE_THIS_FILE - -//:End Ignore - -//:>******************************************************************************************** -//:> Forward declarations -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Local Constants and static variables -//:>******************************************************************************************** - -const int stringOverhead = (3 * sizeof(int)) + (sizeof(void *)) + (8 * sizeof(short)); -const int vectorOverhead = 3 * sizeof(void *); - -namespace gr -{ - -//:>******************************************************************************************** -//:> Font/engine -//:>******************************************************************************************** - -void FontMemoryUsage::initialize() -{ - font = 0; - fontCache = 0; - fontFace = 0; - - eng_count = 0; - eng_overhead = 0; - eng_scalars = 0; - eng_strings = 0; - eng_pointers = 0; - eng_cmap = 0; - eng_nameTable = 0; - - pseudoMap = 0; - - clstbl_counters = 0; - clstbl_offsets = 0; - clstbl_glyphList = 0; - - glftbl_general = 0; - glftbl_compDefns = 0; - glftbl_attrTable = 0; - glftbl_attrOffsets = 0; - - lngtbl_general = 0; - lngtbl_entries = 0; - lngtbl_featureSets = 0; - - tman_general = 0; - - pass_count = 0; - pass_general = 0; - pass_fsm = 0; - pass_ruleExtras = 0; - pass_constraintOffsets = 0; - pass_constraintCode = 0; - pass_actionOffsets = 0; - pass_actionCode = 0; - - engst_general = 0; - engst_passState = 0; - - sstrm_count = 0; - sstrm_general = 0; - sstrm_chunkMapsUsed = 0; - sstrm_chunkMapsAlloc = 0; - sstrm_reprocBuf = 0; - - slot_count = 0; - slot_general = 0; - slot_abstract = 0; - slot_varLenBuf = 0; - slot_assocsUsed = 0; - slot_assocsAlloc = 0; - slot_attachUsed = 0; - slot_attachAlloc = 0; -} - -/*---------------------------------------------------------------------------------------------- - Return the total byte count. -----------------------------------------------------------------------------------------------*/ -int FontMemoryUsage::total() -{ - int grandTotal = 0; - grandTotal += font + fontCache + fontFace; - grandTotal += eng_overhead + eng_scalars + eng_strings + eng_pointers + eng_cmap + eng_nameTable; - grandTotal += pseudoMap; - grandTotal += clstbl_counters + clstbl_offsets + clstbl_glyphList; - grandTotal += glftbl_general + glftbl_compDefns + glftbl_attrTable + glftbl_attrOffsets; - grandTotal += lngtbl_general + lngtbl_entries + lngtbl_featureSets; - grandTotal += tman_general; - grandTotal += pass_general + pass_fsm + pass_ruleExtras - + pass_constraintOffsets + pass_constraintCode + pass_actionOffsets + pass_actionCode; - grandTotal += engst_general + engst_passState; - grandTotal += sstrm_general + sstrm_chunkMapsAlloc + sstrm_reprocBuf; - grandTotal += slot_general + slot_abstract + slot_varLenBuf + slot_assocsAlloc + slot_attachAlloc; - - return grandTotal; -} - -/*---------------------------------------------------------------------------------------------- - Add the results of two runs together. -----------------------------------------------------------------------------------------------*/ -void FontMemoryUsage::add(FontMemoryUsage & fmu) -{ - font += fmu.font; - fontCache += fmu.fontCache; - fontFace += fmu.fontFace; - - eng_count += fmu.eng_count; - eng_overhead += fmu.eng_overhead; - eng_scalars += fmu.eng_scalars; - eng_strings += fmu.eng_strings; - eng_pointers += fmu.eng_pointers; - eng_cmap += fmu.eng_cmap; - eng_nameTable += fmu.eng_nameTable; - - pseudoMap += fmu.pseudoMap; - - clstbl_counters += fmu.clstbl_counters; - clstbl_offsets += fmu.clstbl_offsets; - clstbl_glyphList += fmu.clstbl_glyphList; - - glftbl_general += fmu.glftbl_general; - glftbl_compDefns += fmu.glftbl_compDefns; - glftbl_attrTable += fmu.glftbl_attrTable; - glftbl_attrOffsets += fmu.glftbl_attrOffsets; - - lngtbl_general += fmu.lngtbl_general; - lngtbl_entries += fmu.lngtbl_entries; - lngtbl_featureSets += fmu.lngtbl_featureSets; - - tman_general += fmu.tman_general; - - pass_count += fmu.pass_count; - pass_general += fmu.pass_general; - pass_fsm += fmu.pass_fsm; - pass_ruleExtras += fmu.pass_ruleExtras; - pass_constraintOffsets += fmu.pass_constraintOffsets; - pass_constraintCode += fmu.pass_constraintCode; - pass_actionOffsets += fmu.pass_actionOffsets; - pass_actionCode += fmu.pass_actionCode; - - engst_general += fmu.engst_general; - engst_passState += fmu.engst_passState; - - sstrm_count += fmu.sstrm_count; - sstrm_general += fmu.sstrm_general; - sstrm_chunkMapsUsed += fmu.sstrm_chunkMapsUsed; - sstrm_chunkMapsAlloc += fmu.sstrm_chunkMapsAlloc; - sstrm_reprocBuf += fmu.sstrm_reprocBuf; - - slot_count += fmu.slot_count; - slot_general += fmu.slot_general; - slot_abstract += fmu.slot_abstract; - slot_varLenBuf += fmu.slot_varLenBuf; - slot_assocsUsed += fmu.slot_assocsUsed; - slot_assocsAlloc += fmu.slot_assocsAlloc; - slot_attachUsed += fmu.slot_attachUsed; - slot_attachAlloc += fmu.slot_attachAlloc; -} - -/*---------------------------------------------------------------------------------------------- - Add up the memory used by all the engines in the cache. -----------------------------------------------------------------------------------------------*/ -FontMemoryUsage Font::calculateMemoryUsage() -{ - FontMemoryUsage fmu; - FontFace::calculateAllMemoryUsage(fmu); - return fmu; -} - -void FontFace::calculateAllMemoryUsage(FontMemoryUsage & fmu) -{ - s_pFontCache->calculateMemoryUsage(fmu); -} - -void FontCache::calculateMemoryUsage(FontMemoryUsage & fmuTotal) -{ - fmuTotal.fontCache += sizeof(int) * 4; // m_cfci, m_cfciMax, m_cfface, m_flush - fmuTotal.fontCache += sizeof(void*); // m_prgfci; - - // Iterate through all the font faces in the cache. - for (int ifci = 0; ifci < m_cfci; ifci++) - { - CacheItem * pfci = m_prgfci + ifci; - char rgchFontName[32]; - memset(rgchFontName, 0, 32 * sizeof(char)); - std::copy(pfci->szFaceName, pfci->szFaceName + 32, rgchFontName); - std::string strFontName(rgchFontName); - fmuTotal.vstrFontNames.push_back(strFontName); - int cface = 0; - if (pfci->pffaceRegular) - { - FontMemoryUsage fmu; - pfci->pffaceRegular->calculateMemoryUsage(fmu); - fmuTotal.add(fmu); - fmuTotal.vFontTotalsReg.push_back(fmu.total()); - cface++; - } - else - fmuTotal.vFontTotalsReg.push_back(0); - - if (pfci->pffaceBold) - { - FontMemoryUsage fmu; - pfci->pffaceBold->calculateMemoryUsage(fmu); - fmuTotal.add(fmu); - fmuTotal.vFontTotalsBold.push_back(fmu.total()); - cface++; - } - else - fmuTotal.vFontTotalsBold.push_back(0); - - if (pfci->pffaceItalic) - { - FontMemoryUsage fmu; - pfci->pffaceItalic->calculateMemoryUsage(fmu); - fmuTotal.add(fmu); - fmuTotal.vFontTotalsItalic.push_back(fmu.total()); - cface++; - } - else - fmuTotal.vFontTotalsItalic.push_back(0); - - if (pfci->pffaceBI) - { - FontMemoryUsage fmu; - pfci->pffaceBI->calculateMemoryUsage(fmu); - fmuTotal.add(fmu); - fmuTotal.vFontTotalsBI.push_back(fmu.total()); - cface++; - } - else - fmuTotal.vFontTotalsBI.push_back(0); - - fmuTotal.vFaceCount.push_back(cface); - } -} - -void FontFace::calculateMemoryUsage(FontMemoryUsage & fmu) -{ - fmu.fontFace += sizeof(int); // m_cfonts - fmu.fontFace += sizeof(void *) * 2; // s_pFontCache, m_pgreng - - fmu.font += m_cfonts * sizeof(void*); // m_pfface - - fmu.addEngine(m_pgreng); -} - -void FontMemoryUsage::addEngine(GrEngine * pgreng) -{ - eng_count++; - - eng_overhead += sizeof(long); // m_cref - eng_scalars += sizeof(bool) * 6; // m_fBold, m_fItalic, m_fSmart... - eng_scalars += sizeof(bool) * 2; // m_fFakeItalicCache, m_fFakeBICache; - eng_strings += stringOverhead * 4; // m_strCtrlFileReg/Bold/Italic/BI - eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileReg.length(); - eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileBold.length(); - eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileItalic.length(); - eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileBI.length(); - eng_scalars += sizeof(bool); - eng_strings += stringOverhead * 6; // m_stuCtrlFile etc. - eng_strings += sizeof(wchar_t) * pgreng->m_stuCtrlFile.length(); - eng_strings += sizeof(wchar_t) * pgreng->m_stuInitError.length(); - eng_strings += sizeof(wchar_t) * pgreng->m_stuFaceName.length(); - eng_strings += sizeof(wchar_t) * pgreng->m_stuFeatures.length(); - eng_strings += sizeof(wchar_t) * pgreng->m_stuBaseFaceName.length(); - eng_scalars += sizeof(bool); // m_fUseSepBase - eng_scalars += sizeof(GrResult) * 2; // m_resFontRead, m_resFontValid - eng_scalars += sizeof(FontErrorCode); - eng_scalars += sizeof(int) * 3; // m_fxdBadVersion, m_nFontCheckSum, m_nScriptTag, m_grfsdc - eng_scalars += sizeof(bool); // m_fRightToLeft - eng_scalars += sizeof(int) * 2; // m_mXAscent, m_mXDescent - eng_scalars += sizeof(float); // m_dysOffset - eng_scalars += sizeof(bool); // m_fBasicJust - eng_scalars += sizeof(int); // m_cJLevels - eng_pointers += sizeof(void*) * 4; // m_ptman, m_pctbl, m_pgtbl, m_pfface - eng_scalars += sizeof(GrFeature) * kMaxFeatures; - eng_scalars += sizeof(int); // m_cfeat - eng_scalars += sizeof(size_t); // m_clcidFeatLabelLangs - eng_scalars += sizeof(short) * pgreng->m_clcidFeatLabelLangs; - // m_langtbl - eng_scalars += sizeof(bool); // m_fLineBreak - eng_scalars += sizeof(int) * 2; // m_cchwPreXlbContext, m_cchwPostXlbContext - eng_scalars += sizeof(data16) * 7; // m_chwPseudoAttr, etc. - eng_scalars += sizeof(gid16); // m_chwLBGlyphID - eng_scalars += sizeof(int) * 4; // m_cComponents, m_cnUserDefn, m_cnCompPerLig, m_mFontEmUnits - - pseudoMap += sizeof(int) * 3; - pseudoMap += sizeof(GrPseudoMap) * pgreng->m_cpsd; - - eng_cmap += sizeof(void*) * 2; - eng_cmap += sizeof(byte*); - eng_cmap += sizeof(bool); - if (pgreng->m_fCmapTblCopy) - eng_cmap += pgreng->m_cbCmapTbl; - - eng_nameTable += sizeof(byte *); - eng_nameTable += sizeof(bool); - if (pgreng->m_fNameTblCopy) - eng_nameTable += pgreng->m_cbNameTbl; - - eng_scalars += sizeof(bool) * 2; // m_fLogXductn, m_fInErrorState - - clstbl_counters += sizeof(int) * 2; // m_ccls, m_cclsLinear - clstbl_offsets += sizeof(data16) * (pgreng->m_pctbl->m_ccls + 1); - clstbl_glyphList += sizeof(data16) * (pgreng->m_pctbl->m_prgichwOffsets[pgreng->m_pctbl->m_ccls]); - - glftbl_general += sizeof(int) * 3; // m_cglf, m_cComponents, m_cgstbl - glftbl_general += vectorOverhead; // m_vpgstbl - GrGlyphSubTable * pgstbl = pgreng->m_pgtbl->m_vpgstbl[0]; - glftbl_general += sizeof(int) * 4; // m_fxdSilfVersion, m_nAttrIDLim, m_cComponents, m_cnCompPerLig - glftbl_general += sizeof(bool) * 2; // m_fHasDebugStrings, m_fGlocShort - glftbl_general += sizeof(data16) * 3; // m_chw...Attr - glftbl_compDefns += sizeof(int) * (pgstbl->m_cnCompPerLig + 1) * pgreng->m_pgtbl->m_cglf; - glftbl_attrTable += sizeof(int) * 2; // m_fxdSilfVersion, m_cbEntryBufLen - glftbl_attrTable += sizeof(byte) * pgstbl->m_pgatbl->m_cbEntryBufLen; - glftbl_attrOffsets += - (pgreng->m_pgtbl->m_cglf + 1) * ((pgstbl->m_fGlocShort) ? sizeof(data16) : sizeof(data32)); - - lngtbl_general += sizeof(size_t); // m_clang - lngtbl_general += sizeof(data16) * 3; // m_dilangInit, m_cLoop, m_ilangStart - lngtbl_general += sizeof(void*) * 2; // m_prglang, m_prgfset - lngtbl_general += sizeof(int); // m_cbOffset0 - lngtbl_entries += sizeof(GrLangTable::LangEntry) * pgreng->m_langtbl.m_clang; - lngtbl_featureSets += sizeof(GrLangTable::FeatSet) * pgreng->m_langtbl.m_cfset; - - GrTableManager * ptman = pgreng->m_ptman; - tman_general += sizeof(int) * 4; // m_cpass, m_cpassLB, m_ipassPos1, m_ipassJust1 - tman_general += sizeof(bool); // m_fBidi - tman_general += sizeof(void*) * 2; // m_prgppass, m_pgreng - tman_general += sizeof(void*) * ptman->m_cpass; // m_prgppass - tman_general += sizeof(bool); // m_fLogging - - pass_count += ptman->m_cpass; - for (int ipass = 0; ipass < ptman->m_cpass; ipass++) - { - GrPass * ppass = ptman->m_prgppass[ipass]; - pass_general = sizeof(GrPass); - - GrFSM * pfsm = ppass->m_pfsm; - if (pfsm) - { - pass_fsm += sizeof(int) * 5; // m_crow, m_crowFinal, m_rowFinalMin, m_crowNonAcpt, m_ccol - pass_fsm += sizeof(void*) * 3; // m_prgirulnMin, m_prgrulnMatched, m_prgrowTransitions - int crowSuccess = pfsm->m_crow - pfsm->m_crowNonAcpt; - pass_fsm += sizeof(data16) * (crowSuccess + 1); // m_prgirulnMin - pass_fsm += sizeof(data16) * (pfsm->m_crulnMatched); // m_prgrulnMatched - pass_fsm += sizeof(short) * ((pfsm->m_crow - pfsm->m_crowFinal) * pfsm->m_ccol); - pass_fsm += sizeof(data16); // m_dimcrInit, m_cLoop, m_imcrStart - pass_fsm += sizeof(int); // m_cmcr - pass_fsm += sizeof(void*); // m_prgmcr - pass_fsm += sizeof(GrFSMClassRange) * pfsm->m_cmcr; - pass_fsm += sizeof(int) * 2; // m_critMinRulePreContext, m_critMaxRulePreContext - pass_fsm += sizeof(void*); // m_prgrowStartStates - pass_fsm += sizeof(short) * (pfsm->m_critMaxRulePreContext - pfsm->m_critMinRulePreContext + 1); - } - - pass_ruleExtras = sizeof(data16) * ppass->m_crul; // m_prgchwRuleSortKeys - pass_ruleExtras = sizeof(byte*) * ppass->m_crul; // m_prgcritRulePreModContext - - pass_constraintOffsets += sizeof(data16) * (ppass->m_crul + 1); - pass_actionOffsets =+ sizeof(data16) * (ppass->m_crul + 1); - - pass_constraintCode += sizeof(byte) * ppass->m_cbConstraints; - pass_actionCode += sizeof(byte) * ppass->m_cbActions; - - pass_general += sizeof(bool) * ppass->m_crul; // m_prgfRuleOkay - pass_general += vectorOverhead; // m_vnStack - pass_general += sizeof(int) * ppass->m_vnStack.capacity(); - } - - engst_general += sizeof(EngineState); - engst_general += sizeof(void *) * ptman->m_engst.m_vslotblk.capacity(); - engst_general += sizeof(void *) * ptman->m_engst.m_vprgnSlotVarLenBufs.capacity(); - engst_general += sizeof(void *) * ptman->m_engst.m_cpass; // m_prgpsstrm - - engst_passState += sizeof(PassState) * ptman->m_engst.m_cpass; - - for (int isstrm = 0; isstrm < ptman->m_engst.m_cpass; isstrm++) - { - sstrm_count++; - GrSlotStream * psstrm = ptman->m_engst.m_prgpsstrm[isstrm]; - sstrm_general += sizeof(GrSlotStream); - sstrm_chunkMapsUsed += psstrm->m_vislotPrevChunkMap.size(); - sstrm_chunkMapsUsed += psstrm->m_vislotPrevChunkMap.size(); - sstrm_chunkMapsAlloc += psstrm->m_vislotPrevChunkMap.capacity(); - sstrm_chunkMapsAlloc += psstrm->m_vislotNextChunkMap.capacity(); - sstrm_reprocBuf += psstrm->m_vpslotReproc.capacity(); - sstrm_reprocBuf += sizeof(int) * 2; - sstrm_general -= sizeof(int) * 2; - } - - slot_general += ptman->m_engst.m_vslotblk.size() * EngineState::kSlotBlockSize - * (sizeof(GrSlotState) - sizeof(GrSlotAbstract)); - slot_abstract += ptman->m_engst.m_vslotblk.size() * EngineState::kSlotBlockSize - * sizeof(GrSlotAbstract); - int cnExtraPerSlot = ptman->m_engst.m_cUserDefn + (ptman->m_engst.m_cCompPerLig * 2) - + ptman->m_engst.m_cFeat; - slot_varLenBuf += EngineState::kSlotBlockSize * cnExtraPerSlot * sizeof(u_intslot); - for (size_t islotblk = 0; islotblk < ptman->m_engst.m_vslotblk.size(); islotblk++) - { - for (int islot = 0; islot < EngineState::kSlotBlockSize; islot++) - { - slot_count++; - GrSlotState * pslot = ptman->m_engst.m_vslotblk[islotblk] + islot; - slot_assocsUsed += pslot->m_vpslotAssoc.size(); - slot_assocsAlloc += pslot->m_vpslotAssoc.capacity(); - slot_attachUsed += pslot->m_vdislotAttLeaves.size(); - slot_attachAlloc += pslot->m_vdislotAttLeaves.capacity(); - } - } - -} - -/*---------------------------------------------------------------------------------------------- - Write out the memory usage onto a stream. -----------------------------------------------------------------------------------------------*/ -void FontMemoryUsage::prettyPrint(std::ostream & strm) -{ - int totalBytes = total(); - - strm << "Number of engines: " << eng_count << "\n"; - strm << "Number of passes: " << pass_count << "\n\n"; - - strm << "Number of slot streams: " << sstrm_count << "\n"; - strm << "Number of slots: " << slot_count << "\n\n"; - - int classTableTotal = clstbl_counters + clstbl_offsets + clstbl_glyphList; - int glyphTableTotal = glftbl_general + glftbl_compDefns + glftbl_attrTable + glftbl_attrOffsets; - int langTableTotal = lngtbl_general + lngtbl_entries + lngtbl_featureSets; - int passTotal = pass_general + pass_fsm + pass_ruleExtras + pass_constraintOffsets + pass_constraintCode - + pass_actionOffsets + pass_actionCode; - int engineTotal = eng_overhead + eng_scalars + eng_strings + eng_pointers + eng_cmap + eng_nameTable - + pseudoMap + classTableTotal + glyphTableTotal + langTableTotal + tman_general - + passTotal; - - strm << "BYTE COUNT TOTALS\n"; - strm << "Font: " << font << "\n"; - strm << "Font cache: " << fontCache << "\n"; - strm << "Font face: " << fontFace << "\n"; - strm << "Engine " << engineTotal << "\n"; - strm << " Overhead: " << eng_overhead << "\n"; - strm << " Scalars: " << eng_scalars << "\n"; - strm << " Strings: " << eng_strings << "\n"; - strm << " Pointers: " << eng_pointers << "\n"; - strm << " Cmap table: " << eng_cmap << "\n"; - strm << " Name table: " << eng_nameTable << "\n"; - strm << " Pseudo map: " << pseudoMap << "\n"; - strm << " Class table: " << classTableTotal << "\n"; - strm << " Counters: " << clstbl_counters << "\n"; - strm << " Offsets: " << clstbl_offsets << "\n"; - strm << " Glyph list: " << clstbl_glyphList << "\n"; - strm << " Glyph table: " << glyphTableTotal << "\n"; - strm << " General: " << glftbl_general << "\n"; - strm << " Component defns: " << glftbl_compDefns << "\n"; - strm << " Attr table: " << glftbl_attrTable << "\n"; - strm << " Attr offsets: " << glftbl_attrOffsets << "\n"; - strm << " Language table: " << langTableTotal << "\n"; - strm << " General: " << lngtbl_general << "\n"; - strm << " Entries: " << lngtbl_entries << "\n"; - strm << " Feature sets: " << lngtbl_featureSets << "\n"; - strm << " Table manager: " << tman_general << "\n"; - strm << " Passes: " << passTotal << "\n"; - strm << " General: " << pass_general << "\n"; - strm << " FSM: " << pass_fsm << "\n"; - strm << " Rule extras: " << pass_ruleExtras << "\n"; - strm << " Constraint offsets: " << pass_constraintOffsets << "\n\n"; - strm << " Constraint code: " << pass_constraintCode << "\n"; - strm << " Action offsets: " << pass_actionOffsets << "\n"; - strm << " Action code: " << pass_actionCode << "\n\n"; - - int slotTotal = slot_general + slot_abstract + slot_varLenBuf + slot_assocsAlloc + slot_attachAlloc; - int streamTotal = sstrm_general + sstrm_chunkMapsAlloc + sstrm_reprocBuf + slotTotal; - int engineStateTotal = engst_general + engst_passState + streamTotal; - - strm << " Engine State: " << engineStateTotal << "\n"; - strm << " General: " << engst_general << "\n"; - strm << " Pass states: " << engst_passState << "\n"; - strm << " Slot streams: " << streamTotal << "\n"; - strm << " General: " << sstrm_general << "\n"; - strm << " Chunk maps: " << sstrm_chunkMapsAlloc << " (" << sstrm_chunkMapsUsed << " used)\n"; - strm << " Reprocess buffer: " << sstrm_reprocBuf << "\n"; - strm << " Slots: " << slotTotal << "\n"; - strm << " General: " << slot_general << "\n"; - strm << " Abstract: " << slot_abstract << "\n"; - strm << " Var-length buf: " << slot_varLenBuf << "\n"; - strm << " Associations: " << slot_assocsAlloc << " (" << slot_assocsUsed << " used)\n"; - strm << " Attachments: " << slot_attachAlloc << " (" << slot_attachUsed << " used)\n\n"; - - strm << "Total bytes used: " << totalBytes << "\n\n"; - - strm << "TOTALS PER FONT\n"; - for (size_t ifont = 0; ifont < vstrFontNames.size(); ifont++) - { - strm << vstrFontNames[ifont].c_str() << "\n"; - strm << " Regular: " << vFontTotalsReg[ifont] << "\n"; - strm << " Bold: " << vFontTotalsBold[ifont] << "\n"; - strm << " Italic: " << vFontTotalsItalic[ifont] << "\n"; - strm << " Bold-italic: " << vFontTotalsBI[ifont] << "\n\n"; - } -} - - -//:>******************************************************************************************** -//:> Segment -//:>******************************************************************************************** - -/*---------------------------------------------------------------------------------------------- - Initialize the data structure. -----------------------------------------------------------------------------------------------*/ -void SegmentMemoryUsage::initialize() -{ - seg_count = 0; - overhead = 0; - pointers = 0; - scalars = 0; - strings = 0; - metrics = 0; - associations = 0; - init = 0; - obsolete = 0; - - slot_count = 0; - slot_abstract = 0; - slot_varLenBuf = 0; - slot_scalars = 0; - slot_clusterMembers = 0; - - glyphInfo_count = 0; - glyphInfo = 0; - - wastedVector = 0; -} - -/*---------------------------------------------------------------------------------------------- - Add the memory for the segemtn to the SegmentMemoryUsage data structure. -----------------------------------------------------------------------------------------------*/ -void Segment::calculateMemoryUsage(SegmentMemoryUsage & smu) -{ - smu.addSegment(*this); -} - - -void SegmentMemoryUsage::addSegment(Segment & seg) -{ - seg_count++; - - overhead += sizeof(long); // m_cref - pointers += sizeof(void*); // m_pgts - scalars += sizeof(int); // m_dichwLim - scalars += sizeof(int); // m_ichwMin - pointers += sizeof(void*); // m_pfont - pointers += sizeof(void*); // m_preneng - scalars += sizeof(bool); // m_fErroneous - pointers += sizeof(void*); // m_pgjus - scalars += sizeof(LayoutEnvironment); - scalars += sizeof(bool); // m_fWsRtl - scalars += sizeof(bool); // m_fParaRtl - scalars += sizeof(TrWsHandling); - scalars += sizeof(int); // m_nDirDepth - init += sizeof(byte*); // m_prgbNextSegDat - init += sizeof(int); // m_cbNextSegDat - init += sizeof(byte) * seg.m_cbNextSegDat; - init += sizeof(byte*); // m_prgInitDat - init += sizeof(int); // m_cbInitDat - init += sizeof(byte) * seg.m_cbInitDat; - init += sizeof(int); // m_dichPreContext -// obsolete += sizeof(void *); // m_psegPrev -// obsolete += sizeof(void *); // m_psegNext -// strings += stringOverhead * 2; -// strings += sizeof(wchar_t) * seg.m_stuFaceName.length(); -// strings += sizeof(wchar_t) * seg.m_stuBaseFaceName.length(); -// scalars += sizeof(bool); // m_fUseSepBase; -// scalars += sizeof(float); // m_pixHeight -// scalars += sizeof(bool); // m_fBold -// scalars += sizeof(bool); // m_fItalic - scalars += sizeof(LineBrk); // m_lbStart - scalars += sizeof(LineBrk); // m_lbEnd - scalars += sizeof(bool); // m_fStartLine - scalars += sizeof(bool); // m_fEndLine - scalars += sizeof(SegEnd); // m_est - metrics += sizeof(int); // m_mFontEmUnits - metrics += sizeof(float) * 17; // was 19, removed m_x/ysDPI - associations += sizeof(int); // m_ichwAssocsMin - associations += sizeof(int); // m_ichwAssocsLim - int dichw = seg.m_ichwAssocsLim - seg.m_ichwAssocsMin; - associations += sizeof(int*); // m_prgisloutBefore - associations += sizeof(int) * dichw; - associations += sizeof(int*); // m_prgisloutAfter - associations += sizeof(int) * dichw; - associations += sizeof(void*); // m_prgpvisloutAssocs - associations += sizeof(void*) * dichw; - for (int idichw = 0; idichw < dichw; idichw++) - { - std::vector<int> * pvisloutAssocs = seg.m_prgpvisloutAssocs[idichw]; - if (pvisloutAssocs) - { - associations += vectorOverhead; - associations += sizeof(int) * pvisloutAssocs->capacity(); - wastedVector += sizeof(int) * (pvisloutAssocs->capacity() - pvisloutAssocs->size()); - } - } - associations += sizeof(int*); // m_prgisloutLigature - associations += sizeof(int) * dichw; - associations += sizeof(sdata8*); // m_prgiComponent - associations += sizeof(sdata8) * dichw; -// obsolete += sizeof(void*); // m_psstrm - scalars += sizeof(int); // m_cslout - slot_count += seg.m_cslout; - for (int islout = 0; islout < seg.m_cslout; islout++) - { - GrSlotOutput * pslout = seg.m_prgslout + islout; - slot_abstract += sizeof(gid16) * 2; // m_chwGlyphID, m_chwActual - slot_abstract += sizeof(sdata8) * 4; // m_spsl, m_dirc, m_lb, m_nDirLevel -// slot_abstract += sizeof(float) * 8; // font/glyph metrics - slot_abstract += sizeof(short) * 5; // slot attributes - was 21 - slot_abstract += sizeof(int); // m_mJWidth0; - slot_abstract += sizeof(byte); // m_nJWeight0; - slot_abstract += sizeof(bool); // m_fInsertBefore - slot_abstract += sizeof(sdata8); // m_bIsSpace - slot_abstract += sizeof(byte); // m_cnCompPerLig - slot_abstract += sizeof(void*); // m_prgnVarLenBuf - slot_varLenBuf += pslout->CExtraSpaceSlout() * sizeof(u_intslot); - slot_abstract += sizeof(float); // m_xsPositionX, m_ysPositionY -// slot_abstract += sizeof(bool); // m_fAdvXSet, m_fAdvYSet - slot_scalars += sizeof(int) * 2; // m_ichwBefore/AfterAssoc - slot_scalars += sizeof(sdata8); // m_cComponents - slot_scalars += sizeof(int); // m_isloutClusterBase - slot_scalars += sizeof(sdata8); // m_disloutCluster - slot_scalars += sizeof(float) * 3; // m_xsClusterXOffset, m_xsClusterAdvance, m_xsAdvanceX - slot_scalars += sizeof(int); // m_igbb -// slot_scalars += sizeof(Rect); // m_rectBB - } - scalars += sizeof(int); // m_cnUserDefn - scalars += sizeof(int); // m_cnCompPerLig - scalars += sizeof(int); // m_cnFeat - glyphInfo_count += seg.m_cginf; - scalars += sizeof(int); // m_cginf; - scalars += sizeof(int); // m_isloutGinf0 - for (int iginf = 0; iginf < seg.m_cginf; iginf++) - { - ///GlyphInfo * pginf = seg.m_prgginf + iginf; - glyphInfo += sizeof(void *); // m_pseg - glyphInfo += sizeof(void *); // m_pslout - glyphInfo += sizeof(int); // m_islout - } - init += sizeof(int); // m_cslotRestartBackup - init += vectorOverhead; - init += sizeof(sdata8) * seg.m_vnSkipOffsets.capacity(); - wastedVector += sizeof(sdata8) * (seg.m_vnSkipOffsets.capacity() - seg.m_vnSkipOffsets.size()); - init += sizeof(DirCode); // m_dircPrevStrong - init += sizeof(DirCode); // m_dircPrevTerm - - //int grandTotal; - //grandTotal = overhead + pointers + scalars + strings + metrics + associations - // + init + obsolete + slot_count + slot_abstract + slot_varLenBuf + slot_scalars - // + slot_clusterMembers + glyphInfo_count + glyphInfo; - - //int totalPerSeg = grandTotal / seg_count; -} - -/*---------------------------------------------------------------------------------------------- - Write out the memory usage onto a stream. -----------------------------------------------------------------------------------------------*/ -void SegmentMemoryUsage::prettyPrint(std::ostream & strm) -{ - int totalBytes = overhead + pointers + scalars + strings + metrics + associations - + init + obsolete + slot_count + slot_abstract + slot_varLenBuf + slot_scalars - + slot_clusterMembers + glyphInfo_count + glyphInfo; - - int slotTotal = slot_abstract + slot_varLenBuf + slot_scalars + slot_clusterMembers; - - strm << "Number of segments: " << seg_count << "\n\n"; - - strm << "TOTALS\n"; - strm << "Overhead: " << overhead << "\n"; - strm << "Pointers: " << pointers << "\n"; - strm << "Scalars: " << scalars << "\n"; - strm << "Strings: " << strings << "\n"; - strm << "Metrics: " << metrics << "\n"; - strm << "Associations: " << associations << "\n"; - strm << "Obsolete: " << obsolete << "\n"; - strm << "Slot data: " << slotTotal << "\n"; - strm << " Abstract: " << slot_abstract << "\n"; - strm << " Var-length buffer: " << slot_varLenBuf << "\n"; - strm << " Scalars: " << slot_scalars << "\n"; - strm << " Cluster members: " << slot_clusterMembers << "\n"; - strm << "Glyph info: " << glyphInfo << "\n\n"; - - strm << "Wasted in vectors: " << wastedVector << "\n\n"; - - strm << "Total bytes used: " << totalBytes << "\n\n"; - - if (seg_count > 0) - { - strm << "AVERAGES\n"; - strm << "Overhead: " << overhead/seg_count << "\n"; - strm << "Pointers: " << pointers/seg_count << "\n"; - strm << "Scalars: " << scalars/seg_count << "\n"; - strm << "Strings: " << strings/seg_count << "\n"; - strm << "Metrics: " << metrics/seg_count << "\n"; - strm << "Associations: " << associations/seg_count << "\n"; - strm << "Obsolete: " << obsolete/seg_count << "\n"; - strm << "Slot data: " << slotTotal/seg_count << "\n"; - strm << " Abstract: " << slot_abstract/seg_count << "\n"; - strm << " Var-length buffer: " << slot_varLenBuf/seg_count << "\n"; - strm << " Scalars: " << slot_scalars/seg_count << "\n"; - strm << " Cluster members: " << slot_clusterMembers/seg_count << "\n"; - strm << "Glyph info: " << glyphInfo/seg_count << "\n\n"; - - strm << "Avg. bytes per segment: " << totalBytes / seg_count << "\n\n"; - - strm << "Avg. # of slots per segment: " << slot_count / seg_count << "\n\n"; - } -} - -} //namespace gr - |