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