diff --git a/Contractor/EdgeBasedGraphFactory.cpp b/Contractor/EdgeBasedGraphFactory.cpp index aba8eee3d..b138a9c8a 100644 --- a/Contractor/EdgeBasedGraphFactory.cpp +++ b/Contractor/EdgeBasedGraphFactory.cpp @@ -27,6 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "EdgeBasedGraphFactory.h" #include "../Util/ComputeAngle.h" +#include "../Util/TimingUtil.h" #include "BFSComponentExplorer.h" #include @@ -258,15 +259,29 @@ void EdgeBasedGraphFactory::Run(const std::string &original_edge_data_filename, lua_State *lua_state) { + TIMER_START(geometry); CompressGeometry(); + TIMER_STOP(geometry); + TIMER_START(renumber); RenumberEdges(); + TIMER_STOP(renumber); + TIMER_START(generate_nodes); GenerateEdgeExpandedNodes(); + TIMER_STOP(generate_nodes); + TIMER_START(generate_edges); GenerateEdgeExpandedEdges(original_edge_data_filename, lua_state); + TIMER_STOP(generate_edges); m_geometry_compressor.SerializeInternalVector(geometry_filename); + + SimpleLogger().Write() << "Timing statistics for edge-expanded graph:"; + SimpleLogger().Write() << "Geometry compression: " << TIMER_SEC(geometry) << "s"; + SimpleLogger().Write() << "Renumbering edges: " << TIMER_SEC(renumber) << "s"; + SimpleLogger().Write() << "Generating nodes: " << TIMER_SEC(generate_nodes) << "s"; + SimpleLogger().Write() << "Generating edges: " << TIMER_SEC(generate_edges) << "s"; } void EdgeBasedGraphFactory::CompressGeometry() diff --git a/Util/TimingUtil.h b/Util/TimingUtil.h new file mode 100644 index 000000000..7e5532187 --- /dev/null +++ b/Util/TimingUtil.h @@ -0,0 +1,58 @@ +/* + +Copyright (c) 2013, Project OSRM, Dennis Luxen, others +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list +of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifndef TIMINGUTIL_H_ +#define TIMINGUTIL_H_ + +#ifdef _WIN32 +#include +#include +#include +void gettimeofday(struct timeval* t,void* timezone) { + struct _timeb timebuffer; + _ftime( &timebuffer ); + t->tv_sec=timebuffer.time; + t->tv_usec=1000*timebuffer.millitm; +} +#else +#include +#endif + +/** Returns a timestamp (now) in seconds (incl. a fractional part). */ +static inline double get_timestamp() { + struct timeval tp; + gettimeofday(&tp, NULL); + return double(tp.tv_sec) + tp.tv_usec / 1000000.; +} + +#define TIMER_START(_X) timeval _X##_start, _X##_stop; gettimeofday(&_X##_start, NULL) +#define TIMER_STOP(_X) gettimeofday(&_X##_stop, NULL); +#define TIMER_MSEC(_X) ((_X##_stop.tv_sec - _X##_start.tv_sec) * 1000.0 + (_X##_stop.tv_usec - _X##_start.tv_usec) / 1000.0) +#define TIMER_SEC(_X) ((_X##_stop.tv_sec - _X##_start.tv_sec) + (_X##_stop.tv_usec - _X##_start.tv_usec) / 1000.0 / 1000.0) +#define TIMER_MIN(_X) ((_X##_stop.tv_sec - _X##_start.tv_sec) / 60.0) + +#endif /* TIMINGUTIL_H_ */