in Common/Common.h [868:962]
string SystemInformation::GetXml(UINT32 indent) const
{
char szBuffer[64]; // enough for 64bit mask (17ch) and timestamp
int nWritten;
string sXml;
AddXmlInc(sXml, "<System>\n");
// identify computer which ran the test
AddXml(sXml, "<ComputerName>");
sXml += sComputerName;
sXml += "</ComputerName>\n";
// identify tool version which performed the test
AddXmlInc(sXml, "<Tool>\n");
AddXml(sXml,"<Version>" DISKSPD_NUMERIC_VERSION_STRING "</Version>\n");
AddXml(sXml, "<VersionDate>" DISKSPD_DATE_VERSION_STRING "</VersionDate>\n");
AddXmlDec(sXml, "</Tool>\n");
AddXml(sXml, "<RunTime>");
if (StartTime.wYear) {
nWritten = sprintf_s(szBuffer, _countof(szBuffer),
"%u/%02u/%02u %02u:%02u:%02u UTC",
StartTime.wYear,
StartTime.wMonth,
StartTime.wDay,
StartTime.wHour,
StartTime.wMinute,
StartTime.wSecond);
assert(nWritten && nWritten < _countof(szBuffer));
sXml += szBuffer;
}
sXml += "</RunTime>\n";
// processor topology
AddXmlInc(sXml, "<ProcessorTopology>\n");
for (const auto& g : processorTopology._vProcessorGroupInformation)
{
AddXml(sXml, "<Group Group=\"");
sXml += to_string(g._groupNumber);
sXml += "\" MaximumProcessors=\"";
sXml += to_string(g._maximumProcessorCount);
sXml += "\" ActiveProcessors=\"";
sXml += to_string(g._activeProcessorCount);
sXml += "\" ActiveProcessorMask=\"0x";
nWritten = sprintf_s(szBuffer, _countof(szBuffer), "%Ix", g._activeProcessorMask);
assert(nWritten && nWritten < _countof(szBuffer));
sXml += szBuffer;
sXml += "\"/>\n";
}
for (const auto& n : processorTopology._vProcessorNumaInformation)
{
AddXml(sXml, "<Node Node=\"");
sXml += to_string(n._nodeNumber);
sXml += "\" Group=\"";
sXml += to_string(n._groupNumber);
sXml += "\" Processors=\"0x";
nWritten = sprintf_s(szBuffer, _countof(szBuffer), "%Ix", n._processorMask);
assert(nWritten && nWritten < _countof(szBuffer));
sXml += szBuffer;
sXml += "\"/>\n";
}
for (const auto& s : processorTopology._vProcessorSocketInformation)
{
AddXmlInc(sXml, "<Socket>\n");
for (const auto& g : s._vProcessorMasks)
{
AddXml(sXml, "<Group Group=\"");
sXml += to_string(g.first);
sXml += "\" Processors=\"0x";
nWritten = sprintf_s(szBuffer, _countof(szBuffer), "%Ix", g.second);
assert(nWritten && nWritten < _countof(szBuffer));
sXml += szBuffer;
sXml += "\"/>\n";
}
AddXmlDec(sXml, "</Socket>\n");
}
for (const auto& h : processorTopology._vProcessorHyperThreadInformation)
{
AddXml(sXml, "<HyperThread Group=\"");
sXml += to_string(h._groupNumber);
sXml += "\" Processors=\"0x";
nWritten = sprintf_s(szBuffer, _countof(szBuffer), "%Ix", h._processorMask);
assert(nWritten && nWritten < _countof(szBuffer));
sXml += szBuffer;
sXml += "\"/>\n";
}
AddXmlDec(sXml, "</ProcessorTopology>\n");
AddXmlDec(sXml, "</System>\n");
return sXml;
}