Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

137 lines
3.1 KiB

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996.
//
// File: B E N C H M R K . C P P
//
// Contents: Benchmarking class
//
// Notes:
//
// Author: billbe 13 Oct 1997
//
//---------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "benchmrk.h"
CBenchmark::CBenchmark()
: m_i64Frequency(1000),
m_sznDescription(NULL),
m_i64TotalTime(0),
m_fStarted(FALSE)
{
LARGE_INTEGER li1;
// Check if QueryPerformanceCounter is supported
if (QueryPerformanceCounter(&li1))
{
// Now get # of ticks per second
QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER*>
(&m_i64Frequency));
//wprintf(L"QueryPerformanceFrequency: %I64d\n", m_i64Frequency);
m_fSupported = TRUE;
}
else
{
// TraceTag(ttidBenchmark, "High performance counter is not supported.");
m_fSupported = FALSE;
wprintf(L"QueryPerformanceFrequency: not supported!!\n");
}
}
CBenchmark::~CBenchmark()
{
delete [] m_sznDescription;
}
void
CBenchmark::Start(PCWSTR sznDescription)
{
// If QueryPerformanceCounter is supported
if (m_fSupported)
{
// replace with new one if specified
if (sznDescription)
{
// delete the old description
delete [] m_sznDescription;
m_sznDescription = new WCHAR[lstrlen(sznDescription) + 1];
if (m_sznDescription)
{
lstrcpy(m_sznDescription, sznDescription);
}
}
else
{
// no description specified clear the member variable
m_sznDescription = NULL;
}
m_fStarted = TRUE;
m_i64TotalTime = 0;
// Record our start time
QueryPerformanceCounter(reinterpret_cast<LARGE_INTEGER*>
(&m_i64StartTime));
}
}
void
CBenchmark::Stop()
{
__int64 i64Stop;
// Record our stop time
QueryPerformanceCounter(reinterpret_cast<LARGE_INTEGER*>(&i64Stop));
// If start was called prior to stop, then record the total time and
// reset our m_fStarted flag
//
if (m_fStarted)
{
m_fStarted = FALSE;
m_i64TotalTime = i64Stop - m_i64StartTime;
}
else
{
// invalidate previous benchmark since stop was called before start
m_i64TotalTime = 0;
}
}
PCWSTR
CBenchmark::SznBenchmarkSeconds(unsigned short usPrecision)
{
WCHAR sznFmt[10];
swprintf(sznFmt, L"%%.%df", usPrecision);
swprintf(m_sznSeconds, sznFmt, DblBenchmarkSeconds());
return m_sznSeconds;
}
CBenchmark g_timer;
void timer_start()
{
g_timer.Start(NULL);
}
void timer_stop()
{
g_timer.Stop();
}
PCWSTR timer_secs()
{
return g_timer.SznBenchmarkSeconds(5);
}
double timer_time()
{
return g_timer.DblBenchmarkSeconds();
}