Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Side by Side Diff: webrtc/tools/frame_analyzer/video_quality_analysis_unittest.cc

Issue 2666333003: Better comparison for frame analyzer (Closed)
Patch Set: Using TempFilename() instead of unique names Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/tools/frame_analyzer/video_quality_analysis.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 // This test doesn't actually verify the output since it's just printed 11 // This test doesn't actually verify the output since it's just printed
12 // to stdout by void functions, but it's still useful as it executes the code. 12 // to stdout by void functions, but it's still useful as it executes the code.
13 13
14 #include <stdio.h> 14 #include <stdio.h>
15 #include <fstream> 15 #include <fstream>
16 #include <string> 16 #include <string>
17 17
18 #include "webrtc/test/gtest.h" 18 #include "webrtc/test/gtest.h"
19 #include "webrtc/test/testsupport/fileutils.h" 19 #include "webrtc/test/testsupport/fileutils.h"
20 #include "webrtc/tools/frame_analyzer/video_quality_analysis.h" 20 #include "webrtc/tools/frame_analyzer/video_quality_analysis.h"
21 21
22 namespace webrtc { 22 namespace webrtc {
23 namespace test { 23 namespace test {
24 24
25 // Setup a log file to write the output to instead of stdout because we don't 25 // Setup a log file to write the output to instead of stdout because we don't
26 // want those numbers to be picked up as perf numbers. 26 // want those numbers to be picked up as perf numbers.
27 class VideoQualityAnalysisTest : public ::testing::Test { 27 class VideoQualityAnalysisTest : public ::testing::Test {
28 protected: 28 protected:
29 static void SetUpTestCase() { 29 static void SetUpTestCase() {
30 std::string log_filename = webrtc::test::OutputPath() + 30 std::string log_filename = TempFilename(webrtc::test::OutputPath(),
kjellander_webrtc 2017/02/15 12:16:58 "Google Test automatically calls SetUpTestCase() b
mandermo 2017/02/15 12:52:54 This code was there before I started to work on th
kjellander_webrtc 2017/02/15 14:00:37 OK, it feels like things could break if we write a
mandermo 2017/02/15 14:50:29 That log file is just for putting the data somewhe
31 "VideoQualityAnalysisTest.log"; 31 "VideoQualityAnalysisTest.log");
32 logfile_ = fopen(log_filename.c_str(), "w"); 32 logfile_ = fopen(log_filename.c_str(), "w");
33 ASSERT_TRUE(logfile_ != NULL); 33 ASSERT_TRUE(logfile_ != NULL);
34 } 34 }
35 static void TearDownTestCase() { 35 static void TearDownTestCase() {
36 ASSERT_EQ(0, fclose(logfile_)); 36 ASSERT_EQ(0, fclose(logfile_));
37 } 37 }
38 static FILE* logfile_; 38 static FILE* logfile_;
39 }; 39 };
40 FILE* VideoQualityAnalysisTest::logfile_ = NULL; 40 FILE* VideoQualityAnalysisTest::logfile_ = NULL;
41 41
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 std::string stats_filename_ref = 88 std::string stats_filename_ref =
89 OutputPath() + "non-existing-stats-file-1.txt"; 89 OutputPath() + "non-existing-stats-file-1.txt";
90 std::string stats_filename = OutputPath() + "non-existing-stats-file-2.txt"; 90 std::string stats_filename = OutputPath() + "non-existing-stats-file-2.txt";
91 remove(stats_filename.c_str()); 91 remove(stats_filename.c_str());
92 PrintMaxRepeatedAndSkippedFrames(logfile_, "NonExistingStatsFile", 92 PrintMaxRepeatedAndSkippedFrames(logfile_, "NonExistingStatsFile",
93 stats_filename_ref, stats_filename); 93 stats_filename_ref, stats_filename);
94 } 94 }
95 95
96 TEST_F(VideoQualityAnalysisTest, 96 TEST_F(VideoQualityAnalysisTest,
97 PrintMaxRepeatedAndSkippedFramesEmptyStatsFile) { 97 PrintMaxRepeatedAndSkippedFramesEmptyStatsFile) {
98 std::string stats_filename_ref = OutputPath() + "empty-stats-1.txt"; 98 std::string stats_filename_ref = TempFilename(OutputPath(), "stats-1.txt");
kjellander_webrtc 2017/02/15 12:16:58 The declaration pattern at line 98-100 is repeated
mandermo 2017/02/15 12:52:54 Done.
99 std::string stats_filename = OutputPath() + "empty-stats-2.txt"; 99 std::string stats_filename = TempFilename(OutputPath(), "stats-2.txt");
100 std::ofstream stats_file; 100 std::ofstream stats_file;
101 stats_file.open(stats_filename_ref.c_str()); 101 stats_file.open(stats_filename_ref.c_str());
102 stats_file.close(); 102 stats_file.close();
103 stats_file.open(stats_filename.c_str()); 103 stats_file.open(stats_filename.c_str());
104 stats_file.close(); 104 stats_file.close();
105 PrintMaxRepeatedAndSkippedFrames(logfile_, "EmptyStatsFile", 105 PrintMaxRepeatedAndSkippedFrames(logfile_, "EmptyStatsFile",
106 stats_filename_ref, stats_filename); 106 stats_filename_ref, stats_filename);
107 } 107 }
108 108
109 TEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesNormalFile) { 109 TEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesNormalFile) {
110 std::string stats_filename_ref = OutputPath() + "stats-1.txt"; 110 std::string stats_filename_ref = TempFilename(OutputPath(), "stats-1.txt");
111 std::string stats_filename = OutputPath() + "stats-2.txt"; 111 std::string stats_filename = TempFilename(OutputPath(), "stats-2.txt");
112 std::ofstream stats_file; 112 std::ofstream stats_file;
113 113
114 stats_file.open(stats_filename_ref.c_str()); 114 stats_file.open(stats_filename_ref.c_str());
115 stats_file << "frame_0001 0100\n"; 115 stats_file << "frame_0001 0100\n";
116 stats_file << "frame_0002 0101\n"; 116 stats_file << "frame_0002 0101\n";
117 stats_file << "frame_0003 0102\n"; 117 stats_file << "frame_0003 0102\n";
118 stats_file << "frame_0004 0103\n"; 118 stats_file << "frame_0004 0103\n";
119 stats_file << "frame_0005 0106\n"; 119 stats_file << "frame_0005 0106\n";
120 stats_file << "frame_0006 0107\n"; 120 stats_file << "frame_0006 0107\n";
121 stats_file << "frame_0007 0108\n"; 121 stats_file << "frame_0007 0108\n";
122 stats_file.close(); 122 stats_file.close();
123 123
124 stats_file.open(stats_filename.c_str()); 124 stats_file.open(stats_filename.c_str());
125 stats_file << "frame_0001 0100\n"; 125 stats_file << "frame_0001 0100\n";
126 stats_file << "frame_0002 0101\n"; 126 stats_file << "frame_0002 0101\n";
127 stats_file << "frame_0003 0101\n"; 127 stats_file << "frame_0003 0101\n";
128 stats_file << "frame_0004 0106\n"; 128 stats_file << "frame_0004 0106\n";
129 stats_file.close(); 129 stats_file.close();
130 130
131 PrintMaxRepeatedAndSkippedFrames(logfile_, "NormalStatsFile", 131 PrintMaxRepeatedAndSkippedFrames(logfile_, "NormalStatsFile",
132 stats_filename_ref, stats_filename); 132 stats_filename_ref, stats_filename);
133 } 133 }
134 134
135 135 namespace {
136 void VerifyLogOutput(const std::string& log_filename,
137 const std::vector<std::string>& expected_out) {
138 std::ifstream logf(log_filename);
139 std::string line;
140
141 std::size_t i;
142 for (i = 0; i < expected_out.size() && getline(logf, line); ++i) {
143 ASSERT_EQ(expected_out.at(i), line);
144 }
145 ASSERT_TRUE(i == expected_out.size()) << "Not enough input data";
146 }
147 } // unnamed namespace
148
149 TEST_F(VideoQualityAnalysisTest,
150 PrintMaxRepeatedAndSkippedFramesSkippedFrames) {
151 std::string stats_filename_ref = TempFilename(OutputPath(), "stats-1.txt");
152 std::string stats_filename = TempFilename(OutputPath(), "stats-2.txt");
153 std::ofstream stats_file;
154
155 std::string log_filename =
156 TempFilename(webrtc::test::OutputPath(), "log.log");
157 FILE* logfile = fopen(log_filename.c_str(), "w");
158 ASSERT_TRUE(logfile != NULL);
159 stats_file.open(stats_filename_ref.c_str());
160 stats_file << "frame_0001 0100\n";
161 stats_file << "frame_0002 0101\n";
162 stats_file << "frame_0002 0101\n";
163 stats_file << "frame_0003 0103\n";
164 stats_file << "frame_0004 0103\n";
165 stats_file << "frame_0005 0106\n";
166 stats_file << "frame_0006 0106\n";
167 stats_file << "frame_0007 0108\n";
168 stats_file << "frame_0008 0110\n";
169 stats_file << "frame_0009 0112\n";
170 stats_file.close();
171
172 stats_file.open(stats_filename.c_str());
173 stats_file << "frame_0001 0101\n";
174 stats_file << "frame_0002 0101\n";
175 stats_file << "frame_0003 0101\n";
176 stats_file << "frame_0004 0108\n";
177 stats_file << "frame_0005 0108\n";
178 stats_file << "frame_0006 0112\n";
179 stats_file.close();
180
181 PrintMaxRepeatedAndSkippedFrames(logfile, "NormalStatsFile",
182 stats_filename_ref, stats_filename);
183 ASSERT_EQ(0, fclose(logfile));
184
185 std::vector<std::string> expected_out = {
186 "RESULT Max_repeated: NormalStatsFile= 2",
187 "RESULT Max_skipped: NormalStatsFile= 2",
188 "RESULT Total_skipped: NormalStatsFile= 3",
189 "RESULT Decode_errors_reference: NormalStatsFile= 0",
190 "RESULT Decode_errors_test: NormalStatsFile= 0"};
191 VerifyLogOutput(log_filename, expected_out);
192 }
193
194 TEST_F(VideoQualityAnalysisTest,
195 PrintMaxRepeatedAndSkippedFramesDecodeErrorInTest) {
196 std::string stats_filename_ref =
197 TempFilename(OutputPath(), "error-test-stats-1.txt");
198 std::string stats_filename =
199 TempFilename(OutputPath(), "error-test-stats-2.txt");
200 std::ofstream stats_file;
201
202 std::string log_filename =
203 TempFilename(webrtc::test::OutputPath(), "log.log");
204 FILE* logfile = fopen(log_filename.c_str(), "w");
205 ASSERT_TRUE(logfile != NULL);
206 stats_file.open(stats_filename_ref.c_str());
207 stats_file << "frame_0001 0100\n";
208 stats_file << "frame_0002 0100\n";
209 stats_file << "frame_0002 0101\n";
210 stats_file << "frame_0003 0103\n";
211 stats_file << "frame_0004 0103\n";
212 stats_file << "frame_0005 0106\n";
213 stats_file << "frame_0006 0107\n";
214 stats_file << "frame_0007 0107\n";
215 stats_file << "frame_0008 0110\n";
216 stats_file << "frame_0009 0112\n";
217 stats_file.close();
218
219 stats_file.open(stats_filename.c_str());
220 stats_file << "frame_0001 0101\n";
221 stats_file << "frame_0002 Barcode error\n";
222 stats_file << "frame_0003 Barcode error\n";
223 stats_file << "frame_0004 Barcode error\n";
224 stats_file << "frame_0005 0107\n";
225 stats_file << "frame_0006 0110\n";
226 stats_file.close();
227
228 PrintMaxRepeatedAndSkippedFrames(logfile, "NormalStatsFile",
229 stats_filename_ref, stats_filename);
230 ASSERT_EQ(0, fclose(logfile));
231
232 std::vector<std::string> expected_out = {
233 "RESULT Max_repeated: NormalStatsFile= 1",
234 "RESULT Max_skipped: NormalStatsFile= 0",
235 "RESULT Total_skipped: NormalStatsFile= 0",
236 "RESULT Decode_errors_reference: NormalStatsFile= 0",
237 "RESULT Decode_errors_test: NormalStatsFile= 3"};
238 VerifyLogOutput(log_filename, expected_out);
239 }
240
241 TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneValue) {
kjellander_webrtc 2017/02/15 12:16:58 Please add a test case for an empty stats file as
mandermo 2017/02/15 12:52:54 Done.
242 std::string stats_filename = TempFilename(OutputPath(), "stats.txt");
243 std::ofstream stats_file;
244
245 stats_file.open(stats_filename.c_str());
246 stats_file << "frame_0001 0101\n";
247 stats_file.close();
248
249 FILE* stats_filef = fopen(stats_filename.c_str(), "r");
250 ASSERT_TRUE(stats_filef != NULL);
251
252 auto clusters = CalculateFrameClusters(stats_filef, nullptr);
253 decltype(clusters) expected = {std::make_pair(101, 1)};
254 ASSERT_EQ(expected, clusters);
255 }
256
257 TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneOneTwo) {
258 std::string stats_filename = TempFilename(OutputPath(), "stats.txt");
259 std::ofstream stats_file;
260
261 stats_file.open(stats_filename.c_str());
262 stats_file << "frame_0001 0101\n";
263 stats_file << "frame_0002 0101\n";
264 stats_file << "frame_0003 0102\n";
265 stats_file.close();
266
267 FILE* stats_filef = fopen(stats_filename.c_str(), "r");
268 ASSERT_TRUE(stats_filef != NULL);
269
270 auto clusters = CalculateFrameClusters(stats_filef, nullptr);
271 decltype(clusters) expected = {std::make_pair(101, 2),
272 std::make_pair(102, 1)};
273 ASSERT_EQ(expected, clusters);
274 }
275
276 TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneOneErrErrThree) {
277 std::string stats_filename = TempFilename(OutputPath(), "stats.txt");
278 std::ofstream stats_file;
279
280 stats_file.open(stats_filename.c_str());
281 stats_file << "frame_0001 0101\n";
282 stats_file << "frame_0002 0101\n";
283 stats_file << "frame_0003 Barcode error\n";
284 stats_file << "frame_0004 Barcode error\n";
285 stats_file << "frame_0005 0103\n";
286 stats_file.close();
287
288 FILE* stats_filef = fopen(stats_filename.c_str(), "r");
289 ASSERT_TRUE(stats_filef != NULL);
290
291 auto clusters = CalculateFrameClusters(stats_filef, nullptr);
292 decltype(clusters) expected = {std::make_pair(101, 2),
293 std::make_pair(DECODE_ERROR, 2),
294 std::make_pair(103, 1)};
295 ASSERT_EQ(expected, clusters);
296 }
297
298 TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersErrErr) {
299 std::string stats_filename = TempFilename(OutputPath(), "stats.txt");
300 std::ofstream stats_file;
301
302 stats_file.open(stats_filename.c_str());
303 stats_file << "frame_0001 Barcode error\n";
304 stats_file << "frame_0002 Barcode error\n";
305 stats_file.close();
306
307 FILE* stats_filef = fopen(stats_filename.c_str(), "r");
308 ASSERT_TRUE(stats_filef != NULL);
309
310 auto clusters = CalculateFrameClusters(stats_filef, nullptr);
311 decltype(clusters) expected = {std::make_pair(DECODE_ERROR, 2)};
312 ASSERT_EQ(expected, clusters);
313 }
314
315 TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneOneErrErrOne) {
kjellander_webrtc 2017/02/15 12:16:58 Following your established naming convention this
mandermo 2017/02/15 12:52:54 Done.
316 std::string stats_filename = TempFilename(OutputPath(), "stats.txt");
317 std::ofstream stats_file;
318
319 stats_file.open(stats_filename.c_str());
320 stats_file << "frame_0001 0101\n";
321 stats_file << "frame_0002 0101\n";
322 stats_file << "frame_0003 Barcode error\n";
323 stats_file << "frame_0004 Barcode error\n";
324 stats_file << "frame_0005 0101\n";
325 stats_file << "frame_0006 0101\n";
326 stats_file.close();
327
328 FILE* stats_filef = fopen(stats_filename.c_str(), "r");
mandermo 2017/02/15 12:52:54 I forgot to close the file. Doing it now.
329 ASSERT_TRUE(stats_filef != NULL);
330
331 auto clusters = CalculateFrameClusters(stats_filef, nullptr);
332 decltype(clusters) expected = {std::make_pair(101, 6)};
333 ASSERT_EQ(expected, clusters);
334 }
136 } // namespace test 335 } // namespace test
137 } // namespace webrtc 336 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/tools/frame_analyzer/video_quality_analysis.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698