XN_C_API XnStatus xnLogClose() { // notify all writers (while allowing them to unregister themselves) LogData& logData = LogData::GetInstance(); xnl::AutoCSLocker locker(logData.hLock); XnLogWritersList::ConstIterator it = logData.writers.Begin(); while (it != logData.writers.End()) { XnLogWritersList::ConstIterator curr = it; ++it; const XnLogWriter* pWriter = *curr; pWriter->OnClosing(pWriter->pCookie); } logData.strLogDir[0] = '\0'; logData.strSessionTimestamp[0] = '\0'; logData.SetMinSeverityGlobally(XN_LOG_SEVERITY_NONE); // turn off all dumps xnDumpSetMaskState(XN_LOG_MASK_ALL, FALSE); return XN_STATUS_OK; }
void LinkContInputStream::SetDumpOn(XnBool bDumpOn) { XnStatus nRetVal = XN_STATUS_OK; (void)nRetVal; nRetVal = xnDumpSetMaskState(m_strDumpName, bDumpOn); if (nRetVal != XN_STATUS_OK) { xnLogWarning(XN_MASK_INPUT_STREAM, "Failed to set dump state: %s", xnGetStatusString(nRetVal)); XN_ASSERT(FALSE); } }
OniStatus LinkOniStream::setProperty(int propertyId, const void* data, int dataSize) { switch(propertyId) { case PS_PROPERTY_DUMP_DATA: { int val; GET_PROP_VALUE_INT(val, data, dataSize); XnChar strDumpName[XN_FILE_MAX_PATH] = ""; xnLinkGetStreamDumpName(m_streamId, strDumpName, sizeof(strDumpName)); xnDumpSetMaskState(strDumpName, val == 1); } break; default: return ONI_STATUS_BAD_PARAMETER; } return ONI_STATUS_OK; }
XN_C_API XnStatus xnLogClose() { // notify all writers (while allowing them to unregister themselves) XnLogWritersList::ConstIterator it = g_logData.m_writers.begin(); while (it != g_logData.m_writers.end()) { XnLogWritersList::ConstIterator curr = it; ++it; const XnLogWriter* pWriter = *curr; pWriter->OnClosing(pWriter->pCookie); } g_logData.m_strLogDir[0] = '\0'; g_logData.m_strTime[0] = '\0'; g_logData.m_LogMasks.Clear(); g_logData.m_nLogFilteringType = XN_LOG_WRITE_NONE; g_logData.m_nFilterSeverity = XN_LOG_ERROR; // turn off all dumps xnDumpSetMaskState(XN_LOG_MASK_ALL, FALSE); return XN_STATUS_OK; }
XN_C_API void* xnOSLogMemAlloc(void* pMemBlock, XnAllocationType nAllocType, XnUInt32 nBytes, const XnChar* csFunction, const XnChar* csFile, XnUInt32 nLine, const XnChar* csAdditional) { static XnBool bFirstTime = TRUE; static XnBool bReentrent = FALSE; if (bFirstTime) { bFirstTime = FALSE; printf("************************************************************\n"); printf("** WARNING: Memory Profiling is on! **\n"); printf("************************************************************\n"); bReentrent = TRUE; xnOSCreateCriticalSection(&g_hCS); #ifdef XN_MEMORY_PROFILING_DUMP xnDumpSetMaskState("MemProf", TRUE); #endif g_dump = xnDumpFileOpen("MemProf", "MemProfiling.log"); xnDumpFileWriteString(g_dump, "Entry,Address,AllocType,Bytes,Function,File,Line,AdditionalInfo\n"); bReentrent = FALSE; } // ignore stuff that is being allocated during "first time" if (bReentrent) { return pMemBlock; } XnMemBlockDataNode* pNode; pNode = (XnMemBlockDataNode*)xnOSMalloc(sizeof(XnMemBlockDataNode)); pNode->Data.pMemBlock = pMemBlock; pNode->Data.nAllocType = nAllocType; pNode->Data.nBytes = nBytes; pNode->Data.csFunction = csFunction; pNode->Data.csFile = csFile; pNode->Data.nLine = nLine; pNode->Data.csAdditional = csAdditional; pNode->Data.nFrames = XN_MEM_PROF_MAX_FRAMES; xnDumpFileWriteString(g_dump, "Alloc,0x%x,%s,%u,%s,%s,%u,%s\n", pMemBlock, XnGetAllocTypeString(nAllocType), nBytes, csFunction, csFile, nLine, csAdditional); // try to get call stack (skip 2 frames - this one and the alloc func) XnChar* pstrFrames[XN_MEM_PROF_MAX_FRAMES]; for (XnUInt32 i = 0; i < XN_MEM_PROF_MAX_FRAMES; ++i) { pstrFrames[i] = pNode->Data.aFrames[i]; } if (XN_STATUS_OK != xnOSGetCurrentCallStack(2, pstrFrames, XN_MEM_PROF_MAX_FRAME_LEN, &pNode->Data.nFrames)) { pNode->Data.nFrames = 0; } pNode->pNext = NULL; XnAutoCSLocker lock(g_hCS); if (g_allocatedMemory.pLast == NULL) { g_allocatedMemory.pFirst = g_allocatedMemory.pLast = pNode; } else { g_allocatedMemory.pLast->pNext = pNode; g_allocatedMemory.pLast = pNode; } return pMemBlock; }
XN_C_API XnStatus xnLogInitFromXmlFile(const XnChar* strFileName) { XnStatus nRetVal = XN_STATUS_OK; nRetVal = xnLogInitSystem(); XN_IS_STATUS_OK(nRetVal); TiXmlDocument doc; nRetVal = xnXmlLoadDocument(doc, strFileName); XN_IS_STATUS_OK(nRetVal); TiXmlElement* pRootElem = doc.RootElement(); if (pRootElem != NULL) { TiXmlElement* pLog = pRootElem->FirstChildElement("Log"); if (pLog != NULL) { XnBool bOn; // configure filters TiXmlElement* pLogLevel = pLog->FirstChildElement("LogLevel"); if (pLogLevel != NULL) { XnInt nValue; nRetVal = xnXmlReadIntAttribute(pLogLevel, "value", &nValue); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLogSetSeverityFilter((XnLogSeverity)nValue); XN_IS_STATUS_OK(nRetVal); } TiXmlElement* pMasks = pLog->FirstChildElement("Masks"); if (pMasks != NULL) { TiXmlElement* pMask = pMasks->FirstChildElement("Mask"); while (pMask != NULL) { const XnChar* strName; nRetVal = xnXmlReadStringAttribute(pMask, "name", &strName); XN_IS_STATUS_OK(nRetVal); nRetVal = xnXmlReadBoolAttribute(pMask, "on", &bOn); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLogSetMaskState(strName, bOn); XN_IS_STATUS_OK(nRetVal); pMask = pMask->NextSiblingElement("Mask"); } } // configure writers if (pLog->Attribute("writeToConsole")) { nRetVal = xnXmlReadBoolAttribute(pLog, "writeToConsole", &bOn); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLogSetConsoleOutput(bOn); XN_IS_STATUS_OK(nRetVal); } if (pLog->Attribute("writeToFile")) { nRetVal = xnXmlReadBoolAttribute(pLog, "writeToFile", &bOn); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLogSetFileOutput(bOn); XN_IS_STATUS_OK(nRetVal); } if (pLog->Attribute("writeLineInfo")) { nRetVal = xnXmlReadBoolAttribute(pLog, "writeLineInfo", &bOn); XN_IS_STATUS_OK(nRetVal); nRetVal = xnLogSetLineInfo(bOn); XN_IS_STATUS_OK(nRetVal); } // Dumps TiXmlElement* pDumps = pLog->FirstChildElement("Dumps"); if (pDumps != NULL) { TiXmlElement* pDump = pDumps->FirstChildElement("Dump"); while (pDump != NULL) { const XnChar* strName; nRetVal = xnXmlReadStringAttribute(pDump, "name", &strName); XN_IS_STATUS_OK(nRetVal); nRetVal = xnXmlReadBoolAttribute(pDump, "on", &bOn); XN_IS_STATUS_OK(nRetVal); nRetVal = xnDumpSetMaskState(strName, bOn); XN_IS_STATUS_OK(nRetVal); pDump = pDump->NextSiblingElement("Dump"); } } } } return (XN_STATUS_OK); }