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

Unified Diff: content/common/gpu/media/video_encode_accelerator_unittest.cc

Issue 1097793006: vea_unittest: Add --output_log option (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/gpu/media/video_encode_accelerator_unittest.cc
diff --git a/content/common/gpu/media/video_encode_accelerator_unittest.cc b/content/common/gpu/media/video_encode_accelerator_unittest.cc
index c0f450881b7fee13eaeffd688f8b3c81c0ca4a8a..52be56b5c3541aaacf2a9b6f103c7a48ea0eecef 100644
--- a/content/common/gpu/media/video_encode_accelerator_unittest.cc
+++ b/content/common/gpu/media/video_encode_accelerator_unittest.cc
@@ -12,6 +12,7 @@
#include "base/process/process_handle.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
+#include "base/strings/stringprintf.h"
#include "base/sys_byteorder.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
@@ -352,6 +353,57 @@ static void ParseAndReadTestStreamData(const base::FilePath::StringType& data,
}
}
+// Basic test environment shared across multiple test cases. We only need to
+// setup it once for all test cases.
+// It helps
+// - maintain test stream data and other test settings.
+// - clean up temporary aligned files.
+// - output log to file.
+class VideoEncodeAcceleratorTestEnvironment : public ::testing::Environment {
+ public:
+ VideoEncodeAcceleratorTestEnvironment(
+ scoped_ptr<base::FilePath::StringType> data,
+ const base::FilePath& log_path,
+ bool run_at_fps)
+ : run_at_fps_(run_at_fps),
+ test_stream_data_(data.Pass()),
+ log_path_(log_path) {}
+
+ virtual void SetUp() {
+ if (!log_path_.empty()) {
+ log_file_.reset(new base::File(
+ log_path_, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE));
+ CHECK(log_file_->IsValid());
+ }
+ ParseAndReadTestStreamData(*test_stream_data_, &test_streams_);
+ }
+
+ virtual void TearDown() {
+ for (size_t i = 0; i < test_streams_.size(); i++) {
+ base::DeleteFile(test_streams_[i]->aligned_in_file, false);
+ }
+ log_file_.reset();
+ }
+
+ // Log one entry of machine-readable data to file.
+ // The log has one data entry per line in the format of "<key>: <value>".
+ void LogToFile(const std::string& key, const std::string& value) {
+ if (log_file_) {
+ std::string s =
+ base::StringPrintf("%s: %s\n", key.c_str(), value.c_str());
+ log_file_->WriteAtCurrentPos(s.data(), s.length());
+ }
+ }
+
+ ScopedVector<TestStream> test_streams_;
+ bool run_at_fps_;
+
+ private:
+ scoped_ptr<base::FilePath::StringType> test_stream_data_;
+ base::FilePath log_path_;
+ scoped_ptr<base::File> log_file_;
+};
+
enum ClientState {
CS_CREATED,
CS_ENCODER_SET,
@@ -1133,6 +1185,8 @@ bool VEAClient::HandleEncodedFrame(bool keyframe) {
void VEAClient::VerifyPerf() {
double measured_fps = frames_per_second();
LOG(INFO) << "Measured encoder FPS: " << measured_fps;
+ g_env->LogToFile("Measured encoder FPS",
+ base::StringPrintf("%.3f", measured_fps));
if (test_perf_)
EXPECT_GE(measured_fps, kMinPerfFPS);
}
@@ -1200,34 +1254,6 @@ void VEAClient::WriteIvfFrameHeader(int frame_index, size_t frame_size) {
reinterpret_cast<char*>(&header), sizeof(header)));
}
-// Setup test stream data and delete temporary aligned files at the beginning
-// and end of unittest. We only need to setup once for all test cases.
-class VideoEncodeAcceleratorTestEnvironment : public ::testing::Environment {
- public:
- VideoEncodeAcceleratorTestEnvironment(
- scoped_ptr<base::FilePath::StringType> data,
- bool run_at_fps) {
- test_stream_data_ = data.Pass();
- run_at_fps_ = run_at_fps;
- }
-
- virtual void SetUp() {
- ParseAndReadTestStreamData(*test_stream_data_, &test_streams_);
- }
-
- virtual void TearDown() {
- for (size_t i = 0; i < test_streams_.size(); i++) {
- base::DeleteFile(test_streams_[i]->aligned_in_file, false);
- }
- }
-
- ScopedVector<TestStream> test_streams_;
- bool run_at_fps_;
-
- private:
- scoped_ptr<base::FilePath::StringType> test_stream_data_;
-};
-
// Test parameters:
// - Number of concurrent encoders. The value takes effect when there is only
// one input stream; otherwise, one encoder per input stream will be
@@ -1378,6 +1404,8 @@ int main(int argc, char** argv) {
DCHECK(cmd_line);
bool run_at_fps = false;
+ base::FilePath log_path;
+
base::CommandLine::SwitchMap switches = cmd_line->GetSwitches();
for (base::CommandLine::SwitchMap::const_iterator it = switches.begin();
it != switches.end();
@@ -1386,6 +1414,12 @@ int main(int argc, char** argv) {
test_stream_data->assign(it->second.c_str());
continue;
}
+ // Output machine-readable logs with fixed formats to a file.
+ if (it->first == "output_log") {
+ log_path = base::FilePath(
+ base::FilePath::StringType(it->second.begin(), it->second.end()));
+ continue;
+ }
if (it->first == "num_frames_to_encode") {
std::string input(it->second.begin(), it->second.end());
CHECK(base::StringToInt(input, &content::g_num_frames_to_encode));
@@ -1410,7 +1444,7 @@ int main(int argc, char** argv) {
reinterpret_cast<content::VideoEncodeAcceleratorTestEnvironment*>(
testing::AddGlobalTestEnvironment(
new content::VideoEncodeAcceleratorTestEnvironment(
- test_stream_data.Pass(), run_at_fps)));
+ test_stream_data.Pass(), log_path, run_at_fps)));
return RUN_ALL_TESTS();
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698