Enable logs for video autotests

Make verbose video logs enable before each video autotest and make them
diable after the test.
The function to enable verbose printk log for elm/oak is not implemented yet.

BUG=chromium:697733
TEST=video autotests on exynos and an intel device.

Change-Id: I2a89076b66c541467699cbdad56e19cac41ad07d
Reviewed-on: https://chromium-review.googlesource.com/499827
Commit-Ready: Hirokazu Honda <hiroh@chromium.org>
Tested-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Kuang-che Wu <kcwu@chromium.org>
diff --git a/client/cros/video/helper_logger.py b/client/cros/video/helper_logger.py
new file mode 100644
index 0000000..3fd320d
--- /dev/null
+++ b/client/cros/video/helper_logger.py
@@ -0,0 +1,112 @@
+# Copyright 2017 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import glob
+import os
+import logging
+import subprocess
+
+def chrome_vmodule_flag():
+    """Return vmodule flag for chrome to enable VDAs/VEAs/JDAs/V4L2IP logs"""
+    logging_patterns = ['*/media/gpu/*video_decode_accelerator.cc=2',
+                        '*/media/gpu/*video_encode_accelerator.cc=2',
+                        '*/media/gpu/*jpeg_decode_accelerator.cc=2',
+                        '*/media/gpu/v4l2_image_processor.cc=2']
+    chrome_video_vmodule_flag = '--vmodule=' + ','.join(logging_patterns)
+    logging.info('chrome video vmodule flag: %s', chrome_video_vmodule_flag)
+    return chrome_video_vmodule_flag
+
+
+def video_log_wrapper(func):
+    """
+    Return decorator that make verbose video logs enable
+    before test and make them disable after completing test.
+
+    @param func: function, the test function, e.g., run_once
+    @returns decorator function
+    """
+    #TODO(hiroh): test kernel log on elm/oak (see crbug.com/697733)
+    vlog = VideoLog()
+
+    #videobuf2 log
+    files = glob.glob('/sys/module/videobuf2_*/parameters/debug')
+    vlog.add_log(files,
+                 ['1'] * len(files),
+                 ['0'] * len(files),
+                 'videobuf2 log')
+
+    #s5p_mfc log
+    fpath = '/sys/module/s5p_mfc/parameters/debug'
+    if os.path.exists(fpath):
+        vlog.add_log([fpath],
+                     ['2'],
+                     ['0'],
+                     's5p_mfc log')
+
+    def call(*args, **kwargs):
+        """
+        Enable logs before the test, execute the test and disable logs
+        after the test.
+
+        In any case, it is guranteed to disable logs.
+        """
+        with vlog:
+            return func(*args, **kwargs)
+
+    return call
+
+
+def cmdexec_with_log(cmd, info_message):
+    """
+    Execute command, logging infomation message.
+
+    @param cmd: string, command to be executed
+    @param info_message: string, the messages to be shown in log message
+    """
+    try:
+        logging.info('%s : %s', info_message, cmd)
+        subprocess.check_call(cmd, shell=True)
+    except subprocess.CalledProcessError:
+        logging.warning('Fail to execute command [%s] : %s',
+                        info_message, cmd)
+
+
+class VideoLog:
+    """
+    Enable/Disable video logs.
+    """
+    def __init__(self):
+        self.logs = []
+
+    def add_log(self, files, enable_values, disable_values, log_name):
+        """
+        Add new log
+
+        @param files: list of string, file paths
+        @param enable_values: list of string, the list of value
+                              to write to each file path for enabling
+        @param disable_values: list of string, the list of value
+                               to write to each file path for disabling
+        @param log_name: string, name to be shown in log message
+        """
+        self.logs.append({'files': files,
+                          'enable values': enable_values,
+                          'disable values': disable_values,
+                          'log name': log_name})
+
+    def __enter__(self):
+        """Enable logs"""
+        for log in self.logs:
+            log_name = log['log name']
+            for f, ev in zip(log['files'], log['enable values']):
+                cmdexec_with_log('echo %s > %s' % (ev, f),
+                                 '%s enable' % log_name)
+
+    def __exit__(self, exception_type, exception_value, traceback):
+        """Disable logs"""
+        for log in self.logs:
+            log_name = log['log name']
+            for f, dv in zip(log['files'], log['disable values']):
+                cmdexec_with_log('echo %s > %s' % (dv, f),
+                                 '%s disable' % log_name)
diff --git a/client/site_tests/video_ChromeHWDecodeUsed/video_ChromeHWDecodeUsed.py b/client/site_tests/video_ChromeHWDecodeUsed/video_ChromeHWDecodeUsed.py
index e97c284..ea84db3 100755
--- a/client/site_tests/video_ChromeHWDecodeUsed/video_ChromeHWDecodeUsed.py
+++ b/client/site_tests/video_ChromeHWDecodeUsed/video_ChromeHWDecodeUsed.py
@@ -13,6 +13,7 @@
 from autotest_lib.client.cros.video import histogram_verifier
 from autotest_lib.client.cros.video import constants
 from autotest_lib.client.cros.video import native_html5_player
+from autotest_lib.client.cros.video import helper_logger
 
 
 class video_ChromeHWDecodeUsed(test.test):
@@ -41,7 +42,7 @@
 
         return False
 
-
+    @helper_logger.video_log_wrapper
     def run_once(self, codec, is_mse, video_file, arc_mode=None):
         """
         Tests whether VDA works by verifying histogram for the loaded video.
@@ -53,8 +54,10 @@
         if self.is_skipping_test(codec):
             raise error.TestNAError('Skipping test run on this board.')
 
-        with chrome.Chrome(arc_mode=arc_mode,
-                           init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                arc_mode=arc_mode,
+                init_network_controller=True) as cr:
             # This will execute for MSE video by accesing shaka player
             if is_mse:
                  tab1 = cr.browser.tabs.New()
diff --git a/client/site_tests/video_ChromeRTCHWDecodeUsed/video_ChromeRTCHWDecodeUsed.py b/client/site_tests/video_ChromeRTCHWDecodeUsed/video_ChromeRTCHWDecodeUsed.py
index 03d9f0e..79fa165 100755
--- a/client/site_tests/video_ChromeRTCHWDecodeUsed/video_ChromeRTCHWDecodeUsed.py
+++ b/client/site_tests/video_ChromeRTCHWDecodeUsed/video_ChromeRTCHWDecodeUsed.py
@@ -8,6 +8,7 @@
 from autotest_lib.client.common_lib import error, file_utils, utils
 from autotest_lib.client.common_lib.cros import chrome
 from autotest_lib.client.cros.video import histogram_verifier
+from autotest_lib.client.cros.video import helper_logger
 
 
 # Chrome flags to use fake camera and skip camera permission.
@@ -57,7 +58,7 @@
             os.path.join(self.bindir, 'loopback.html')))
         tab.WaitForDocumentReadyStateToBeComplete()
 
-
+    @helper_logger.video_log_wrapper
     def run_once(self, video_name, histogram_name, histogram_bucket_val):
         if self.is_skipping_test():
             raise error.TestNAError('Skipping test run on this board.')
@@ -69,6 +70,7 @@
 
         # Start chrome with test flags.
         EXTRA_BROWSER_ARGS.append(FAKE_FILE_ARG % local_path)
+        EXTRA_BROWSER_ARGS.append(helper_logger.chrome_vmodule_flag())
         with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS,
                            init_network_controller=True) as cr:
             # Open WebRTC loopback page.
diff --git a/client/site_tests/video_ChromeRTCHWEncodeUsed/video_ChromeRTCHWEncodeUsed.py b/client/site_tests/video_ChromeRTCHWEncodeUsed/video_ChromeRTCHWEncodeUsed.py
index e7d4e51..bee1e60 100755
--- a/client/site_tests/video_ChromeRTCHWEncodeUsed/video_ChromeRTCHWEncodeUsed.py
+++ b/client/site_tests/video_ChromeRTCHWEncodeUsed/video_ChromeRTCHWEncodeUsed.py
@@ -10,6 +10,7 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib import file_utils
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 
 # Chrome flags to use fake camera and skip camera permission.
@@ -86,7 +87,7 @@
                     sleep_interval=1)
             _histogram_success(histogram, bucket)
 
-
+    @helper_logger.video_log_wrapper
     def run_once(self, arc_mode=None):
         # Download test video.
         url = DOWNLOAD_BASE + VIDEO_NAME
@@ -95,6 +96,7 @@
 
         # Start chrome with test flags.
         EXTRA_BROWSER_ARGS.append(FAKE_FILE_ARG % local_path)
+        EXTRA_BROWSER_ARGS.append(helper_logger.chrome_vmodule_flag())
         with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS,
                            arc_mode=arc_mode,
                            init_network_controller=True) as cr:
diff --git a/client/site_tests/video_ChromeVidResChangeHWDecode/video_ChromeVidResChangeHWDecode.py b/client/site_tests/video_ChromeVidResChangeHWDecode/video_ChromeVidResChangeHWDecode.py
index 6497e0d..73347bd 100755
--- a/client/site_tests/video_ChromeVidResChangeHWDecode/video_ChromeVidResChangeHWDecode.py
+++ b/client/site_tests/video_ChromeVidResChangeHWDecode/video_ChromeVidResChangeHWDecode.py
@@ -11,13 +11,14 @@
 from autotest_lib.client.cros.video import histogram_verifier
 from autotest_lib.client.cros.video import constants
 from autotest_lib.client.cros.video import native_html5_player
+from autotest_lib.client.cros.video import helper_logger
 
 
 class video_ChromeVidResChangeHWDecode(test.test):
     """Verify that VDA works in Chrome for video with resolution changes."""
     version = 1
 
-
+    @helper_logger.video_log_wrapper
     def run_once(self, video_file, video_len):
         """Verify VDA and playback for the video_file.
 
@@ -25,7 +26,9 @@
         @param video_len : test video file length.
         """
 
-        with chrome.Chrome(init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                init_network_controller=True) as cr:
             shutil.copy2(constants.VIDEO_HTML_FILEPATH, self.bindir)
             cr.browser.platform.SetHTTPServerDirectories(self.bindir)
             tab1 = cr.browser.tabs[0]
diff --git a/client/site_tests/video_GlitchDetection/video_GlitchDetection.py b/client/site_tests/video_GlitchDetection/video_GlitchDetection.py
index 840c932..d9779c8 100755
--- a/client/site_tests/video_GlitchDetection/video_GlitchDetection.py
+++ b/client/site_tests/video_GlitchDetection/video_GlitchDetection.py
@@ -17,6 +17,7 @@
 from autotest_lib.client.cros.video import constants
 from autotest_lib.client.cros.video import frame_checksum_utils
 from autotest_lib.client.cros.video import native_html5_player
+from autotest_lib.client.cros.video import helper_logger
 from autotest_lib.client.cros.multimedia import local_facade_factory
 
 
@@ -31,7 +32,7 @@
     """
     version = 2
 
-
+    @helper_logger.video_log_wrapper
     def run_once(self, source_path, codec, resolution, host, args,
                  collect_only = False):
 
@@ -42,6 +43,7 @@
         file_utils.make_leaf_dir(constants.TEST_DIR)
 
         with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
                 extension_paths = [cros_constants.MULTIMEDIA_TEST_EXTENSION],
                 autotest_ext=True,
                 init_network_controller=True) as cr:
diff --git a/client/site_tests/video_HangoutHardwarePerf/video_HangoutHardwarePerf.py b/client/site_tests/video_HangoutHardwarePerf/video_HangoutHardwarePerf.py
index 011e416..d7d9d7e 100644
--- a/client/site_tests/video_HangoutHardwarePerf/video_HangoutHardwarePerf.py
+++ b/client/site_tests/video_HangoutHardwarePerf/video_HangoutHardwarePerf.py
@@ -11,6 +11,7 @@
 from autotest_lib.client.cros import power_status, power_utils
 from autotest_lib.client.cros import service_stopper
 from autotest_lib.client.cros.audio import cmd_utils
+from autotest_lib.client.cros.video import helper_logger
 
 # The download base for test assets.
 DOWNLOAD_BASE = ('http://commondatastorage.googleapis.com'
@@ -209,7 +210,9 @@
             '--test_video_data=%s' % ';'.join(test_video_data),
             '--rendering_warm_up=%d' % RENDERING_WARM_UP,
             '--rendering_fps=%f' % RENDERING_FPS,
-            '--num_play_throughs=%d' % MAX_INT]
+            '--num_play_throughs=%d' % MAX_INT,
+            helper_logger.chrome_vmodule_flag(),
+        ]
         cmd_line.append('--ozone-platform=gbm')
         return cmd_line
 
@@ -231,7 +234,9 @@
             '--gtest_filter=SimpleEncode/*/0',
             '--test_stream_data=%s' % ';'.join(test_stream_data),
             '--run_at_fps',
-            '--num_frames_to_encode=%d' % MAX_INT]
+            '--num_frames_to_encode=%d' % MAX_INT,
+            helper_logger.chrome_vmodule_flag(),
+        ]
         cmd_line.append('--ozone-platform=gbm')
         return cmd_line
 
@@ -260,6 +265,7 @@
         finally:
             cmd_utils.kill_or_log_returncode(*popens)
 
+    @helper_logger.video_log_wrapper
     @chrome_binary_test.nuke_chrome
     def run_once(self, resources, decode_videos, encode_videos, measurement):
         self._downloads = DownloadManager(tmpdir = self.tmpdir)
diff --git a/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py b/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py
index acf8055..20e6bce 100644
--- a/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py
+++ b/client/site_tests/video_JpegDecodeAccelerator/video_JpegDecodeAccelerator.py
@@ -6,6 +6,7 @@
 
 import logging
 from autotest_lib.client.cros import chrome_binary_test
+from autotest_lib.client.cros.video import helper_logger
 
 class video_JpegDecodeAccelerator(chrome_binary_test.ChromeBinaryTest):
     """
@@ -22,6 +23,7 @@
     binary = 'jpeg_decode_accelerator_unittest'
 
 
+    @helper_logger.video_log_wrapper
     @chrome_binary_test.nuke_chrome
     def run_once(self, gtest_filter=None):
         """
@@ -32,7 +34,7 @@
         @raises: error.TestFail for jpeg_decode_accelerator_unittest failures.
         """
         logging.debug('Starting video_JpegDecodeAccelerator')
-        cmd_line_list = []
+        cmd_line_list = [helper_logger.chrome_vmodule_flag()]
         if gtest_filter:
             cmd_line_list.append('--gtest_filter="%s"' % gtest_filter)
 
diff --git a/client/site_tests/video_MultiplePlayback/video_MultiplePlayback.py b/client/site_tests/video_MultiplePlayback/video_MultiplePlayback.py
index 903c557..952ea2f 100755
--- a/client/site_tests/video_MultiplePlayback/video_MultiplePlayback.py
+++ b/client/site_tests/video_MultiplePlayback/video_MultiplePlayback.py
@@ -9,6 +9,7 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
 from autotest_lib.client.cros.video import youtube_helper
+from autotest_lib.client.cros.video import helper_logger
 
 
 FLASH_PROCESS_NAME = 'chrome/chrome --type=ppapi'
@@ -77,11 +78,14 @@
         yh.verify_video_playback()
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self):
         # TODO(scottz): Remove this when crbug.com/220147 is fixed.
         dut_board = utils.get_current_board()
         if dut_board == 'x86-mario':
            raise error.TestNAError('This test is not available on %s' %
                                     dut_board)
-        with chrome.Chrome(init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                init_network_controller=True) as cr:
             self.run_video_tests(cr.browser)
diff --git a/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py b/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py
index 1743ddb..71d3288 100644
--- a/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py
+++ b/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py
@@ -14,6 +14,7 @@
 from autotest_lib.client.cros import service_stopper
 from autotest_lib.client.cros.video import histogram_verifier
 from autotest_lib.client.cros.video import constants
+from autotest_lib.client.cros.video import helper_logger
 
 
 DISABLE_ACCELERATED_VIDEO_DECODE_BROWSER_ARGS = [
@@ -78,6 +79,7 @@
                                "loop=true")
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self, video_name, video_description, power_test=False,
                  arc_mode=None):
         """
@@ -233,8 +235,10 @@
         """
         keyvals = {}
 
-        with chrome.Chrome(arc_mode=self.arc_mode,
-                           init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                arc_mode=self.arc_mode,
+                init_network_controller=True) as cr:
             # Open the video playback page and start playing.
             self.start_playback(cr, local_path)
             result = gather_result(cr)
diff --git a/client/site_tests/video_VDAPerf/video_VDAPerf.py b/client/site_tests/video_VDAPerf/video_VDAPerf.py
index 25320e5..3601b7c 100644
--- a/client/site_tests/video_VDAPerf/video_VDAPerf.py
+++ b/client/site_tests/video_VDAPerf/video_VDAPerf.py
@@ -12,6 +12,7 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib import file_utils
 from autotest_lib.client.cros import chrome_binary_test
+from autotest_lib.client.cros.video import helper_logger
 
 from contextlib import closing
 from math import ceil, floor
@@ -230,14 +231,15 @@
 
         # Get frame delivery time, decode as fast as possible.
         test_log_file = self._results_file(name, 'no_rendering', OUTPUT_LOG)
-        cmd_line = (
-            '--test_video_data="%s" ' % test_video_data +
-            '--gtest_filter=DecodeVariations/*/0 ' +
-            '--disable_rendering ' +
-            '--output_log="%s" ' % test_log_file +
-            '--ozone-platform=gbm'
-        )
-
+        cmd_line_list = [
+            '--test_video_data="%s"' % test_video_data,
+            '--gtest_filter=DecodeVariations/*/0',
+            '--disable_rendering',
+            '--output_log="%s"' % test_log_file,
+            '--ozone-platform=gbm',
+            helper_logger.chrome_vmodule_flag(),
+        ]
+        cmd_line = ' '.join(cmd_line_list)
         self.run_chrome_test_binary(BINARY, cmd_line)
 
         frame_delivery_times = self._load_frame_delivery_times(test_log_file)
@@ -250,14 +252,16 @@
         # Get frame drop rate & CPU usage, decode at the specified fps
         test_log_file = self._results_file(name, 'with_rendering', OUTPUT_LOG)
         time_log_file = self._results_file(name, 'with_rendering', TIME_LOG)
-        cmd_line = (
-            '--test_video_data="%s" ' % test_video_data +
-            '--gtest_filter=DecodeVariations/*/0 ' +
-            '--rendering_warm_up=%d ' % RENDERING_WARM_UP_ITERS +
-            '--rendering_fps=%s ' % rendering_fps +
-            '--output_log="%s" ' % test_log_file +
-            '--ozone-platform=gbm'
-        )
+        cmd_line_list = [
+            '--test_video_data="%s"' % test_video_data,
+            '--gtest_filter=DecodeVariations/*/0',
+            '--rendering_warm_up=%d' % RENDERING_WARM_UP_ITERS,
+            '--rendering_fps=%s' % rendering_fps,
+            '--output_log="%s"' % test_log_file,
+            '--ozone-platform=gbm',
+            helper_logger.chrome_vmodule_flag(),
+        ]
+        cmd_line = ' '.jon(cmd_line_list)
         time_cmd = ('%s -f "%s" -o "%s" ' %
                     (TIME_BINARY, TIME_OUTPUT_FORMAT, time_log_file))
         self.run_chrome_test_binary(BINARY, cmd_line, prefix=time_cmd)
@@ -268,12 +272,14 @@
 
         # Get decode time median.
         test_log_file = self._results_file(name, 'decode_time', OUTPUT_LOG)
-        cmd_line = (
-            '--test_video_data="%s" ' % test_video_data +
-            '--gtest_filter=*TestDecodeTimeMedian ' +
-            '--output_log="%s" ' % test_log_file +
-            '--ozone-platform=gbm'
-        )
+        cmd_line_list = [
+            '--test_video_data="%s"' % test_video_data,
+            '--gtest_filter=*TestDecodeTimeMedian',
+            '--output_log="%s"' % test_log_file,
+            '--ozone-platform=gbm',
+            helper_logger.chrome_vmodule_flag(),
+        ]
+        cmd_line = ' '.join(cmd_line_list)
         self.run_chrome_test_binary(BINARY, cmd_line)
         line = open(test_log_file, 'r').read()
         m = RE_DECODE_TIME_MEDIAN.match(line)
@@ -281,7 +287,7 @@
         decode_time = int(m.group(1))
         self._logperf(name, KEY_DECODE_TIME_50, decode_time, UNIT_MICROSECOND)
 
-
+    @helper_logger.video_log_wrapper
     @chrome_binary_test.nuke_chrome
     def run_once(self, test_cases):
         self._perf_keyvals = {}
diff --git a/client/site_tests/video_VDASanity/video_VDASanity.py b/client/site_tests/video_VDASanity/video_VDASanity.py
index a1112f0..b875469 100644
--- a/client/site_tests/video_VDASanity/video_VDASanity.py
+++ b/client/site_tests/video_VDASanity/video_VDASanity.py
@@ -8,6 +8,7 @@
 from autotest_lib.client.bin import utils
 from autotest_lib.client.common_lib import file_utils
 from autotest_lib.client.cros import chrome_binary_test
+from autotest_lib.client.cros.video import helper_logger
 
 
 DOWNLOAD_BASE = ('http://commondatastorage.googleapis.com'
@@ -21,6 +22,7 @@
     """
     version = 1
 
+    @helper_logger.video_log_wrapper
     @chrome_binary_test.nuke_chrome
     def run_once(self, test_cases):
         for (path, width, height, frame_num, frag_num, profile) in test_cases:
@@ -42,8 +44,9 @@
         cmd_line_list = [
             '--test_video_data="%s"' % test_video_data,
             '--gtest_filter=VideoDecodeAcceleratorTest.NoCrash',
-            '--ozone-platform=gbm'
-            ]
+            helper_logger.chrome_vmodule_flag(),
+            '--ozone-platform=gbm',
+        ]
         cmd_line = ' '.join(cmd_line_list)
         self.run_chrome_test_binary(BINARY, cmd_line)
 
@@ -52,4 +55,3 @@
             os.remove(filepath)
         except OSError:
             pass
-
diff --git a/client/site_tests/video_VEAPerf/video_VEAPerf.py b/client/site_tests/video_VEAPerf/video_VEAPerf.py
index c05d56e..e746070 100644
--- a/client/site_tests/video_VEAPerf/video_VEAPerf.py
+++ b/client/site_tests/video_VEAPerf/video_VEAPerf.py
@@ -16,6 +16,7 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib import file_utils
 from autotest_lib.client.cros import chrome_binary_test
+from autotest_lib.client.cros.video import helper_logger
 
 
 DOWNLOAD_BASE = ('http://commondatastorage.googleapis.com'
@@ -201,6 +202,7 @@
             '--gtest_filter=EncoderPerf/*/0',
             '--test_stream_data=%s' % test_stream_data,
             '--output_log="%s"' % test_log_file,
+            helper_logger.chrome_vmodule_flag(),
             '--ozone-platform=gbm']
         self.run_chrome_test_binary(VEA_BINARY, ' '.join(vea_args))
         self._analyze_fps(test_name, test_log_file)
@@ -215,6 +217,7 @@
             '--test_stream_data=%s' % test_stream_data,
             '--run_at_fps', '--measure_latency',
             '--output_log="%s"' % test_log_file,
+            helper_logger.chrome_vmodule_flag(),
             '--ozone-platform=gbm']
         time_cmd = ('%s -f "%s" -o "%s" ' %
                     (TIME_BINARY, TIME_OUTPUT_FORMAT, time_log_file))
@@ -223,7 +226,7 @@
         self._analyze_encode_latency(test_name, test_log_file)
         self._analyze_cpu_usage(test_name, time_log_file)
 
-
+    @helper_logger.video_log_wrapper
     @chrome_binary_test.nuke_chrome
     def run_once(self, test_cases):
         last_error = None
@@ -253,4 +256,3 @@
 
         if last_error:
             raise last_error
-
diff --git a/client/site_tests/video_VideoCorruption/video_VideoCorruption.py b/client/site_tests/video_VideoCorruption/video_VideoCorruption.py
index b1af0ac..9b66589 100755
--- a/client/site_tests/video_VideoCorruption/video_VideoCorruption.py
+++ b/client/site_tests/video_VideoCorruption/video_VideoCorruption.py
@@ -9,18 +9,22 @@
 from autotest_lib.client.common_lib.cros import chrome
 from autotest_lib.client.cros.video import constants
 from autotest_lib.client.cros.video import native_html5_player
+from autotest_lib.client.cros.video import helper_logger
 
 
 class video_VideoCorruption(test.test):
     """This test verifies playing corrupted video in Chrome."""
     version = 1
 
+    @helper_logger.video_log_wrapper
     def run_once(self, video):
         """Tests whether Chrome handles corrupted videos gracefully.
 
         @param video: Sample corrupted video file to be played in Chrome.
         """
-        with chrome.Chrome(init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                init_network_controller=True) as cr:
             shutil.copy2(constants.VIDEO_HTML_FILEPATH, self.bindir)
             cr.browser.platform.SetHTTPServerDirectories(self.bindir)
             tab = cr.browser.tabs[0]
diff --git a/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py b/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py
index b98548c..543ce15 100644
--- a/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py
+++ b/client/site_tests/video_VideoDecodeAccelerator/video_VideoDecodeAccelerator.py
@@ -7,6 +7,7 @@
 from autotest_lib.client.bin import utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.cros import chrome_binary_test
+from autotest_lib.client.cros.video import helper_logger
 
 class video_VideoDecodeAccelerator(chrome_binary_test.ChromeBinaryTest):
     """
@@ -17,7 +18,7 @@
     version = 1
     binary = 'video_decode_accelerator_unittest'
 
-
+    @helper_logger.video_log_wrapper
     @chrome_binary_test.nuke_chrome
     def run_once(self, videos, use_cr_source_dir=True, gtest_filter=None):
         """
@@ -45,6 +46,7 @@
             # along with test logs.
             cmd_line_list.append(
                 '--thumbnail_output_dir="%s"' % self.resultsdir)
+            cmd_line_list.append(helper_logger.chrome_vmodule_flag())
             cmd_line_list.append('--ozone-platform=gbm')
 
             if gtest_filter:
diff --git a/client/site_tests/video_VideoDecodeMemoryUsage/video_VideoDecodeMemoryUsage.py b/client/site_tests/video_VideoDecodeMemoryUsage/video_VideoDecodeMemoryUsage.py
index 9124bc0..de9397f 100644
--- a/client/site_tests/video_VideoDecodeMemoryUsage/video_VideoDecodeMemoryUsage.py
+++ b/client/site_tests/video_VideoDecodeMemoryUsage/video_VideoDecodeMemoryUsage.py
@@ -13,6 +13,7 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
 from autotest_lib.client.cros.graphics import graphics_utils
+from autotest_lib.client.cros.video import helper_logger
 
 TEST_PAGE = 'content.html'
 
@@ -359,11 +360,14 @@
     """This is a memory usage test for video playback."""
     version = 1
 
+    @helper_logger.video_log_wrapper
     def run_once(self, testcases):
         last_error = None
         logging.getLogger().addFilter(TelemetryFilter())
 
-        with chrome.Chrome(init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                init_network_controller=True) as cr:
             cr.browser.platform.SetHTTPServerDirectories(self.bindir)
             for class_name, videos in testcases:
                 name = _get_testcase_name(class_name, videos)
diff --git a/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py b/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py
index 805c8c6..1662b71 100644
--- a/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py
+++ b/client/site_tests/video_VideoEncodeAccelerator/video_VideoEncodeAccelerator.py
@@ -12,6 +12,7 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib import file_utils
 from autotest_lib.client.cros import chrome_binary_test
+from autotest_lib.client.cros.video import helper_logger
 
 DOWNLOAD_BASE = 'http://commondatastorage.googleapis.com/chromiumos-test-assets-public/'
 BINARY = 'video_encode_accelerator_unittest'
@@ -87,6 +88,7 @@
 
         return ''
 
+    @helper_logger.video_log_wrapper
     @chrome_binary_test.nuke_chrome
     def run_once(self, in_cloud, streams, profile, gtest_filter=None):
         """Runs video_encode_accelerator_unittest on the streams.
@@ -113,6 +115,7 @@
             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))
+            cmd_line_list.append(helper_logger.chrome_vmodule_flag())
             cmd_line_list.append('--ozone-platform=gbm')
 
             # Command line |gtest_filter| can override get_filter_option().
diff --git a/client/site_tests/video_VideoReload/video_VideoReload.py b/client/site_tests/video_VideoReload/video_VideoReload.py
index 4b0e3cc..9981fe0 100755
--- a/client/site_tests/video_VideoReload/video_VideoReload.py
+++ b/client/site_tests/video_VideoReload/video_VideoReload.py
@@ -9,6 +9,7 @@
 from autotest_lib.client.common_lib.cros import chrome
 from autotest_lib.client.cros.video import constants
 from autotest_lib.client.cros.video import native_html5_player
+from autotest_lib.client.cros.video import helper_logger
 
 WAIT_TIMEOUT_S = 30
 
@@ -16,12 +17,15 @@
     """This test verifies reloading video works in Chrome."""
     version = 1
 
+    @helper_logger.video_log_wrapper
     def run_once(self, video_file):
         """Tests whether Chrome reloads video after reloading the tab.
 
         @param video_file: fullpath to video to play.
         """
-        with chrome.Chrome(init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                init_network_controller=True) as cr:
             shutil.copy2(constants.VIDEO_HTML_FILEPATH, self.bindir)
             cr.browser.platform.SetHTTPServerDirectories(self.bindir)
             tab = cr.browser.tabs[0]
diff --git a/client/site_tests/video_VideoSanity/video_VideoSanity.py b/client/site_tests/video_VideoSanity/video_VideoSanity.py
index eeeb57d..885de9f 100755
--- a/client/site_tests/video_VideoSanity/video_VideoSanity.py
+++ b/client/site_tests/video_VideoSanity/video_VideoSanity.py
@@ -10,6 +10,7 @@
 from autotest_lib.client.common_lib.cros import chrome, arc_common
 from autotest_lib.client.cros.video import constants
 from autotest_lib.client.cros.video import native_html5_player
+from autotest_lib.client.cros.video import helper_logger
 
 class video_VideoSanity(test.test):
     """This test verify the media elements and video sanity.
@@ -21,6 +22,7 @@
     version = 2
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self, video_file, arc_mode=False):
         """
         Tests whether the requested video is playable
@@ -49,8 +51,10 @@
             arc_mode_str = arc_common.ARC_MODE_ENABLED
         else:
             arc_mode_str = arc_common.ARC_MODE_DISABLED
-        with chrome.Chrome(arc_mode=arc_mode_str,
-                           init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                arc_mode=arc_mode_str,
+                init_network_controller=True) as cr:
              shutil.copy2(constants.VIDEO_HTML_FILEPATH, self.bindir)
              video_path = os.path.join(constants.CROS_VIDEO_DIR,
                                        'files', video_file)
diff --git a/client/site_tests/video_VideoSeek/video_VideoSeek.py b/client/site_tests/video_VideoSeek/video_VideoSeek.py
index 1344c2a..1470304 100755
--- a/client/site_tests/video_VideoSeek/video_VideoSeek.py
+++ b/client/site_tests/video_VideoSeek/video_VideoSeek.py
@@ -9,6 +9,7 @@
 from autotest_lib.client.bin import test, utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 WAIT_TIMEOUT_S = 180
 
@@ -42,6 +43,8 @@
 
         return False
 
+
+    @helper_logger.video_log_wrapper
     def run_once(self, codec, is_switchres, video):
         """Tests whether video seek works by random seeks forward and backward.
 
@@ -52,7 +55,9 @@
         if self.is_skipping_test(codec, is_switchres):
             raise error.TestNAError('Skipping test run on this board.')
 
-        with chrome.Chrome(init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                init_network_controller=True) as cr:
             cr.browser.platform.SetHTTPServerDirectories(self.bindir)
             tab = cr.browser.tabs[0]
             tab.Navigate(cr.browser.platform.http_server.UrlOf(
diff --git a/client/site_tests/video_VimeoVideo/video_VimeoVideo.py b/client/site_tests/video_VimeoVideo/video_VimeoVideo.py
index 3928221..bab3669 100755
--- a/client/site_tests/video_VimeoVideo/video_VimeoVideo.py
+++ b/client/site_tests/video_VimeoVideo/video_VimeoVideo.py
@@ -10,6 +10,7 @@
 from autotest_lib.client.bin import test, utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 
 class video_VimeoVideo(test.test):
@@ -107,7 +108,10 @@
             playback = playback + 1
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self):
-        with chrome.Chrome(init_network_controller=True) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                init_network_controller=True) as cr:
             cr.browser.platform.SetHTTPServerDirectories(self.bindir)
             self.run_vimeo_tests(cr.browser)
diff --git a/client/site_tests/video_WebRtcCamera/video_WebRtcCamera.py b/client/site_tests/video_WebRtcCamera/video_WebRtcCamera.py
index be1b2e5..ae3967f 100644
--- a/client/site_tests/video_WebRtcCamera/video_WebRtcCamera.py
+++ b/client/site_tests/video_WebRtcCamera/video_WebRtcCamera.py
@@ -10,6 +10,7 @@
 from autotest_lib.client.bin import utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 EXTRA_BROWSER_ARGS = ['--use-fake-ui-for-media-stream']
 
@@ -77,10 +78,12 @@
             desc=('getusermedia.html:reportTestDone did not run. Test did not '
                   'complete successfully.'))
 
+    @helper_logger.video_log_wrapper
     def run_once(self):
         """Runs the test."""
         self.board = utils.get_current_board()
-        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS,
+        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS +\
+                           [helper_logger.chrome_vmodule_flag()],
                            init_network_controller=True) as cr:
             self.start_getusermedia(cr)
             self.print_perf_results()
diff --git a/client/site_tests/video_WebRtcMediaRecorder/video_WebRtcMediaRecorder.py b/client/site_tests/video_WebRtcMediaRecorder/video_WebRtcMediaRecorder.py
index 6ce536d..b011e07 100644
--- a/client/site_tests/video_WebRtcMediaRecorder/video_WebRtcMediaRecorder.py
+++ b/client/site_tests/video_WebRtcMediaRecorder/video_WebRtcMediaRecorder.py
@@ -9,6 +9,7 @@
 from autotest_lib.client.bin import utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 EXTRA_BROWSER_ARGS = ['--use-fake-ui-for-media-stream',
                       '--use-fake-device-for-media-stream',
@@ -31,7 +32,8 @@
 
         @param test_name: Name of test to run.
         """
-        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS,
+        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS +\
+                           [helper_logger.chrome_vmodule_flag()],
                            init_network_controller=True) as cr:
             cr.browser.platform.SetHTTPServerDirectories(self.bindir)
             self.tab = cr.browser.tabs[0]
@@ -76,6 +78,7 @@
             return True
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self):
         """Runs the video_WebRtcMediaRecorder test."""
         self.launch_recorder_test('testStartAndRecorderState')
@@ -100,4 +103,3 @@
         self.launch_recorder_test('testAddingTrackToMediaStreamFiresErrorEvent')
         self.launch_recorder_test(
                 'testRemovingTrackFromMediaStreamFiresErrorEvent')
-
diff --git a/client/site_tests/video_WebRtcPeerConnectionWithCamera/video_WebRtcPeerConnectionWithCamera.py b/client/site_tests/video_WebRtcPeerConnectionWithCamera/video_WebRtcPeerConnectionWithCamera.py
index d7cb903..fcdf50e 100644
--- a/client/site_tests/video_WebRtcPeerConnectionWithCamera/video_WebRtcPeerConnectionWithCamera.py
+++ b/client/site_tests/video_WebRtcPeerConnectionWithCamera/video_WebRtcPeerConnectionWithCamera.py
@@ -9,6 +9,7 @@
 from autotest_lib.client.bin import utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 EXTRA_BROWSER_ARGS = ['--use-fake-ui-for-media-stream']
 
@@ -51,12 +52,14 @@
             _test_done, timeout=timeout_secs, sleep_interval=1,
             desc='loopback.html reports itself as finished')
 
+    @helper_logger.video_log_wrapper
     def run_once(self, video_codec):
         """Runs the video_WebRtcPeerConnectionWithCamera test.
 
         @param video_codec: video codec to use.
         """
-        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS,
+        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS +\
+                           [helper_logger.chrome_vmodule_flag()],
                            init_network_controller=True) as cr:
             self.start_loopback(cr, video_codec)
             self.wait_test_completed(TIMEOUT)
diff --git a/client/site_tests/video_WebRtcPerf/video_WebRtcPerf.py b/client/site_tests/video_WebRtcPerf/video_WebRtcPerf.py
index 23e61da..4d66999 100644
--- a/client/site_tests/video_WebRtcPerf/video_WebRtcPerf.py
+++ b/client/site_tests/video_WebRtcPerf/video_WebRtcPerf.py
@@ -14,6 +14,7 @@
 from autotest_lib.client.cros import service_stopper
 from autotest_lib.client.cros.video import histogram_verifier
 from autotest_lib.client.cros.video import constants
+from autotest_lib.client.cros.video import helper_logger
 
 
 EXTRA_BROWSER_ARGS = ['--use-fake-device-for-media-stream',
@@ -125,6 +126,7 @@
         return tab
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self, decode_time_test=False, cpu_test=False,
                  power_test=False, arc_mode=None):
         """
@@ -178,7 +180,8 @@
         keyvals = {}
         EXTRA_BROWSER_ARGS.append(FAKE_FILE_ARG % local_path)
 
-        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS,
+        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS +\
+                           [helper_logger.chrome_vmodule_flag()],
                            arc_mode=self.arc_mode,
                            init_network_controller=True) as cr:
             # On daisy, Chrome freezes about 30 seconds after login because of
diff --git a/client/site_tests/video_WebRtcSanity/video_WebRtcSanity.py b/client/site_tests/video_WebRtcSanity/video_WebRtcSanity.py
index e607d77..24f53b0 100644
--- a/client/site_tests/video_WebRtcSanity/video_WebRtcSanity.py
+++ b/client/site_tests/video_WebRtcSanity/video_WebRtcSanity.py
@@ -9,6 +9,7 @@
 from autotest_lib.client.bin import utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 EXTRA_BROWSER_ARGS = ['--use-fake-ui-for-media-stream',
                       '--use-fake-device-for-media-stream']
@@ -50,9 +51,11 @@
             _test_done, timeout=timeout_secs, sleep_interval=1,
             desc = 'getusermedia.html reports itself as finished')
 
+    @helper_logger.video_log_wrapper
     def run_once(self):
         """Runs the test."""
-        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS,
+        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS +\
+                           [helper_logger.chrome_vmodule_flag()],
                            init_network_controller=True) as cr:
             self.start_getusermedia(cr)
             self.wait_test_completed(SHORT_TIMEOUT_IN_SECS)
diff --git a/client/site_tests/video_YouTubeHTML5/video_YouTubeHTML5.py b/client/site_tests/video_YouTubeHTML5/video_YouTubeHTML5.py
index e08b5c6..216f175 100755
--- a/client/site_tests/video_YouTubeHTML5/video_YouTubeHTML5.py
+++ b/client/site_tests/video_YouTubeHTML5/video_YouTubeHTML5.py
@@ -8,6 +8,7 @@
 from autotest_lib.client.common_lib.cros import chrome
 from autotest_lib.client.cros import httpd
 from autotest_lib.client.cros.video import youtube_helper
+from autotest_lib.client.cros.video import helper_logger
 
 
 FLASH_PROCESS_NAME = 'chrome/chrome --type=ppapi'
@@ -64,6 +65,8 @@
         yh.verify_player_states()
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self):
-        with chrome.Chrome() as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag()) as cr:
             self.run_youtube_tests(cr.browser)
diff --git a/client/site_tests/video_YouTubeMseEme/video_YouTubeMseEme.py b/client/site_tests/video_YouTubeMseEme/video_YouTubeMseEme.py
index b8a0a78..e3e2294 100644
--- a/client/site_tests/video_YouTubeMseEme/video_YouTubeMseEme.py
+++ b/client/site_tests/video_YouTubeMseEme/video_YouTubeMseEme.py
@@ -8,6 +8,7 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
 from autotest_lib.client.cros import httpd
+from autotest_lib.client.cros.video import helper_logger
 
 
 class video_YouTubeMseEme(test.test):
@@ -277,8 +278,10 @@
                 msg='test_can_play_widevine failed.')
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self, subtest_name):
-        with chrome.Chrome() as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag()) as cr:
             self.init(cr, self.PLAYER_PAGE)
 
             try:
diff --git a/client/site_tests/video_YouTubePage/video_YouTubePage.py b/client/site_tests/video_YouTubePage/video_YouTubePage.py
index e720e13..ef8d499 100644
--- a/client/site_tests/video_YouTubePage/video_YouTubePage.py
+++ b/client/site_tests/video_YouTubePage/video_YouTubePage.py
@@ -10,6 +10,7 @@
 from autotest_lib.client.bin import test
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import chrome
+from autotest_lib.client.cros.video import helper_logger
 
 
 class video_YouTubePage(test.test):
@@ -310,6 +311,7 @@
         self.verify_last_second_playback()
 
 
+    @helper_logger.video_log_wrapper
     def run_once(self, subtest_name):
         """Main runner for the test.
 
@@ -326,7 +328,9 @@
             extension_paths.append(extension_path)
 
 
-        with chrome.Chrome(extension_paths=extension_paths) as cr:
+        with chrome.Chrome(
+                extra_browser_args=helper_logger.chrome_vmodule_flag(),
+                extension_paths=extension_paths) as cr:
             self.initialize_test(cr, self.TEST_PAGE)
 
             if subtest_name is 'playing':