Added TimerLog example
This commit is contained in:
@@ -15,6 +15,7 @@ endif()
|
||||
add_subdirectory( Applications )
|
||||
|
||||
set( log_source
|
||||
OpmLog/TimerLog.cpp
|
||||
OpmLog/CounterLog.cpp
|
||||
OpmLog/LogUtil.cpp
|
||||
OpmLog/Logger.cpp
|
||||
@@ -108,6 +109,7 @@ EclipseState/SimulationConfig/ThresholdPressure.cpp)
|
||||
|
||||
set( HEADER_FILES
|
||||
OpmLog/LogBackend.hpp
|
||||
OpmLog/TimerLog.hpp
|
||||
OpmLog/CounterLog.hpp
|
||||
OpmLog/Logger.hpp
|
||||
OpmLog/OpmLog.hpp
|
||||
|
||||
60
opm/parser/eclipse/OpmLog/TimerLog.cpp
Normal file
60
opm/parser/eclipse/OpmLog/TimerLog.cpp
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
Copyright 2014 Statoil ASA.
|
||||
|
||||
This file is part of the Open Porous Media project (OPM).
|
||||
|
||||
OPM is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OPM is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
#include <iomanip>
|
||||
|
||||
#include <opm/parser/eclipse/OpmLog/OpmLog.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/LogUtil.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/TimerLog.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/StreamLog.hpp>
|
||||
|
||||
|
||||
|
||||
namespace Opm {
|
||||
|
||||
TimerLog::TimerLog(const std::string& logFile) : StreamLog( logFile , StopTimer | StartTimer )
|
||||
{
|
||||
m_work.precision(8);
|
||||
}
|
||||
|
||||
TimerLog::TimerLog(std::ostream& os) : StreamLog( os , StopTimer | StartTimer )
|
||||
{
|
||||
m_work.precision(8);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TimerLog::addMessage(int64_t messageType , const std::string& msg ) {
|
||||
if (messageType == StopTimer) {
|
||||
clock_t stop = clock();
|
||||
double secondsElapsed = 1.0 * (m_start - stop) / CLOCKS_PER_SEC ;
|
||||
|
||||
m_work.str("");
|
||||
m_work << std::fixed << msg << ": " << secondsElapsed << " seconds ";
|
||||
StreamLog::addMessage( messageType , m_work.str());
|
||||
} else {
|
||||
if (messageType == StartTimer)
|
||||
m_start = clock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace Opm
|
||||
64
opm/parser/eclipse/OpmLog/TimerLog.hpp
Normal file
64
opm/parser/eclipse/OpmLog/TimerLog.hpp
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
Copyright 2014 Statoil ASA.
|
||||
|
||||
This file is part of the Open Porous Media project (OPM).
|
||||
|
||||
OPM is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OPM is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef OPM_TIMERLOG_HPP
|
||||
#define OPM_TIMERLOG_HPP
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <tuple>
|
||||
#include <memory>
|
||||
#include <map>
|
||||
|
||||
#include <opm/parser/eclipse/OpmLog/StreamLog.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/LogUtil.hpp>
|
||||
|
||||
/*
|
||||
This class is a simple demonstration of how the logging framework
|
||||
can be used to create a simple very special case logging facility.
|
||||
*/
|
||||
|
||||
namespace Opm {
|
||||
|
||||
class TimerLog : public StreamLog {
|
||||
public:
|
||||
static const int64_t StartTimer = 4096;
|
||||
static const int64_t StopTimer = 8192;
|
||||
|
||||
TimerLog(const std::string& logFile);
|
||||
TimerLog(std::ostream& os);
|
||||
|
||||
void addMessage(int64_t messageFlag ,
|
||||
const std::string& message);
|
||||
|
||||
void clear();
|
||||
~TimerLog() {};
|
||||
private:
|
||||
clock_t m_start;
|
||||
std::ostringstream m_work;
|
||||
};
|
||||
|
||||
typedef std::shared_ptr<TimerLog> TimerLogPtr;
|
||||
typedef std::shared_ptr<const TimerLog> TimerLogConstPtr;
|
||||
} // namespace Opm
|
||||
|
||||
#endif
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <opm/parser/eclipse/OpmLog/OpmLog.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/LogBackend.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/CounterLog.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/TimerLog.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/StreamLog.hpp>
|
||||
#include <opm/parser/eclipse/OpmLog/LogUtil.hpp>
|
||||
|
||||
@@ -185,6 +186,19 @@ BOOST_AUTO_TEST_CASE( CounterLogTesting) {
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(TestTimerLog) {
|
||||
Logger logger;
|
||||
std::ostringstream sstream;
|
||||
std::shared_ptr<TimerLog> timer = std::make_shared<TimerLog>(sstream);
|
||||
logger.addBackend( "TIMER" , timer );
|
||||
logger.addMessageType( TimerLog::StartTimer , "Start");
|
||||
logger.addMessageType( TimerLog::StopTimer , "Stop");
|
||||
|
||||
logger.addMessage( TimerLog::StartTimer , "");
|
||||
logger.addMessage( TimerLog::StopTimer , "This was fast");
|
||||
std::cout << sstream.str() << std::endl;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user