make video unittests support setting test filter from command line

With this change, test cases can be selected from command line. This is
helpful for debugging and testing manually.

Example command line:
Using test_that,
$ test_that DUT video_VideoDecodeAccelerator.h264 \
    --args 'gtest_filter=VideoDecodeAcceleratorTest.*'
Run on DUT directly,
$ /usr/local/autotest/bin/autotest_client \
    /usr/local/autotest/tests/video_VideoDecodeAccelerator/control.h264 \
    --args 'gtest_filter=VideoDecodeAcceleratorTest.*'

BUG=none
TEST=run VDA/VEA/JDA tests with and without above --args line

Change-Id: Ie9de66d63cd2edfca392fa2bed07768ec033842b
Reviewed-on: https://chromium-review.googlesource.com/474704
Commit-Ready: Kuang-che Wu <kcwu@chromium.org>
Tested-by: Kuang-che Wu <kcwu@chromium.org>
Reviewed-by: Owen Lin <owenlin@chromium.org>
diff --git a/client/site_tests/video_JpegDecodeAccelerator/control b/client/site_tests/video_JpegDecodeAccelerator/control
index d1326d2..7ee3f93 100644
--- a/client/site_tests/video_JpegDecodeAccelerator/control
+++ b/client/site_tests/video_JpegDecodeAccelerator/control
@@ -27,4 +27,5 @@
 This is a wrapper test for Chrome jpeg_decode_accelerator_unittest.
 """
 
-job.run_test('video_JpegDecodeAccelerator')
+args_dict = utils.args_to_dict(args)
+job.run_test('video_JpegDecodeAccelerator', **args_dict)
diff --git a/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py b/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py
index 4de0d93..acf8055 100644
--- a/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py
+++ b/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py
@@ -23,11 +23,18 @@
 
 
     @chrome_binary_test.nuke_chrome
-    def run_once(self):
+    def run_once(self, gtest_filter=None):
         """
         Runs jpeg_decode_accelerator_unittest on the device.
 
+        @param gtest_filter: test case filter.
+
         @raises: error.TestFail for jpeg_decode_accelerator_unittest failures.
         """
         logging.debug('Starting video_JpegDecodeAccelerator')
-        self.run_chrome_test_binary(self.binary)
+        cmd_line_list = []
+        if gtest_filter:
+            cmd_line_list.append('--gtest_filter="%s"' % gtest_filter)
+
+        cmd_line = ' '.join(cmd_line_list)
+        self.run_chrome_test_binary(self.binary, cmd_line)
diff --git a/client/site_tests/video_VideoDecodeAccelerator/control.h264 b/client/site_tests/video_VideoDecodeAccelerator/control.h264
index d6fe274..aa6b250 100644
--- a/client/site_tests/video_VideoDecodeAccelerator/control.h264
+++ b/client/site_tests/video_VideoDecodeAccelerator/control.h264
@@ -33,4 +33,5 @@
 # the bots green.
 videos = ['test-25fps.h264:320:240:250:258:35:150:1']
 
-job.run_test('video_VideoDecodeAccelerator', videos=videos)
+args_dict = utils.args_to_dict(args)
+job.run_test('video_VideoDecodeAccelerator', videos=videos, **args_dict)
diff --git a/client/site_tests/video_VideoDecodeAccelerator/control.vp8 b/client/site_tests/video_VideoDecodeAccelerator/control.vp8
index baee2f7..44d7795 100644
--- a/client/site_tests/video_VideoDecodeAccelerator/control.vp8
+++ b/client/site_tests/video_VideoDecodeAccelerator/control.vp8
@@ -32,4 +32,5 @@
 # the bots green.
 videos = ['test-25fps.vp8:320:240:250:250:35:150:11']
 
-job.run_test('video_VideoDecodeAccelerator', videos=videos)
+args_dict = utils.args_to_dict(args)
+job.run_test('video_VideoDecodeAccelerator', videos=videos, **args_dict)
diff --git a/client/site_tests/video_VideoDecodeAccelerator/control.vp9 b/client/site_tests/video_VideoDecodeAccelerator/control.vp9
index fb34b45..c3f6cc8 100644
--- a/client/site_tests/video_VideoDecodeAccelerator/control.vp9
+++ b/client/site_tests/video_VideoDecodeAccelerator/control.vp9
@@ -31,4 +31,5 @@
 # the bots green.
 videos = ['test-25fps.vp9:320:240:250:250:35:150:12']
 
-job.run_test('video_VideoDecodeAccelerator', videos=videos)
+args_dict = utils.args_to_dict(args)
+job.run_test('video_VideoDecodeAccelerator', videos=videos, **args_dict)
diff --git a/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py b/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py
index b559036..c70d23e 100644
--- a/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py
+++ b/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py
@@ -19,13 +19,13 @@
 
 
     @chrome_binary_test.nuke_chrome
-    def run_once(self, videos, use_cr_source_dir=True):
+    def run_once(self, videos, use_cr_source_dir=True, gtest_filter=None):
         """
         Runs video_decode_accelerator_unittest on the videos.
 
         @param videos: The test videos for video_decode_accelerator_unittest.
         @param use_cr_source_dir:  Videos are under chrome source directory.
-        @param gtest_filter: gtest_filter parameter for the unittest.
+        @param gtest_filter: test case filter.
 
         @raises: error.TestFail for video_decode_accelerator_unittest failures.
         """
@@ -38,16 +38,21 @@
 
         last_test_failure = None
         for video in videos:
-            cmd_line = ('--test_video_data="%s%s"' % (path, video))
+            cmd_line_list = ['--test_video_data="%s%s"' % (path, video)]
 
             # While thumbnail test fails, write thumbnail image to results
             # directory so that it will be accessible to host and packed
             # along with test logs.
-            cmd_line += (' --thumbnail_output_dir="%s"' % self.resultsdir)
+            cmd_line_list.append(
+                '--thumbnail_output_dir="%s"' % self.resultsdir)
 
             if utils.is_freon():
-                cmd_line += ' --ozone-platform=gbm'
+                cmd_line_list.append('--ozone-platform=gbm')
 
+            if gtest_filter:
+                cmd_line_list.append('--gtest_filter="%s"' % gtest_filter)
+
+            cmd_line = ' '.join(cmd_line_list)
             try:
                 self.run_chrome_test_binary(self.binary, cmd_line)
             except error.TestFail as test_failure:
diff --git a/client/site_tests/video_VideoEncodeAccelerator/control.h264 b/client/site_tests/video_VideoEncodeAccelerator/control.h264
index e8a0295..dc2dafc 100644
--- a/client/site_tests/video_VideoEncodeAccelerator/control.h264
+++ b/client/site_tests/video_VideoEncodeAccelerator/control.h264
@@ -35,5 +35,6 @@
 # TODO: Enable the test after PSNR(with block) verification is merged:
 #    ('tulip2/tulip2-240x136-ed58afc99d08e5d21013c1a5056e43bf.yuv', 240, 136, 100000)]
 
+args_dict = utils.args_to_dict(args)
 job.run_test('video_VideoEncodeAccelerator', in_cloud=True, streams=streams,
-        profile=1)
+        profile=1, **args_dict)
diff --git a/client/site_tests/video_VideoEncodeAccelerator/control.h264.bvt b/client/site_tests/video_VideoEncodeAccelerator/control.h264.bvt
index 7dfb40e..871e284 100644
--- a/client/site_tests/video_VideoEncodeAccelerator/control.h264.bvt
+++ b/client/site_tests/video_VideoEncodeAccelerator/control.h264.bvt
@@ -28,5 +28,6 @@
 # Format of each stream: (path, width, height, request_bit_rate)
 streams = [('media/test/data/bear_320x192_40frames.yuv', 320, 192, 200000)]
 
+args_dict = utils.args_to_dict(args)
 job.run_test('video_VideoEncodeAccelerator', in_cloud=False, streams=streams,
-        profile=1)
+        profile=1, **args_dict)
diff --git a/client/site_tests/video_VideoEncodeAccelerator/control.vp8 b/client/site_tests/video_VideoEncodeAccelerator/control.vp8
index 3aef6a2..842aaf3 100644
--- a/client/site_tests/video_VideoEncodeAccelerator/control.vp8
+++ b/client/site_tests/video_VideoEncodeAccelerator/control.vp8
@@ -35,5 +35,6 @@
 # TODO: Enable the test after PSNR(with block) verification is merged:
 #    ('tulip2/tulip2-240x136-ed58afc99d08e5d21013c1a5056e43bf.yuv', 240, 136, 100000)]
 
+args_dict = utils.args_to_dict(args)
 job.run_test('video_VideoEncodeAccelerator', in_cloud=True, streams=streams,
-        profile=11)
+        profile=11, **args_dict)
diff --git a/client/site_tests/video_VideoEncodeAccelerator/control.vp8.bvt b/client/site_tests/video_VideoEncodeAccelerator/control.vp8.bvt
index e867f83..024840c 100644
--- a/client/site_tests/video_VideoEncodeAccelerator/control.vp8.bvt
+++ b/client/site_tests/video_VideoEncodeAccelerator/control.vp8.bvt
@@ -28,5 +28,6 @@
 # Format of each stream: (filename, width, height, request_bit_rate)
 streams = [('media/test/data/bear_320x192_40frames.yuv', 320, 192, 200000)]
 
+args_dict = utils.args_to_dict(args)
 job.run_test('video_VideoEncodeAccelerator', in_cloud=False, streams=streams,
-        profile=11)
+        profile=11, **args_dict)
diff --git a/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py b/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py
index a8abd4d..3cf4cb1 100644
--- a/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py
+++ b/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py
@@ -57,17 +57,18 @@
 
         board = utils.get_current_board()
         if board in blacklist:
-            return ' --gtest_filter=-' + ':'.join(blacklist[board])
+            return '-' + ':'.join(blacklist[board])
 
         return ''
 
     @chrome_binary_test.nuke_chrome
-    def run_once(self, in_cloud, streams, profile):
+    def run_once(self, in_cloud, streams, profile, gtest_filter=None):
         """Runs video_encode_accelerator_unittest on the streams.
 
         @param in_cloud: Input file needs to be downloaded first.
         @param streams: The test streams for video_encode_accelerator_unittest.
         @param profile: The profile to encode into.
+        @param gtest_filter: test case filter.
 
         @raises error.TestFail for video_encode_accelerator_unittest failures.
         """
@@ -83,11 +84,23 @@
             output_path = os.path.join(self.tmpdir,
                     '%s.out' % input_path.split('/')[-1])
 
-            cmd_line = '--test_stream_data="%s:%s:%s:%s:%s:%s"' % (
-                    input_path, width, height, profile, output_path, bit_rate)
+            cmd_line_list = []
+            cmd_line_list.append('--test_stream_data="%s:%s:%s:%s:%s:%s"' % (
+                    input_path, width, height, profile, output_path, bit_rate))
             if utils.is_freon():
-                cmd_line += ' --ozone-platform=gbm'
-            cmd_line += self.get_filter_option()
+                cmd_line_list.append('--ozone-platform=gbm')
+
+            # Command line |gtest_filter| can override get_filter_option().
+            predefined_filter = self.get_filter_option()
+            if gtest_filter and predefined_filter:
+                logging.warning('predefined gtest filter is suppressed: %s',
+                    predefined_filter)
+            if not gtest_filter:
+                gtest_filter = predefined_filter
+            if gtest_filter:
+                cmd_line_list.append('--gtest_filter="%s"' % gtest_filter)
+
+            cmd_line = ' '.join(cmd_line_list)
             try:
                 self.run_chrome_test_binary(BINARY, cmd_line, as_chronos=False)
             except error.TestFail as test_failure: