Changeset 668 for GTP/trunk/Lib/Vis/shared/EvalStats/EvalStats.cpp
- Timestamp:
- 03/01/06 18:30:23 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/shared/EvalStats/EvalStats.cpp
r667 r668 15 15 difference in percent of the weighted render cost. 16 16 */ 17 bool extractRenderCost(ifstream &file, vector<float> &renderCosts) 17 18 19 struct RenderStats 20 { 21 float mRenderCost; 22 float mAvgRenderCost; 23 }; 24 25 26 typedef vector<RenderStats> StatsContainer; 27 28 29 enum {NO_TAG, RENDER_COST, AVG_RENDER_COST}; 30 31 32 bool extractRenderStats(ifstream &file, StatsContainer &renderStats) 18 33 { 19 34 if (!file.is_open()) … … 21 36 22 37 string buf; 23 bool isRenderCost = false;24 38 39 int currentTag = NO_TAG; 40 25 41 while (!(getline(file, buf)).eof()) 26 42 { 43 //cout << "buf: " << buf << endl; 44 27 45 if (buf[0] == '#') 28 46 { … … 31 49 sscanf(buf.c_str(), "#%s", entry); 32 50 33 if (strcmp(entry, "TotalRenderCost") == 0) 34 isRenderCost = true; 51 // new entry 52 if (strcmp(entry, "Pass") == 0) 53 { 54 //cout << "\nnew render stat " << endl; 55 renderStats.push_back(RenderStats()); 56 } 57 else if (strcmp(entry, "TotalRenderCost") == 0) 58 { 59 currentTag = RENDER_COST; 60 } 61 else if (strcmp(entry, "AvgRenderCost") == 0) 62 { 63 currentTag = AVG_RENDER_COST; 64 } 35 65 } 36 else if (isRenderCost)66 else 37 67 { 38 float rc;39 sscanf(buf.c_str(), "%f", & rc);68 float val; 69 sscanf(buf.c_str(), "%f", &val); 40 70 41 renderCosts.push_back(rc); 42 isRenderCost = false; 71 switch (currentTag) 72 { 73 case RENDER_COST: 74 //cout << "render cost: " << val << endl; 75 renderStats.back().mRenderCost = val; 76 break; 77 case AVG_RENDER_COST: 78 //cout << "avg render cost: " << val << endl; 79 renderStats.back().mAvgRenderCost = val; 80 break; 81 default: 82 break; 83 } 84 85 currentTag = NO_TAG; 43 86 } 44 87 } … … 47 90 } 48 91 92 93 94 void ComputeStats(ofstream &statsOut, 95 const RenderStats &firstStats, 96 const RenderStats ¤tStats, 97 const int index) 98 { 99 float denom = currentStats.mRenderCost ? currentStats.mRenderCost : 0.000001f; 100 float costRatio = firstStats.mRenderCost / denom; 101 102 denom = firstStats.mAvgRenderCost ? firstStats.mAvgRenderCost : 0.000001f; 103 float avgCostRatio = firstStats.mAvgRenderCost / denom; 104 105 statsOut << "#ViewCells\n" << index + 1 << endl 106 << "#TotalRenderCostGain\n" << 100.0f - costRatio * 100.0f << endl 107 << "#AvgRenderCostGain\n" << 100.0f - avgCostRatio * 100.0f << endl << endl; 108 } 109 110 111 49 112 int _tmain(int argc, _TCHAR* argv[]) 50 113 { 51 vector<float> renderCosts1; 52 vector<float> renderCosts2; 114 vector<StatsContainer> renderStats; 53 115 54 if (argc < 4)116 if (argc < 3) 55 117 { 56 cerr << "arguments missing " << endl;118 cerr << "arguments missing. Usage: input1 input2 ... intputn" << endl; 57 119 exit(1); 58 120 } 59 121 122 vector<string> outFilenames; 60 123 61 // read two files and the output file 124 // read input files from command line 125 for (int i = 1; i < argc; ++ i) 126 { 127 StatsContainer currentStats; 128 129 ifstream file(argv[i]); 62 130 63 // read file 1 64 ifstream file1(argv[1]); 131 // extract the render cost 132 cout << "extracting render cost of file " << argv[i] << endl; 133 cout.flush(); 65 134 66 // extract the render cost 67 cout << "extracting render cost of file " << argv[1] << endl; 68 cout.flush(); 69 extractRenderCost(file1, renderCosts1); 135 extractRenderStats(file, currentStats); 136 renderStats.push_back(currentStats); 70 137 71 // read file 2 72 ifstream file2(argv[2]); 73 cout << "extracting render cost of file " << argv[2] << endl; 74 cout.flush(); 75 extractRenderCost(file2, renderCosts2); 138 // create output file name 139 string fn = argv[i]; 140 141 string::size_type pos = fn.find(".log", 0); 142 fn.erase(pos, 4); 143 //sscanf(argv[i], "%s.log", fn); 144 string outFilename = string(fn) + string("-ratio.log"); 76 145 77 78 cout << "writing output to file " << argv[3] << endl; 79 80 ofstream statsOut(argv[3]); 146 outFilenames.push_back(outFilename); 147 } 81 148 82 149 //statsOut << "rc1 size: " << (int)renderCosts1.size() << " " << (int)renderCosts2.size() << endl << endl; 83 int n = min((int)renderCosts1.size(), (int)renderCosts2.size()); 150 vector<StatsContainer>::const_iterator it = renderStats.begin(), it_end = renderStats.end(); 151 vector<string>::const_iterator sit, sit_end = outFilenames.end(); 152 153 sit = outFilenames.begin(); 84 154 85 if (argc > 4) 155 // compare all values with this vector 156 StatsContainer &firstStats = renderStats[0]; 157 158 // don't compare with itself 159 ++ it; 160 ++ sit; 161 162 for (it; it != it_end; ++ it) 86 163 { 87 char *endptr = NULL; 88 89 int limit = strtol(argv[4], &endptr, 10); 90 91 n = min(n, limit); 92 } 164 cout << "writing output to file " << *sit << endl; 93 165 94 for (int i = 0; i < n; ++ i) 95 { 96 float costRatio = renderCosts2[i] != 0 ? 97 renderCosts1[i] / renderCosts2[i] : renderCosts1[i] / 0.0000001f; 166 ofstream statsOut((*sit).c_str()); 167 ++ sit; 98 168 99 statsOut << "#ViewCells\n" << i + 1 << endl 100 << "#RenderCostRatio\n" << costRatio * 100.0f << endl; 169 cout << "size here" << (*it).size() << endl; 170 // compute size of output vector 171 const int n = min((int)firstStats.size(), (int)(*it).size()); 172 173 for (int i = 0; i < n; ++ i) 174 { 175 ComputeStats(statsOut, firstStats[i], (*it)[i], i); 176 } 177 cout << "here2 " << n << endl; 178 statsOut.close(); 101 179 } 102 180
Note: See TracChangeset
for help on using the changeset viewer.