diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 0c7009717b..149a47fd7d 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -798,7 +798,7 @@ Document::Document(const char* documentName) #ifdef FC_LOGUPDATECHAIN Console().Log("+App::Document: %p\n", this); #endif - std::string CreationDateString = Base::TimeInfo::currentDateTimeString(); + std::string CreationDateString = Base::Tools::currentDateTimeString(); std::string Author = App::GetApplication() .GetParameterGroupByPath("User parameter:BaseApp/Preferences/Document") ->GetASCII("prefAuthor", ""); @@ -1606,7 +1606,7 @@ bool Document::save () TipName.setValue(Tip.getValue()->getNameInDocument()); } - std::string LastModifiedDateString = Base::TimeInfo::currentDateTimeString(); + std::string LastModifiedDateString = Base::Tools::currentDateTimeString(); LastModifiedDate.setValue(LastModifiedDateString.c_str()); // set author if needed bool saveAuthor = App::GetApplication().GetParameterGroupByPath @@ -1799,7 +1799,7 @@ private: if (useFCBakExtension) { std::stringstream str; Base::TimeInfo ti = fi.lastModified(); - time_t s =ti.getSeconds(); + time_t s = ti.getTime_t(); struct tm * timeinfo = localtime(& s); char buffer[100]; diff --git a/src/Base/CMakeLists.txt b/src/Base/CMakeLists.txt index a21b6c240a..85a48dae43 100644 --- a/src/Base/CMakeLists.txt +++ b/src/Base/CMakeLists.txt @@ -264,7 +264,6 @@ SET(FreeCADBase_CPP_SRCS Stream.cpp Swap.cpp ${SWIG_SRCS} - TimeInfo.cpp Tools.cpp Tools2D.cpp Tools3D.cpp diff --git a/src/Base/PreCompiled.h b/src/Base/PreCompiled.h index b38b44a68d..791715b249 100644 --- a/src/Base/PreCompiled.h +++ b/src/Base/PreCompiled.h @@ -37,6 +37,7 @@ #include #include #include +#include #ifdef FC_OS_WIN32 #define _USE_MATH_DEFINES #endif // FC_OS_WIN32 diff --git a/src/Base/TimeInfo.cpp b/src/Base/TimeInfo.cpp deleted file mode 100644 index 0fd6bb9fe9..0000000000 --- a/src/Base/TimeInfo.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2011 Jürgen Riegel * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - - -#include "PreCompiled.h" - -#ifndef _PreComp_ -#include -#include -#if defined(FC_OS_LINUX) || defined(__MINGW32__) -#include -#endif -#endif - -#include "TimeInfo.h" - - -using namespace Base; - - -/** - * A constructor. - * A more elaborate description of the constructor. - */ -TimeInfo::TimeInfo() -{ - setCurrent(); -} - -/** - * A destructor. - * A more elaborate description of the destructor. - */ -TimeInfo::~TimeInfo() = default; - - -//************************************************************************** -// separator for other implementation aspects - -void TimeInfo::setCurrent() -{ - // clang-format off -#if defined(FC_OS_BSD) || defined(FC_OS_LINUX) || defined(__MINGW32__) - struct timeval tv {}; - gettimeofday(&tv, nullptr); - timebuffer.time = tv.tv_sec; - timebuffer.millitm = tv.tv_usec / 1000; -#elif defined(FC_OS_WIN32) - _ftime(&timebuffer); -#else - ftime(&timebuffer); // deprecated -#endif - // clang-format on -} - -void TimeInfo::setTime_t(int64_t seconds) -{ - timebuffer.time = seconds; -} - -std::string TimeInfo::currentDateTimeString() -{ - return QDateTime::currentDateTime() - .toTimeSpec(Qt::OffsetFromUTC) - .toString(Qt::ISODate) - .toStdString(); -} - -std::string TimeInfo::diffTime(const TimeInfo& timeStart, const TimeInfo& timeEnd) -{ - std::stringstream str; - str << diffTimeF(timeStart, timeEnd); - return str.str(); -} - -float TimeInfo::diffTimeF(const TimeInfo& timeStart, const TimeInfo& timeEnd) -{ - int64_t ds = int64_t(timeEnd.getSeconds() - timeStart.getSeconds()); - int dms = int(timeEnd.getMiliseconds()) - int(timeStart.getMiliseconds()); - - return float(ds) + float(dms) * 0.001F; -} - -TimeInfo TimeInfo::null() -{ - TimeInfo ti; - ti.timebuffer = {}; - return ti; -} - -bool TimeInfo::isNull() const -{ - return (*this) == TimeInfo::null(); -} diff --git a/src/Base/TimeInfo.h b/src/Base/TimeInfo.h index ae9164d41d..433fb7c764 100644 --- a/src/Base/TimeInfo.h +++ b/src/Base/TimeInfo.h @@ -1,5 +1,6 @@ /*************************************************************************** * Copyright (c) 2011 Jürgen Riegel * + * Copyright (c) 2024 Ladislav Michl * * * * This file is part of the FreeCAD CAx development system. * * * @@ -24,135 +25,109 @@ #ifndef BASE_TIMEINFO_H #define BASE_TIMEINFO_H -// Std. configurations - - -#include -#if defined(FC_OS_BSD) -#include -#else -#include -#endif -#include - -#ifdef __GNUC__ -#include -#endif - +#include +#include #include #include -#if defined(FC_OS_BSD) -struct timeb -{ - int64_t time; - unsigned short millitm; -}; -#endif - namespace Base { -/// BaseClass class and root of the type system -class BaseExport TimeInfo + +using Clock = std::chrono::system_clock; + +class TimeInfo: public std::chrono::time_point { +private: + bool _null; public: - /// Construction - TimeInfo(); + TimeInfo() + { + setCurrent(); + } + TimeInfo(const TimeInfo&) = default; TimeInfo(TimeInfo&&) = default; - /// Destruction - ~TimeInfo(); + ~TimeInfo() = default; - /// sets the object to the actual system time - void setCurrent(); - void setTime_t(int64_t seconds); - - int64_t getSeconds() const; - unsigned short getMiliseconds() const; - - TimeInfo& operator=(const TimeInfo& time) = default; - TimeInfo& operator=(TimeInfo&& time) = default; - bool operator==(const TimeInfo& time) const; - bool operator!=(const TimeInfo& time) const; - - bool operator<(const TimeInfo& time) const; - bool operator<=(const TimeInfo& time) const; - bool operator>=(const TimeInfo& time) const; - bool operator>(const TimeInfo& time) const; - - static std::string currentDateTimeString(); - static std::string diffTime(const TimeInfo& timeStart, const TimeInfo& timeEnd = TimeInfo()); - static float diffTimeF(const TimeInfo& timeStart, const TimeInfo& timeEnd = TimeInfo()); - bool isNull() const; - static TimeInfo null(); - -private: - // clang-format off -#if defined(_MSC_VER) - struct _timeb timebuffer; -#elif defined(__GNUC__) - struct timeb timebuffer {}; -#endif - // clang-format on -}; - - -inline int64_t TimeInfo::getSeconds() const -{ - return timebuffer.time; -} - -inline unsigned short TimeInfo::getMiliseconds() const -{ - return timebuffer.millitm; -} - -inline bool TimeInfo::operator!=(const TimeInfo& time) const -{ - return (timebuffer.time != time.timebuffer.time - || timebuffer.millitm != time.timebuffer.millitm); -} - -inline bool TimeInfo::operator==(const TimeInfo& time) const -{ - return (timebuffer.time == time.timebuffer.time - && timebuffer.millitm == time.timebuffer.millitm); -} - -inline bool TimeInfo::operator<(const TimeInfo& time) const -{ - if (timebuffer.time == time.timebuffer.time) { - return timebuffer.millitm < time.timebuffer.millitm; + void setCurrent() + { + static_cast&>(*this) = Clock::now(); + _null = false; } - return timebuffer.time < time.timebuffer.time; -} -inline bool TimeInfo::operator<=(const TimeInfo& time) const -{ - if (timebuffer.time == time.timebuffer.time) { - return timebuffer.millitm <= time.timebuffer.millitm; + void setTime_t(std::time_t time) + { + static_cast&>(*this) = Clock::from_time_t(time); + _null = false; } - return timebuffer.time <= time.timebuffer.time; -} -inline bool TimeInfo::operator>=(const TimeInfo& time) const -{ - if (timebuffer.time == time.timebuffer.time) { - return timebuffer.millitm >= time.timebuffer.millitm; + std::time_t getTime_t() + { + return Clock::to_time_t(*this); } - return timebuffer.time >= time.timebuffer.time; -} -inline bool TimeInfo::operator>(const TimeInfo& time) const -{ - if (timebuffer.time == time.timebuffer.time) { - return timebuffer.millitm > time.timebuffer.millitm; + static float diffTimeF(const TimeInfo& start, const TimeInfo& end = TimeInfo()) + { + const std::chrono::duration duration = end - start; + return duration.count(); } - return timebuffer.time > time.timebuffer.time; -} + + static std::string diffTime(const TimeInfo& start, const TimeInfo& end = TimeInfo()) + { + std::stringstream ss; + const std::chrono::duration secs = end - start; + ss << secs.count(); + return ss.str(); + } + + bool isNull() const + { + return _null; + } + + static TimeInfo null() + { + TimeInfo ti; + ti._null = true; + return ti; + } +}; // class TimeInfo + +using Ticks = std::chrono::steady_clock; + +class TimeElapsed: public std::chrono::time_point +{ +public: + TimeElapsed() + { + setCurrent(); + } + + TimeElapsed(const TimeElapsed&) = default; + TimeElapsed(TimeElapsed&&) = default; + ~TimeElapsed() = default; + + void setCurrent() + { + static_cast&>(*this) = Ticks::now(); + } + + static float diffTimeF(const TimeElapsed& start, const TimeElapsed& end = TimeElapsed()) + { + const std::chrono::duration duration = end - start; + return duration.count(); + } + + static std::string diffTime(const TimeElapsed& start, const TimeElapsed& end = TimeElapsed()) + { + std::stringstream ss; + const std::chrono::duration secs = end - start; + ss << secs.count(); + return ss.str(); + } +}; // class TimeElapsed } // namespace Base - #endif // BASE_TIMEINFO_H diff --git a/src/Base/Tools.cpp b/src/Base/Tools.cpp index 54a494c7fd..b164164489 100644 --- a/src/Base/Tools.cpp +++ b/src/Base/Tools.cpp @@ -26,7 +26,7 @@ #include #include #include -#include +#include #endif #include "PyExport.h" @@ -365,61 +365,10 @@ std::string Base::Tools::joinList(const std::vector& vec, const std return str.str(); } -// ---------------------------------------------------------------------------- - -using namespace Base; - -struct StopWatch::Private +std::string Base::Tools::currentDateTimeString() { - QElapsedTimer t; -}; - -StopWatch::StopWatch() - : d(new Private) -{} - -StopWatch::~StopWatch() -{ - delete d; -} - -void StopWatch::start() -{ - d->t.start(); -} - -int StopWatch::restart() -{ - return d->t.restart(); -} - -int StopWatch::elapsed() -{ - return d->t.elapsed(); -} - -std::string StopWatch::toString(int ms) const -{ - int total = ms; - int msec = total % 1000; - total = total / 1000; - int secs = total % 60; - total = total / 60; - int mins = total % 60; - int hour = total / 60; - std::stringstream str; - str << "Needed time: "; - if (hour > 0) { - str << hour << "h " << mins << "m " << secs << "s"; - } - else if (mins > 0) { - str << mins << "m " << secs << "s"; - } - else if (secs > 0) { - str << secs << "s"; - } - else { - str << msec << "ms"; - } - return str.str(); + return QDateTime::currentDateTime() + .toTimeSpec(Qt::OffsetFromUTC) + .toString(Qt::ISODate) + .toStdString(); } diff --git a/src/Base/Tools.h b/src/Base/Tools.h index 4f2c957b4b..b17907bbc4 100644 --- a/src/Base/Tools.h +++ b/src/Base/Tools.h @@ -145,29 +145,6 @@ inline T fmod(T numerator, T denominator) // ---------------------------------------------------------------------------- -class BaseExport StopWatch -{ -public: - StopWatch(); - ~StopWatch(); - - void start(); - int restart(); - int elapsed(); - std::string toString(int ms) const; - - StopWatch(const StopWatch&) = delete; - StopWatch(StopWatch&&) = delete; - StopWatch& operator=(const StopWatch&) = delete; - StopWatch& operator=(StopWatch&&) = delete; - -private: - struct Private; - Private* d; -}; - -// ---------------------------------------------------------------------------- - // NOLINTBEGIN template struct FlagToggler @@ -346,6 +323,8 @@ struct BaseExport Tools * @return */ static std::string joinList(const std::vector& vec, const std::string& sep = ", "); + + static std::string currentDateTimeString(); }; diff --git a/src/Gui/AutoSaver.cpp b/src/Gui/AutoSaver.cpp index 9e89ab081b..8ff9a9013f 100644 --- a/src/Gui/AutoSaver.cpp +++ b/src/Gui/AutoSaver.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -171,9 +172,8 @@ void AutoSaver::saveDocument(const std::string& name, AutoSaveProperty& saver) getMainWindow()->showMessage(tr("Please wait until the AutoRecovery file has been saved..."), 5000); //qApp->processEvents(); + Base::TimeElapsed startTime; // open extra scope to close ZipWriter properly - Base::StopWatch watch; - watch.start(); { if (!this->compressed) { RecoveryWriter writer(saver); @@ -220,8 +220,7 @@ void AutoSaver::saveDocument(const std::string& name, AutoSaveProperty& saver) } } - std::string str = watch.toString(watch.elapsed()); - Base::Console().Log("Save AutoRecovery file: %s\n", str.c_str()); + Base::Console().Log("Save AutoRecovery file in %fs\n", Base::TimeElapsed::diffTimeF(startTime,Base::TimeElapsed())); hGrp->SetBool("SaveThumbnail",save); } } diff --git a/src/Gui/DAGView/DAGModel.cpp b/src/Gui/DAGView/DAGModel.cpp index 5b9833924d..b005fc4453 100644 --- a/src/Gui/DAGView/DAGModel.cpp +++ b/src/Gui/DAGView/DAGModel.cpp @@ -460,7 +460,7 @@ void Model::updateSlot() //for speed. Not doing yet, as I want a simple algorithm until //a more complete picture is formed. - Base::TimeInfo startTime; + Base::TimeElapsed startTime; //here we will cycle through the graph updating edges. //we have to do this first and in isolation because everything is dependent on an up to date graph. @@ -761,7 +761,7 @@ void Model::updateSlot() //Modeling_Challenge_Casting_ta4 with 59 features: "Initialize DAG View time: 0.007" //keeping algo simple with extra loops only added 0.002 to above number. -// std::cout << "Initialize DAG View time: " << Base::TimeInfo::diffTimeF(startTime, Base::TimeInfo()) << std::endl; +// std::cout << "Initialize DAG View time: " << Base::TimeElapsed::diffTimeF(startTime, Base::TimeElapsed()) << std::endl; // outputGraphviz(*theGraph, "./graphviz.dot"); graphDirty = false; diff --git a/src/Mod/Cloud/App/AppCloud.cpp b/src/Mod/Cloud/App/AppCloud.cpp index bdbc52485f..8da272a57d 100644 --- a/src/Mod/Cloud/App/AppCloud.cpp +++ b/src/Mod/Cloud/App/AppCloud.cpp @@ -1359,7 +1359,7 @@ bool Cloud::Module::cloudSave(const char* BucketName) doc->TipName.setValue(doc->Tip.getValue()->getNameInDocument()); } - std::string LastModifiedDateString = Base::TimeInfo::currentDateTimeString(); + std::string LastModifiedDateString = Base::Tools::currentDateTimeString(); doc->LastModifiedDate.setValue(LastModifiedDateString.c_str()); // set author if needed bool saveAuthor = App::GetApplication() diff --git a/src/Mod/Fem/App/FemMesh.cpp b/src/Mod/Fem/App/FemMesh.cpp index 008412acb3..8ab5d1eb1a 100644 --- a/src/Mod/Fem/App/FemMesh.cpp +++ b/src/Mod/Fem/App/FemMesh.cpp @@ -1621,7 +1621,7 @@ class CHEXA2Element: public NastranElement void FemMesh::readNastran(const std::string& Filename) { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: FemMesh::readNastran() =================================\n"); _Mtrx = Base::Matrix4D(); @@ -1699,7 +1699,7 @@ void FemMesh::readNastran(const std::string& Filename) inputfile.close(); Base::Console().Log(" %f: File read, start building mesh\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // Now fill the SMESH datastructure SMESHDS_Mesh* meshds = this->myMesh->GetMeshDS(); @@ -1709,12 +1709,13 @@ void FemMesh::readNastran(const std::string& Filename) it->addToMesh(meshds); } - Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::Console().Log(" %f: Done \n", + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); } void FemMesh::readNastran95(const std::string& Filename) { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: FemMesh::readNastran95() =================================\n"); _Mtrx = Base::Matrix4D(); @@ -1825,7 +1826,7 @@ void FemMesh::readNastran95(const std::string& Filename) inputfile.close(); Base::Console().Log(" %f: File read, start building mesh\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // Now fill the SMESH datastructure SMESHDS_Mesh* meshds = this->myMesh->GetMeshDS(); @@ -1839,12 +1840,13 @@ void FemMesh::readNastran95(const std::string& Filename) it->addToMesh(meshds); } - Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::Console().Log(" %f: Done \n", + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); } void FemMesh::readAbaqus(const std::string& FileName) { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: FemMesh::readAbaqus() =================================\n"); /* @@ -1878,12 +1880,13 @@ void FemMesh::readAbaqus(const std::string& FileName) catch (Py::Exception& e) { e.clear(); } - Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::Console().Log(" %f: Done \n", + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); } void FemMesh::readZ88(const std::string& FileName) { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: FemMesh::readZ88() =================================\n"); /* @@ -1917,7 +1920,8 @@ void FemMesh::readZ88(const std::string& FileName) catch (Py::Exception& e) { e.clear(); } - Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::Console().Log(" %f: Done \n", + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); } void FemMesh::read(const char* FileName) @@ -2416,7 +2420,7 @@ void FemMesh::writeABAQUS(const std::string& Filename, int elemParam, bool group void FemMesh::writeZ88(const std::string& FileName) const { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: FemMesh::writeZ88() =================================\n"); /* diff --git a/src/Mod/Fem/App/FemVTKTools.cpp b/src/Mod/Fem/App/FemVTKTools.cpp index 0a3b42de86..ac88e59518 100644 --- a/src/Mod/Fem/App/FemVTKTools.cpp +++ b/src/Mod/Fem/App/FemVTKTools.cpp @@ -267,7 +267,7 @@ void FemVTKTools::importVTKMesh(vtkSmartPointer dataset, FemMesh* me FemMesh* FemVTKTools::readVTKMesh(const char* filename, FemMesh* mesh) { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: read FemMesh from VTK unstructuredGrid ======================\n"); Base::FileInfo f(filename); @@ -301,7 +301,8 @@ FemMesh* FemVTKTools::readVTKMesh(const char* filename, FemMesh* mesh) } // Mesh should link to the part feature, in order to set up FemConstraint - Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::Console().Log(" %f: Done \n", + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); return mesh; } @@ -543,7 +544,7 @@ void FemVTKTools::exportVTKMesh(const FemMesh* mesh, void FemVTKTools::writeVTKMesh(const char* filename, const FemMesh* mesh) { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: write FemMesh from VTK unstructuredGrid ======================\n"); Base::FileInfo f(filename); @@ -561,7 +562,8 @@ void FemVTKTools::writeVTKMesh(const char* filename, const FemMesh* mesh) Base::Console().Error("file name extension is not supported to write VTK\n"); } - Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::Console().Log(" %f: Done \n", + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); } @@ -611,7 +613,7 @@ App::DocumentObject* createObjectByType(const Base::Type type) App::DocumentObject* FemVTKTools::readResult(const char* filename, App::DocumentObject* res) { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log( "Start: read FemResult with FemMesh from VTK file ======================\n"); Base::FileInfo f(filename); @@ -667,7 +669,8 @@ App::DocumentObject* FemVTKTools::readResult(const char* filename, App::Document } pcDoc->recompute(); - Base::Console().Log(" %f: Done \n", Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::Console().Log(" %f: Done \n", + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); Base::Console().Log("End: read FemResult with FemMesh from VTK file ======================\n"); return result; @@ -689,7 +692,7 @@ void FemVTKTools::writeResult(const char* filename, const App::DocumentObject* r return; } - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log("Start: write FemResult to VTK unstructuredGrid dataset =======\n"); Base::FileInfo f(filename); @@ -702,7 +705,7 @@ void FemVTKTools::writeResult(const char* filename, const App::DocumentObject* r FemVTKTools::exportVTKMesh(&fmesh, grid); Base::Console().Log(" %f: vtk mesh builder finished\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // result FemVTKTools::exportFreeCADResult(res, grid); @@ -719,7 +722,7 @@ void FemVTKTools::writeResult(const char* filename, const App::DocumentObject* r } Base::Console().Log(" %f: writing result object to vtk finished\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); Base::Console().Log("End: write FemResult to VTK unstructuredGrid dataset =======\n"); } diff --git a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp index b7829b9521..97832c4ec5 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp @@ -796,7 +796,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, lines->coordIndex.setNum(0); return; } - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log( "Start: ViewProviderFEMMeshBuilder::createMesh() =================================\n"); @@ -834,7 +834,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, std::vector facesHelper(numTries); Base::Console().Log(" %f: Start build up %i face helper\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo()), + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed()), facesHelper.size()); Base::BoundBox3d BndBox; @@ -1359,7 +1359,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, if (FaceSize < MaxFacesShowInner) { Base::Console().Log(" %f: Start eliminate internal faces SIMPLE\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // search for double (inside) faces and hide them if (!ShowInner) { @@ -1376,7 +1376,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, } else { Base::Console().Log(" %f: Start eliminate internal faces GRID\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); BndBox.Enlarge(BndBox.CalcDiagonalLength() / 10000.0); // calculate grid properties double edge = pow(FaceSize, 1.0 / 3.0); @@ -1444,7 +1444,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, Base::Console().Log(" %f: Start build up node map\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // sort out double nodes and build up index map std::map mapNodeIndex; @@ -1477,7 +1477,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, } } Base::Console().Log(" %f: Start set point vector\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // set the point coordinates coords->point.setNum(mapNodeIndex.size()); @@ -1495,7 +1495,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, // count triangle size Base::Console().Log(" %f: Start count triangle size\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); int triangleCount = 0; for (int l = 0; l < FaceSize; l++) { if (!facesHelper[l].hide) { @@ -1551,7 +1551,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, } Base::Console().Log(" %f: Start build up triangle vector\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // set the triangle face indices faces->coordIndex.setNum(4 * triangleCount); vFaceElementIdx.resize(triangleCount); @@ -2971,7 +2971,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, faces->coordIndex.finishEditing(); Base::Console().Log(" %f: Start build up edge vector\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // std::map > EdgeMap; // count edges int EdgeSize = 0; @@ -3000,7 +3000,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, Base::Console().Log( " %f: Finish =========================================================\n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); } diff --git a/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp b/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp index 030e262dee..0c1a73660c 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp @@ -186,7 +186,7 @@ void ViewProviderFemMeshPy::setNodeColor(Py::Dict arg) this->getViewProviderFemMeshPtr()->resetColorByNodeId(); } else { - Base::TimeInfo Start; + Base::TimeElapsed Start; Base::Console().Log( "Start: ViewProviderFemMeshPy::setNodeColor() =================================\n"); // std::map NodeColorMap; @@ -209,12 +209,12 @@ void ViewProviderFemMeshPy::setNodeColor(Py::Dict arg) App::Color(Py::Float(color[0]), Py::Float(color[1]), Py::Float(color[2]), 0); } Base::Console().Log(" %f: Start ViewProviderFemMeshPy::setNodeColor() call \n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); // this->getViewProviderFemMeshPtr()->setColorByNodeId(NodeColorMap); this->getViewProviderFemMeshPtr()->setColorByNodeId(NodeIds, NodeColors); Base::Console().Log(" %f: Finish ViewProviderFemMeshPy::setNodeColor() call \n", - Base::TimeInfo::diffTimeF(Start, Base::TimeInfo())); + Base::TimeElapsed::diffTimeF(Start, Base::TimeElapsed())); } } diff --git a/src/Mod/Part/Gui/TaskCheckGeometry.cpp b/src/Mod/Part/Gui/TaskCheckGeometry.cpp index 4599219825..fb0333edb6 100644 --- a/src/Mod/Part/Gui/TaskCheckGeometry.cpp +++ b/src/Mod/Part/Gui/TaskCheckGeometry.cpp @@ -678,13 +678,13 @@ int TaskCheckGeometryResults::goBOPSingleCheck(const TopoDS_Shape& shapeIn, Resu BOPCheck.CurveOnSurfaceMode() = curveOnSurfaceMode; #ifdef FC_DEBUG - Base::TimeInfo start_time; + Base::TimeElapsed start_time; #endif BOPCheck.Perform(); #ifdef FC_DEBUG - float bopAlgoTime = Base::TimeInfo::diffTimeF(start_time,Base::TimeInfo()); + float bopAlgoTime = Base::TimeElapsed::diffTimeF(start_time, Base::TimeElapsed()); std::cout << std::endl << "BopAlgo check time is: " << bopAlgoTime << std::endl << std::endl; #endif diff --git a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp index 8b425d3b99..e0fd102b58 100644 --- a/src/Mod/Part/Gui/ViewProviderExt.cpp +++ b/src/Mod/Part/Gui/ViewProviderExt.cpp @@ -921,7 +921,7 @@ void ViewProviderPartExt::updateVisual() } // time measurement and book keeping - Base::TimeInfo start_time; + Base::TimeElapsed start_time; int numTriangles=0,numNodes=0,numNorms=0,numFaces=0,numEdges=0,numLines=0; std::set faceEdges; @@ -1281,7 +1281,7 @@ void ViewProviderPartExt::updateVisual() # ifdef FC_DEBUG // printing some information - Base::Console().Log("ViewProvider update time: %f s\n",Base::TimeInfo::diffTimeF(start_time,Base::TimeInfo())); + Base::Console().Log("ViewProvider update time: %f s\n",Base::TimeElapsed::diffTimeF(start_time,Base::TimeElapsed())); Base::Console().Log("Shape tria info: Faces:%d Edges:%d Nodes:%d Triangles:%d IdxVec:%d\n",numFaces,numEdges,numNodes,numTriangles,numLines); # else (void)numEdges; diff --git a/src/Mod/Sketcher/App/Sketch.cpp b/src/Mod/Sketcher/App/Sketch.cpp index 315676f99c..bf68f40fae 100644 --- a/src/Mod/Sketcher/App/Sketch.cpp +++ b/src/Mod/Sketcher/App/Sketch.cpp @@ -197,7 +197,7 @@ int Sketch::setUpSketch(const std::vector& GeoList, const std::vector& ConstraintList, int extGeoCount) { - Base::TimeInfo start_time; + Base::TimeElapsed start_time; clear(); @@ -339,10 +339,10 @@ int Sketch::setUpSketch(const std::vector& GeoList, calculateDependentParametersElements(); if (debugMode == GCS::Minimal || debugMode == GCS::IterationLevel) { - Base::TimeInfo end_time; + Base::TimeElapsed end_time; Base::Console().Log("Sketcher::setUpSketch()-T:%s\n", - Base::TimeInfo::diffTime(start_time, end_time).c_str()); + Base::TimeElapsed::diffTime(start_time, end_time).c_str()); } return GCSsys.dofsNumber(); @@ -4538,21 +4538,21 @@ bool Sketch::updateNonDrivingConstraints() int Sketch::solve() { - Base::TimeInfo start_time; + Base::TimeElapsed start_time; std::string solvername; auto result = internalSolve(solvername); - Base::TimeInfo end_time; + Base::TimeElapsed end_time; if (debugMode == GCS::Minimal || debugMode == GCS::IterationLevel) { Base::Console().Log("Sketcher::Solve()-%s-T:%s\n", solvername.c_str(), - Base::TimeInfo::diffTime(start_time, end_time).c_str()); + Base::TimeElapsed::diffTime(start_time, end_time).c_str()); } - SolveTime = Base::TimeInfo::diffTimeF(start_time, end_time); + SolveTime = Base::TimeElapsed::diffTimeF(start_time, end_time); return result; } diff --git a/src/Mod/Sketcher/App/planegcs/GCS.cpp b/src/Mod/Sketcher/App/planegcs/GCS.cpp index b5b7600189..cb87fc5892 100644 --- a/src/Mod/Sketcher/App/planegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/planegcs/GCS.cpp @@ -5043,7 +5043,7 @@ int System::diagnose(Algorithm alg) if (qrAlgorithm == EigenDenseQR) { #ifdef PROFILE_DIAGNOSE - Base::TimeInfo DenseQR_start_time; + Base::TimeElapsed DenseQR_start_time; #endif if (J.rows() > 0) { int rank = 0; // rank is not cheap to retrieve from qrJT in DenseQR @@ -5101,9 +5101,9 @@ int System::diagnose(Algorithm alg) } } #ifdef PROFILE_DIAGNOSE - Base::TimeInfo DenseQR_end_time; + Base::TimeElapsed DenseQR_end_time; - auto SolveTime = Base::TimeInfo::diffTimeF(DenseQR_start_time, DenseQR_end_time); + auto SolveTime = Base::TimeElapsed::diffTimeF(DenseQR_start_time, DenseQR_end_time); Base::Console().Log("\nDenseQR - Lapsed Time: %f seconds\n", SolveTime); #endif @@ -5112,7 +5112,7 @@ int System::diagnose(Algorithm alg) #ifdef EIGEN_SPARSEQR_COMPATIBLE else if (qrAlgorithm == EigenSparseQR) { #ifdef PROFILE_DIAGNOSE - Base::TimeInfo SparseQR_start_time; + Base::TimeElapsed SparseQR_start_time; #endif if (J.rows() > 0) { int rank = 0; @@ -5178,9 +5178,9 @@ int System::diagnose(Algorithm alg) } #ifdef PROFILE_DIAGNOSE - Base::TimeInfo SparseQR_end_time; + Base::TimeElapsed SparseQR_end_time; - auto SolveTime = Base::TimeInfo::diffTimeF(SparseQR_start_time, SparseQR_end_time); + auto SolveTime = Base::TimeElapsed::diffTimeF(SparseQR_start_time, SparseQR_end_time); Base::Console().Log("\nSparseQR - Lapsed Time: %f seconds\n", SolveTime); #endif diff --git a/tests/src/Base/TimeInfo.cpp b/tests/src/Base/TimeInfo.cpp index 04f4155550..ca7d356cf6 100644 --- a/tests/src/Base/TimeInfo.cpp +++ b/tests/src/Base/TimeInfo.cpp @@ -4,32 +4,32 @@ TEST(TimeInfo, TestDefault) { Base::TimeInfo ti; - EXPECT_EQ(ti.isNull(), false); + EXPECT_FALSE(ti.isNull()); } TEST(TimeInfo, TestNull) { Base::TimeInfo ti(Base::TimeInfo::null()); - EXPECT_EQ(ti.isNull(), true); + EXPECT_TRUE(ti.isNull()); } TEST(TimeInfo, TestCompare) { Base::TimeInfo ti1; - Base::TimeInfo ti2; - ti2.setTime_t(ti1.getSeconds() + 1); - EXPECT_EQ(ti1 == ti1, true); - EXPECT_EQ(ti1 != ti2, true); - EXPECT_EQ(ti1 < ti2, true); - EXPECT_EQ(ti1 > ti2, false); - EXPECT_EQ(ti1 <= ti1, true); - EXPECT_EQ(ti1 >= ti1, true); + Base::TimeInfo ti2(ti1); + ti2 += std::chrono::seconds(1); + EXPECT_TRUE(ti1 == ti1); + EXPECT_TRUE(ti1 != ti2); + EXPECT_TRUE(ti1 < ti2); + EXPECT_FALSE(ti1 > ti2); + EXPECT_TRUE(ti1 <= ti1); + EXPECT_TRUE(ti1 >= ti1); } TEST(TimeInfo, TestDiffTime) { Base::TimeInfo ti1; - Base::TimeInfo ti2; - ti2.setTime_t(ti1.getSeconds() + 1); - EXPECT_EQ(Base::TimeInfo::diffTimeF(ti1, ti2), 1.0); + Base::TimeInfo ti2(ti1); + ti2 += std::chrono::seconds(1000); + EXPECT_FLOAT_EQ(Base::TimeInfo::diffTimeF(ti1, ti2), 1000.0); }