Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis15/src/logging/log-analyze/log-analyze.cxx
ViewVC logotype

Diff of /branches/vis15/src/logging/log-analyze/log-analyze.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4888, Thu Jan 5 17:46:52 2017 UTC revision 4889, Thu Jan 5 19:32:00 2017 UTC
# Line 25  Line 25 
25    
26  #define MICROSEC        1000  #define MICROSEC        1000
27  #define MILLISEC        (1000 * MICROSEC)  #define MILLISEC        (1000 * MICROSEC)
28  #define TIMEQ           (100 * MILLISEC)        // 100ms buckets  #define TIMEQ           (50 * MILLISEC)         // 50ms buckets
29    
30  /* TODO: make these variables that are settable from command-line */  /* TODO: make these variables that are settable from command-line */
31  #define logDescFile     DEFAULT_LOG_EVENTS_PATH  #define logDescFile     DEFAULT_LOG_EVENTS_PATH
# Line 100  Line 100 
100      std::string logFile("");      std::string logFile("");
101      std::string outFile("-");      std::string outFile("-");
102      bool outputSVG = false;      bool outputSVG = false;
103        uint64_t timeQ = TIMEQ;
104    
105    // process args    // process args
106      for (int i = 1;  i < argc; ) {      for (int i = 1;  i < argc; ) {
# Line 128  Line 129 
129              i++;              i++;
130              outputSVG = true;              outputSVG = true;
131          }          }
132            else if (strcmp(argv[i], "-tq") == 0) {
133                if (++i < argc) {
134                    timeQ = std::stoull(argv[i]) * MILLISEC;
135                    i++;
136                }
137                else {
138                    std::cerr << "missing value for \"-tq\" option\n";
139                    usage (1);
140                }
141            }
142          else {          else {
143              std::cerr << "invalid argument \"" << argv[i] << "\"\n";              std::cerr << "invalid argument \"" << argv[i] << "\"\n";
144              usage(1);              usage(1);
# Line 152  Line 163 
163          stats.push_back(worker_stats(i));          stats.push_back(worker_stats(i));
164      }      }
165    
166      buckets Q(log->_nWorkers+1, (maxTime + TIMEQ - 1) / TIMEQ, NStates, TIMEQ);      buckets Q(log->_nWorkers+1, (maxTime + timeQ - 1) / timeQ, NStates, timeQ);
167    std::cerr << Q.numBuckets() << " buckets\n";
168    
169    // process the event log    // process the event log
170      for (auto it = log->_events.begin(); it != log->_events.end();  ++it) {      for (auto it = log->_events.begin(); it != log->_events.end();  ++it) {
# Line 245  Line 257 
257    
258      Q.finish(maxTime);      Q.finish(maxTime);
259    
260      if (outputSVG) {      std::ostream *outS = nullptr;
261          genSVG (std::cout, Q);      bool needsClose = false;
262      }  
263      else if (outFile.compare("-") == 0) {      if (outFile.compare("-") == 0) {
264          report (std::cout, log, stats);          outS = &std::cout;
     }  
     else {  
         std::ofstream outS(outFile);  
         if (outS.good()) {  
             report (outS, log, stats);  
             outS.close();  
265          }          }
266          else {          else {
267            outS = new std::ofstream(outFile);
268            if (! outS->good()) {
269              std::cerr << "unable to open output file \"" << outFile << "\"\n";              std::cerr << "unable to open output file \"" << outFile << "\"\n";
270              exit (1);              exit (1);
271          }          }
272            needsClose = true;
273        }
274    
275        if (outputSVG) {
276            svg::output_header (*outS);
277            (*outS) << "<!--\n";
278            report (*outS, log, stats);
279            (*outS) << "-->\n";
280            genSVG (*outS, Q);
281        }
282        else {
283            report (*outS, log, stats);
284        }
285    
286        if (needsClose) {
287            delete outS;
288      }      }
289    
290      return 0;      return 0;
# Line 282  Line 306 
306    
307      svg::Dimensions dimensions (int32_t nThreads, int32_t nBuckets)      svg::Dimensions dimensions (int32_t nThreads, int32_t nBuckets)
308      {      {
309          double wid = this->_leftMargin + (this->_hSep * (nThreads-1)) + this->_wid * nThreads + 1;          double wid = this->_leftMargin + (this->_hSep * (nThreads-1)) + this->_wid * nThreads + 2;
310          double ht = this->_topMargin + this->_wid * nBuckets + 1;          double ht = this->_topMargin + this->_wid * nBuckets + 2;
311          return svg::Dimensions (wid, ht);          return svg::Dimensions (wid, ht);
312      }      }
313    
# Line 297  Line 321 
321    
322      for (int32_t tid = 0;  tid < Q.numThreads();  tid++) {      for (int32_t tid = 0;  tid < Q.numThreads();  tid++) {
323          svg::Group tgrp;          svg::Group tgrp;
324          for (int32_t bid = 0;  bid < Q.numThreads();  bid++) {          for (int32_t bid = 0;  bid < Q.numBuckets();  bid++) {
325              svg::Point pt = Layout.position (tid, bid);              svg::Point pt = Layout.position (tid, bid);
326              svg::Group bgrp;              svg::Group bgrp;
327              bgrp << svg::Stroke(svg::Color("black"));              bgrp << svg::Stroke(svg::Color("black"));
# Line 310  Line 334 
334                  double otherFrac = Q.pct (tid, bid, Other);                  double otherFrac = Q.pct (tid, bid, Other);
335                  double opacity;                  double opacity;
336                  if ((runFrac > waitFrac) && (runFrac > otherFrac)) {                  if ((runFrac > waitFrac) && (runFrac > otherFrac)) {
337                      bgrp << svg::Fill(svg::Color(0,255,0));                      bgrp << svg::Fill(svg::Color(0,128,0));
338                      opacity = 0.3 + 0.7 * runFrac;                      opacity = 0.3 + 0.7 * runFrac;
339                  }                  }
340                  else if ((waitFrac >= runFrac) && (waitFrac >= otherFrac)) {                  else if ((waitFrac >= runFrac) && (waitFrac >= otherFrac)) {
341                      bgrp << svg::Fill(svg::Color(128,128,0));                      bgrp << svg::Fill(svg::Color(255,0,0));
342                      opacity = 0.3 + 0.7 * waitFrac;                      opacity = 0.3 + 0.7 * waitFrac;
343                  }                  }
344                  else {                  else {
345                      bgrp << svg::Fill(svg::Color(0,128,0));                      bgrp << svg::Fill(svg::Color(0,0,255));
346                      opacity = 0.3 + 0.7 * otherFrac;                      opacity = 0.3 + 0.7 * otherFrac;
347                  }                  }
348                  bgrp << svg::FillOpacity(opacity);                  bgrp << svg::FillOpacity(opacity);

Legend:
Removed from v.4888  
changed lines
  Added in v.4889

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0