Commit 5695cd2207664aebc5e3431e122419399a467bc9

Authored by Jordan Cheney
Committed by Jordan Cheney
1 parent b510d010

Decided on the TimeVaryingTransform implementation

Showing 1 changed file with 23 additions and 26 deletions
openbr/plugins/time.cpp
@@ -3,66 +3,63 @@ @@ -3,66 +3,63 @@
3 namespace br 3 namespace br
4 { 4 {
5 5
6 -class StopWatchTransform : public UntrainableTransform 6 +/*!
  7 + * \ingroup transforms
  8 + * \brief Gives time elapsed over a specified transform as a function of both images (or frames) and pixels.
  9 + * \author Jordan Cheney \cite JordanCheney
  10 + */
  11 +class StopWatchTransform : public TimeVaryingTransform
7 { 12 {
8 Q_OBJECT 13 Q_OBJECT
9 14
10 Q_PROPERTY(br::Transform* child READ get_child WRITE set_child RESET reset_child) 15 Q_PROPERTY(br::Transform* child READ get_child WRITE set_child RESET reset_child)
11 BR_PROPERTY(br::Transform*, child, NULL) 16 BR_PROPERTY(br::Transform*, child, NULL)
12 17
13 - mutable QMutex watchLock;  
14 mutable long timeElapsed; 18 mutable long timeElapsed;
15 mutable long numImgs; 19 mutable long numImgs;
16 mutable long numPixels; 20 mutable long numPixels;
17 21
18 - ~StopWatchTransform() {  
19 - printf("Profiled %lu images:\n"  
20 - "\tavg time per image: %f ms\n"  
21 - "\tavg time per pixel: %f ms\n",  
22 - numImgs, (double) timeElapsed / numImgs, (double) timeElapsed / numPixels); 22 +public:
  23 + StopWatchTransform() : TimeVaryingTransform(false, false)
  24 + {
  25 + timeElapsed = 0;
  26 + numImgs = 0;
  27 + numPixels = 0;
23 } 28 }
24 29
25 - void project(const Template &src, Template &dst) const 30 +private:
  31 + void projectUpdate(const Template &src, Template &dst)
26 { 32 {
27 QTime watch; 33 QTime watch;
28 34
29 if (child == NULL) 35 if (child == NULL)
30 qFatal("Can't find child transform! Command line syntax is StopWatch(name of transform to profile)"); 36 qFatal("Can't find child transform! Command line syntax is StopWatch(name of transform to profile)");
31 37
32 - watchLock.lock();  
33 watch.start(); 38 watch.start();
34 39
35 child->project(src, dst); 40 child->project(src, dst);
36 41
37 int time = watch.elapsed(); 42 int time = watch.elapsed();
38 - watchLock.unlock();  
39 43
40 timeElapsed += time; 44 timeElapsed += time;
41 numImgs++; 45 numImgs++;
42 numPixels += (src.m().rows * src.m().cols); 46 numPixels += (src.m().rows * src.m().cols);
43 } 47 }
44 48
45 - void project(const TemplateList &src, TemplateList &dst) const 49 + void finalize(TemplateList &output)
46 { 50 {
47 - QTime watch;  
48 - foreach (const Template &t, src) {  
49 - watchLock.lock();  
50 - watch.start();  
51 -  
52 - Template u;  
53 - child->project(t, u); 51 + (void)output;
54 52
55 - int time = watch.elapsed();  
56 - watchLock.unlock(); 53 + printf("\n\nProfiled %lu images:\n"
  54 + "\tavg time per image: %f ms\n"
  55 + "\tavg time per pixel: %f ms\n",numImgs, (double)timeElapsed / numImgs, (double)timeElapsed / numPixels);
57 56
58 - timeElapsed += time;  
59 - numImgs++;  
60 - numPixels += (t.m().rows * t.m().cols);  
61 -  
62 - dst << u;  
63 - } 57 + timeElapsed = 0;
  58 + numImgs = 0;
  59 + numPixels = 0;
64 } 60 }
65 }; 61 };
  62 +
66 BR_REGISTER(Transform, StopWatchTransform) 63 BR_REGISTER(Transform, StopWatchTransform)
67 64
68 } //namespace br 65 } //namespace br