mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-03 17:19:43 +02:00
100 lines
2.7 KiB
C++
100 lines
2.7 KiB
C++
|
|
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
Diags.cpp
|
|
|
|
James Crook
|
|
|
|
|
|
********************************************************************//**
|
|
|
|
\class Diags
|
|
\brief Processing of the macros for recording bad events or performance
|
|
monitoring.
|
|
|
|
The idea of these macros is that we can include them in release
|
|
code at no risk. They
|
|
|
|
a) have almost zero performance impact.
|
|
b) will not flood the log with events.
|
|
|
|
This is achieved by a countdown which stops recording in the log
|
|
when the countdown is finished. The countdwon continues to
|
|
count down so that we track how many times the event happens.
|
|
|
|
|
|
*//********************************************************************/
|
|
|
|
|
|
|
|
#include "Diags.h"
|
|
|
|
#include <wx/defs.h>
|
|
#include <wx/hash.h>
|
|
#include <wx/intl.h>
|
|
#include <wx/log.h>
|
|
|
|
#include <wx/stopwatch.h>
|
|
|
|
static wxStopWatch MasterWatch;
|
|
static bool bStopWatchStarted = false;
|
|
|
|
void diagnostics_do_diag( t_diag_struct * pDiag ){
|
|
wxLog * pLog = wxLog::SetActiveTarget(NULL);
|
|
// this macro is empty if wxWidgets is not compiled in debug mode
|
|
wxLogDebug( wxT("%s"), pDiag->pMessage );
|
|
wxLog::SetActiveTarget(pLog);
|
|
}
|
|
void diagnostics_do_diag_mem( t_diag_struct * pDiag, long amount ){
|
|
wxLog * pLog = wxLog::SetActiveTarget(NULL);
|
|
wxLogDebug( wxT("%s %l"), pDiag->pMessage, amount );
|
|
wxLog::SetActiveTarget(pLog);
|
|
pDiag->total += amount;
|
|
pDiag->most_recent = amount;
|
|
if( pDiag->countdown == (pDiag->initial_count -1 )){
|
|
pDiag->most = amount;
|
|
pDiag->least = amount;
|
|
}
|
|
else if( amount > pDiag->most )
|
|
pDiag->most = amount;
|
|
else if( amount < pDiag->least )
|
|
pDiag->least = amount;
|
|
}
|
|
|
|
void diagnostics_do_perfmon_start( t_diag_struct * pDiag, t_diag_struct ** pRememberMe ){
|
|
if( *pRememberMe == NULL ){
|
|
*pRememberMe = pDiag;
|
|
if( !bStopWatchStarted ){
|
|
bStopWatchStarted = true;
|
|
MasterWatch.Start();
|
|
}
|
|
}
|
|
pDiag->most_recent = MasterWatch.Time();
|
|
}
|
|
|
|
void diagnostics_do_perfmon_stop( t_diag_struct ** ppDiag ){
|
|
t_diag_struct * pDiag = *ppDiag;
|
|
*ppDiag = NULL;
|
|
long amount = MasterWatch.Time() - pDiag->most_recent;
|
|
pDiag->total += amount;
|
|
pDiag->most_recent = amount;
|
|
if( pDiag->countdown == (pDiag->initial_count -1 )){
|
|
pDiag->most = amount;
|
|
pDiag->least = amount;
|
|
}
|
|
else if( amount > pDiag->most )
|
|
pDiag->most = amount;
|
|
else if( amount < pDiag->least )
|
|
pDiag->least = amount;
|
|
wxLog * pLog = wxLog::SetActiveTarget(NULL);
|
|
wxLogDebug( wxT("%s %f seconds"), pDiag->pMessage, ((float)amount)/1000.0f );
|
|
wxLog::SetActiveTarget(pLog);
|
|
}
|
|
|
|
|
|
void diag_sample_test(){
|
|
DIAG("Flip counter");// Flip counter will show in log ten times, then just count.
|
|
}
|