string Target::GetXml() const { char buffer[4096]; string sXml("<Target>\n"); sXml += "<Path>" + _sPath + "</Path>\n"; sprintf_s(buffer, _countof(buffer), "<BlockSize>%u</BlockSize>\n", _dwBlockSize); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<BaseFileOffset>%I64u</BaseFileOffset>\n", _ullBaseFileOffset); sXml += buffer; sXml += _fSequentialScanHint ? "<SequentialScan>true</SequentialScan>\n" : "<SequentialScan>false</SequentialScan>\n"; sXml += _fRandomAccessHint ? "<RandomAccess>true</RandomAccess>\n" : "<RandomAccess>false</RandomAccess>\n"; sXml += _fUseLargePages ? "<UseLargePages>true</UseLargePages>\n" : "<UseLargePages>false</UseLargePages>\n"; sXml += _fDisableAllCache ? "<DisableAllCache>true</DisableAllCache>\n" : "<DisableAllCache>false</DisableAllCache>\n"; // normalize cache controls - disabling the OS cache is included if all caches are disabled, // so specifying it twice is not neccesary (this generates a warning on the cmdline) if (!_fDisableAllCache) { sXml += _fDisableOSCache ? "<DisableOSCache>true</DisableOSCache>\n" : "<DisableOSCache>false</DisableOSCache>\n"; } sXml += "<WriteBufferContent>\n"; if (_fZeroWriteBuffers) { sXml += "<Pattern>zero</Pattern>\n"; } else if (_cbRandomDataWriteBuffer == 0) { sXml += "<Pattern>sequential</Pattern>\n"; } else { sXml += "<Pattern>random</Pattern>\n"; sXml += "<RandomDataSource>\n"; sprintf_s(buffer, _countof(buffer), "<SizeInBytes>%I64u</SizeInBytes>\n", _cbRandomDataWriteBuffer); sXml += buffer; if (_sRandomDataWriteBufferSourcePath != "") { sXml += "<FilePath>" + _sRandomDataWriteBufferSourcePath + "</FilePath>\n"; } sXml += "</RandomDataSource>\n"; } sXml += "</WriteBufferContent>\n"; sXml += _fParallelAsyncIO ? "<ParallelAsyncIO>true</ParallelAsyncIO>\n" : "<ParallelAsyncIO>false</ParallelAsyncIO>\n"; if (_fUseBurstSize) { sprintf_s(buffer, _countof(buffer), "<BurstSize>%u</BurstSize>\n", _dwBurstSize); sXml += buffer; } if (_fThinkTime) { sprintf_s(buffer, _countof(buffer), "<ThinkTime>%u</ThinkTime>\n", _dwThinkTime); sXml += buffer; } if (_fCreateFile) { sprintf_s(buffer, _countof(buffer), "<FileSize>%I64u</FileSize>\n", _ullFileSize); sXml += buffer; } // If XML contains <Random>, <StrideSize> is ignored if (_fUseRandomAccessPattern) { sprintf_s(buffer, _countof(buffer), "<Random>%I64u</Random>\n", GetBlockAlignmentInBytes()); sXml += buffer; } else { sprintf_s(buffer, _countof(buffer), "<StrideSize>%I64u</StrideSize>\n", GetBlockAlignmentInBytes()); sXml += buffer; sXml += _fInterlockedSequential ? "<InterlockedSequential>true</InterlockedSequential>\n" : "<InterlockedSequential>false</InterlockedSequential>\n"; } sprintf_s(buffer, _countof(buffer), "<ThreadStride>%I64u</ThreadStride>\n", _ullThreadStride); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<MaxFileSize>%I64u</MaxFileSize>\n", _ullMaxFileSize); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<RequestCount>%u</RequestCount>\n", _dwRequestCount); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<WriteRatio>%u</WriteRatio>\n", _ulWriteRatio); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<Throughput>%u</Throughput>\n", _dwThroughputBytesPerMillisecond); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<ThreadsPerFile>%u</ThreadsPerFile>\n", _dwThreadsPerFile); sXml += buffer; if (_ioPriorityHint == IoPriorityHintVeryLow) { sXml += "<IOPriority>1</IOPriority>\n"; } else if (_ioPriorityHint == IoPriorityHintLow) { sXml += "<IOPriority>2</IOPriority>\n"; } else if (_ioPriorityHint == IoPriorityHintNormal) { sXml += "<IOPriority>3</IOPriority>\n"; } else { sXml += "<IOPriority>* UNSUPPORTED *</IOPriority>\n"; } sXml += "</Target>\n"; return sXml; }
string Target::GetXml() const { char buffer[4096]; string sXml("<Target>\n"); sXml += "<Path>" + _sPath + "</Path>\n"; sprintf_s(buffer, _countof(buffer), "<BlockSize>%u</BlockSize>\n", _dwBlockSize); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<BaseFileOffset>%I64u</BaseFileOffset>\n", _ullBaseFileOffset); sXml += buffer; sXml += _fSequentialScanHint ? "<SequentialScan>true</SequentialScan>\n" : "<SequentialScan>false</SequentialScan>\n"; sXml += _fRandomAccessHint ? "<RandomAccess>true</RandomAccess>\n" : "<RandomAccess>false</RandomAccess>\n"; sXml += _fTemporaryFileHint ? "<TemporaryFile>true</TemporaryFile>\n" : "<TemporaryFile>false</TemporaryFile>\n"; sXml += _fUseLargePages ? "<UseLargePages>true</UseLargePages>\n" : "<UseLargePages>false</UseLargePages>\n"; // TargetCacheMode::Cached is implied default switch (_cacheMode) { case TargetCacheMode::DisableAllCache: sXml += "<DisableAllCache>true</DisableAllCache>\n"; break; case TargetCacheMode::DisableLocalCache: sXml += "<DisableLocalCache>true</DisableLocalCache>\n"; break; case TargetCacheMode::DisableOSCache: sXml += "<DisableOSCache>true</DisableOSCache>\n"; break; } sXml += "<WriteBufferContent>\n"; if (_fZeroWriteBuffers) { sXml += "<Pattern>zero</Pattern>\n"; } else if (_cbRandomDataWriteBuffer == 0) { sXml += "<Pattern>sequential</Pattern>\n"; } else { sXml += "<Pattern>random</Pattern>\n"; sXml += "<RandomDataSource>\n"; sprintf_s(buffer, _countof(buffer), "<SizeInBytes>%I64u</SizeInBytes>\n", _cbRandomDataWriteBuffer); sXml += buffer; if (_sRandomDataWriteBufferSourcePath != "") { sXml += "<FilePath>" + _sRandomDataWriteBufferSourcePath + "</FilePath>\n"; } sXml += "</RandomDataSource>\n"; } sXml += "</WriteBufferContent>\n"; sXml += _fParallelAsyncIO ? "<ParallelAsyncIO>true</ParallelAsyncIO>\n" : "<ParallelAsyncIO>false</ParallelAsyncIO>\n"; if (_fUseBurstSize) { sprintf_s(buffer, _countof(buffer), "<BurstSize>%u</BurstSize>\n", _dwBurstSize); sXml += buffer; } if (_fThinkTime) { sprintf_s(buffer, _countof(buffer), "<ThinkTime>%u</ThinkTime>\n", _dwThinkTime); sXml += buffer; } if (_fCreateFile) { sprintf_s(buffer, _countof(buffer), "<FileSize>%I64u</FileSize>\n", _ullFileSize); sXml += buffer; } // If XML contains <Random>, <StrideSize> is ignored if (_fUseRandomAccessPattern) { sprintf_s(buffer, _countof(buffer), "<Random>%I64u</Random>\n", GetBlockAlignmentInBytes()); sXml += buffer; } else { sprintf_s(buffer, _countof(buffer), "<StrideSize>%I64u</StrideSize>\n", GetBlockAlignmentInBytes()); sXml += buffer; sXml += _fInterlockedSequential ? "<InterlockedSequential>true</InterlockedSequential>\n" : "<InterlockedSequential>false</InterlockedSequential>\n"; } sprintf_s(buffer, _countof(buffer), "<ThreadStride>%I64u</ThreadStride>\n", _ullThreadStride); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<MaxFileSize>%I64u</MaxFileSize>\n", _ullMaxFileSize); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<RequestCount>%u</RequestCount>\n", _dwRequestCount); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<WriteRatio>%u</WriteRatio>\n", _ulWriteRatio); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<Throughput>%u</Throughput>\n", _dwThroughputBytesPerMillisecond); sXml += buffer; sprintf_s(buffer, _countof(buffer), "<ThreadsPerFile>%u</ThreadsPerFile>\n", _dwThreadsPerFile); sXml += buffer; if (_ioPriorityHint == IoPriorityHintVeryLow) { sXml += "<IOPriority>1</IOPriority>\n"; } else if (_ioPriorityHint == IoPriorityHintLow) { sXml += "<IOPriority>2</IOPriority>\n"; } else if (_ioPriorityHint == IoPriorityHintNormal) { sXml += "<IOPriority>3</IOPriority>\n"; } else { sXml += "<IOPriority>* UNSUPPORTED *</IOPriority>\n"; } sXml += "</Target>\n"; return sXml; }