Performance counter rework: More comments, code cleaning, and move GetRunningMicroSecs() prototype from common.h to profile.h.

profile.h should now contain all info for profiling.
This commit is contained in:
jean-pierre charras 2017-01-02 13:49:36 +01:00
parent fff449ecf0
commit d56a49d218
9 changed files with 45 additions and 47 deletions

View File

@ -42,7 +42,6 @@
#include "common.h"
#include "3d_cache.h"
#include "3d_info.h"
#include "common.h"
#include "sg/scenegraph.h"
#include "3d_filename_resolver.h"
#include "3d_plugin_manager.h"

View File

@ -39,6 +39,7 @@
#include <class_board.h>
#include "status_text_reporter.h"
#include <gl_context_mgr.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
/**
* Trace mask used to enable or disable the trace output of this class.

View File

@ -35,6 +35,7 @@
#include "../../3d_fastmath.h"
#include <trigo.h>
#include <project.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CFILLEDCIRCLE2D * aFilledCircle,

View File

@ -46,6 +46,7 @@
#include <class_module.h>
#include <base_units.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
/**
* Scale convertion from 3d model units to pcb units

View File

@ -36,6 +36,7 @@
#include "3d_fastmath.h"
#include "3d_math.h"
#include "../common_ogl/ogl_utils.h"
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
// This should be used in future for the function
// convertLinearToSRGB

View File

@ -307,7 +307,7 @@ void OPENGL_GAL::BeginDrawing()
compositor->SetBuffer( OPENGL_COMPOSITOR::DIRECT_RENDERING );
#ifdef __WXDEBUG__
totalRealTime.stop();
totalRealTime.Stop();
wxLogTrace( "GAL_PROFILE",
wxT( "OPENGL_GAL::BeginDrawing(): %.1f ms" ), totalRealTime.msecs() );
#endif /* __WXDEBUG__ */
@ -341,7 +341,7 @@ void OPENGL_GAL::EndDrawing()
GL_CONTEXT_MANAGER::Get().UnlockCtx( glPrivContext );
#ifdef __WXDEBUG__
totalRealTime.stop();
totalRealTime.Stop();
wxLogTrace( "GAL_PROFILE", wxT( "OPENGL_GAL::EndDrawing(): %.1f ms" ), totalRealTime.msecs() );
#endif /* __WXDEBUG__ */
}

View File

@ -43,23 +43,6 @@ unsigned GetRunningMicroSecs()
return unsigned( t );
}
#if 0
// test program
#include <stdio.h>
int main( int argc, char** argv )
{
unsigned then = GetRunningMicroSecs();
Sleep( 2000 ); // Windows Sleep( msecs )
printf( "delta: %u\n", GetRunningMicroSecs() - then );
return 0;
}
#endif
#elif defined(HAVE_CLOCK_GETTIME)
#include <time.h>

View File

@ -1,10 +1,10 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014-2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2014-2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2007-2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -304,14 +304,6 @@ double RoundTo0( double x, double precision );
*/
void wxStringSplit( const wxString& aText, wxArrayString& aStrings, wxChar aSplitter );
/**
* Function GetRunningMicroSecs
* returns an ever increasing indication of elapsed microseconds. Use this
* by computing differences between two calls.
* @author Dick Hollenbeck
*/
unsigned GetRunningMicroSecs();
/**
* Function SystemDirsAppend

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2013 CERN
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
* 2016 KiCad Developers, see AUTHORS.txt for contributors.
* 2017 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -36,6 +36,11 @@
#include <iostream>
#include <iomanip>
/**
* The class PROF_COUNTER is a small class to help profiling.
* It allows the calculation of the elapsed time (in millisecondes) between
* its creation (or the last call to Start() ) and the last call to Stop()
*/
class PROF_COUNTER
{
public:
@ -53,22 +58,26 @@ public:
/**
* Creates a PROF_COUNTER for measuring an elapsed time in milliseconds
* The string that will be printed in message is left empty.
* @param aAutostart = true (default) to immediately start the timer
* The counter is started and the string to print in message is left empty.
*/
PROF_COUNTER( bool aAutostart = true ) :
m_running( false )
PROF_COUNTER()
{
if( aAutostart )
Start();
}
/**
* Starts or restarts the counter
*/
void Start()
{
m_running = true;
m_starttime = std::chrono::system_clock::now();
}
/**
* save the time when this function was called, and set the counter stane to stop
*/
void Stop()
{
if( !m_running )
@ -82,15 +91,12 @@ public:
*/
void Show()
{
TIME_POINT display_stoptime;
TIME_POINT display_stoptime = m_running ?
std::chrono::system_clock::now() :
m_stoptime;
if( m_running )
display_stoptime = std::chrono::system_clock::now();
else
display_stoptime = m_stoptime;
std::chrono::duration<double, std::milli> d = display_stoptime - m_starttime;
std::cerr << m_name << " took " << std::setprecision(1) << d.count() << "milliseconds." << std::endl;
std::chrono::duration<double, std::milli> elapsed = display_stoptime - m_starttime;
std::cerr << m_name << " took " << elapsed.count() << " milliseconds." << std::endl;
}
/**
@ -98,8 +104,13 @@ public:
*/
double msecs() const
{
std::chrono::duration<double, std::milli> d = m_stoptime - m_starttime;
return d.count();
TIME_POINT stoptime = m_running ?
std::chrono::system_clock::now() :
m_stoptime;
std::chrono::duration<double, std::milli> elapsed = stoptime - m_starttime;
return elapsed.count();
}
private:
@ -112,4 +123,13 @@ private:
};
/**
* Function GetRunningMicroSecs
* An alternate way to calculate an elapset time (in microsecondes) to class PROF_COUNTER
* @return an ever increasing indication of elapsed microseconds.
* Use this by computing differences between two calls.
* @author Dick Hollenbeck
*/
unsigned GetRunningMicroSecs();
#endif