string SystemInformation::GetXml()

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;
    }