1 /*
2  * Software License Agreement (BSD License)
3  *
4  *  Point Cloud Library (PCL) - www.pointclouds.org
5  *  Copyright (c) 2010-2012, Willow Garage, Inc.
6  *  Copyright (c) 2012-, Open Perception, Inc.
7  *
8  *  All rights reserved.
9  *
10  *  Redistribution and use in source and binary forms, with or without
11  *  modification, are permitted provided that the following conditions
12  *  are met:
13  *
14  *   * Redistributions of source code must retain the above copyright
15  *     notice, this list of conditions and the following disclaimer.
16  *   * Redistributions in binary form must reproduce the above
17  *     copyright notice, this list of conditions and the following
18  *     disclaimer in the documentation and/or other materials provided
19  *     with the distribution.
20  *   * Neither the name of the copyright holder(s) nor the names of its
21  *     contributors may be used to endorse or promote products derived
22  *     from this software without specific prior written permission.
23  *
24  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  *  POSSIBILITY OF SUCH DAMAGE.
36  *
37  */
38 
39 #pragma once
40 
41 #include <chrono>
42 
43 #include <pcl/console/print.h>
44 
45 namespace pcl
46 {
47   namespace console
48   {
49     class TicToc
50     {
51       public:
52 
TicToc()53         TicToc () {}
54 
55         void
tic()56         tic ()
57         {
58           tictic_ = std::chrono::steady_clock::now();
59         };
60 
61         inline double
toc()62         toc () const
63         {
64           auto end_time = std::chrono::steady_clock::now();
65           return std::chrono::duration<double, std::ratio<1, 1000>>(end_time - tictic_).count();
66         };
67 
68         inline void
toc_print()69         toc_print () const
70         {
71           double milliseconds = toc ();
72           //int minutes = (int) std::floor ( seconds / 60.0 );
73           //seconds -= minutes * 60.0;
74           //if (minutes != 0)
75           //{
76           //  print_value ("%i", minutes);
77           //  print_info (" minutes, ");
78           //}
79           print_value ("%g", milliseconds);
80           print_info (" ms\n");
81         };
82 
83       private:
84         std::chrono::time_point<std::chrono::steady_clock> tictic_;
85     };
86   }
87 }
88