1*9c5db199SXin Li# Copyright 2017 The Chromium OS Authors. All rights reserved. 2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 3*9c5db199SXin Li# found in the LICENSE file. 4*9c5db199SXin Li 5*9c5db199SXin Liimport glob 6*9c5db199SXin Liimport os 7*9c5db199SXin Liimport logging 8*9c5db199SXin Liimport subprocess 9*9c5db199SXin Li 10*9c5db199SXin Lidef chrome_vmodule_flag(): 11*9c5db199SXin Li """Return vmodule flag for chrome to enable VDAs/VEAs/JDAs/V4L2IP logs""" 12*9c5db199SXin Li logging_patterns = ['*/media/gpu/*video_decode_accelerator.cc=2', 13*9c5db199SXin Li '*/media/gpu/*video_encode_accelerator.cc=2', 14*9c5db199SXin Li '*/media/gpu/*jpeg_decode_accelerator.cc=2', 15*9c5db199SXin Li '*/media/gpu/*image_processor.cc=2', 16*9c5db199SXin Li '*/media/gpu/v4l2/v4l2_device.cc=2'] 17*9c5db199SXin Li chrome_video_vmodule_flag = '--vmodule=' + ','.join(logging_patterns) 18*9c5db199SXin Li logging.info('chrome video vmodule flag: %s', chrome_video_vmodule_flag) 19*9c5db199SXin Li return chrome_video_vmodule_flag 20*9c5db199SXin Li 21*9c5db199SXin Li 22*9c5db199SXin Lidef video_log_wrapper(func): 23*9c5db199SXin Li """ 24*9c5db199SXin Li Return decorator that make verbose video logs enable 25*9c5db199SXin Li before test and make them disable after completing test. 26*9c5db199SXin Li 27*9c5db199SXin Li @param func: function, the test function, e.g., run_once 28*9c5db199SXin Li @returns decorator function 29*9c5db199SXin Li """ 30*9c5db199SXin Li vlog = VideoLog() 31*9c5db199SXin Li 32*9c5db199SXin Li #videobuf2 log 33*9c5db199SXin Li files = glob.glob('/sys/module/videobuf2_*/parameters/debug') 34*9c5db199SXin Li vlog.add_log(files, 35*9c5db199SXin Li ['1'] * len(files), 36*9c5db199SXin Li ['0'] * len(files), 37*9c5db199SXin Li 'videobuf2 log') 38*9c5db199SXin Li 39*9c5db199SXin Li #s5p_mfc log 40*9c5db199SXin Li fpath = '/sys/module/s5p_mfc/parameters/debug' 41*9c5db199SXin Li if os.path.exists(fpath): 42*9c5db199SXin Li vlog.add_log([fpath], 43*9c5db199SXin Li ['1'], 44*9c5db199SXin Li ['0'], 45*9c5db199SXin Li 's5p_mfc log') 46*9c5db199SXin Li 47*9c5db199SXin Li #rk3399 log 48*9c5db199SXin Li #rk3399 debug level is controlled by bits. 49*9c5db199SXin Li #Here, 3 means to enable log level 0 and 1. 50*9c5db199SXin Li fpath = '/sys/module/rockchip_vpu/parameters/debug' 51*9c5db199SXin Li if os.path.exists(fpath): 52*9c5db199SXin Li vlog.add_log([fpath], 53*9c5db199SXin Li ['3'], 54*9c5db199SXin Li ['0'], 55*9c5db199SXin Li 'rk3399 log') 56*9c5db199SXin Li 57*9c5db199SXin Li #rk3288 log 58*9c5db199SXin Li #rk3288 debug level is controlled by bits. 59*9c5db199SXin Li #Here, 3 means to enable log level 0 and 1. 60*9c5db199SXin Li fpath = '/sys/module/rk3288_vpu/parameters/debug' 61*9c5db199SXin Li if os.path.exists(fpath): 62*9c5db199SXin Li vlog.add_log([fpath], 63*9c5db199SXin Li ['3'], 64*9c5db199SXin Li ['0'], 65*9c5db199SXin Li 'rk3288 log') 66*9c5db199SXin Li 67*9c5db199SXin Li #go2001 log 68*9c5db199SXin Li fpath = '/sys/module/go2001/parameters/go2001_debug_level' 69*9c5db199SXin Li if os.path.exists(fpath): 70*9c5db199SXin Li vlog.add_log([fpath], 71*9c5db199SXin Li ['1'], 72*9c5db199SXin Li ['0'], 73*9c5db199SXin Li 'go2001 log') 74*9c5db199SXin Li 75*9c5db199SXin Li def call(*args, **kwargs): 76*9c5db199SXin Li """ 77*9c5db199SXin Li Enable logs before the test, execute the test and disable logs 78*9c5db199SXin Li after the test. 79*9c5db199SXin Li 80*9c5db199SXin Li In any case, it is guranteed to disable logs. 81*9c5db199SXin Li """ 82*9c5db199SXin Li with vlog: 83*9c5db199SXin Li return func(*args, **kwargs) 84*9c5db199SXin Li 85*9c5db199SXin Li return call 86*9c5db199SXin Li 87*9c5db199SXin Li 88*9c5db199SXin Lidef cmdexec_with_log(cmd, info_message): 89*9c5db199SXin Li """ 90*9c5db199SXin Li Execute command, logging infomation message. 91*9c5db199SXin Li 92*9c5db199SXin Li @param cmd: string, command to be executed 93*9c5db199SXin Li @param info_message: string, the messages to be shown in log message 94*9c5db199SXin Li """ 95*9c5db199SXin Li try: 96*9c5db199SXin Li logging.info('%s : %s', info_message, cmd) 97*9c5db199SXin Li subprocess.check_call(cmd, shell=True) 98*9c5db199SXin Li except subprocess.CalledProcessError: 99*9c5db199SXin Li logging.warning('Fail to execute command [%s] : %s', 100*9c5db199SXin Li info_message, cmd) 101*9c5db199SXin Li 102*9c5db199SXin Li 103*9c5db199SXin Liclass VideoLog: 104*9c5db199SXin Li """ 105*9c5db199SXin Li Enable/Disable video logs. 106*9c5db199SXin Li """ 107*9c5db199SXin Li def __init__(self): 108*9c5db199SXin Li self.logs = [] 109*9c5db199SXin Li 110*9c5db199SXin Li def add_log(self, files, enable_values, disable_values, log_name): 111*9c5db199SXin Li """ 112*9c5db199SXin Li Add new log 113*9c5db199SXin Li 114*9c5db199SXin Li @param files: list of string, file paths 115*9c5db199SXin Li @param enable_values: list of string, the list of value 116*9c5db199SXin Li to write to each file path for enabling 117*9c5db199SXin Li @param disable_values: list of string, the list of value 118*9c5db199SXin Li to write to each file path for disabling 119*9c5db199SXin Li @param log_name: string, name to be shown in log message 120*9c5db199SXin Li """ 121*9c5db199SXin Li self.logs.append({'files': files, 122*9c5db199SXin Li 'enable values': enable_values, 123*9c5db199SXin Li 'disable values': disable_values, 124*9c5db199SXin Li 'log name': log_name}) 125*9c5db199SXin Li 126*9c5db199SXin Li def __enter__(self): 127*9c5db199SXin Li """Enable logs""" 128*9c5db199SXin Li for log in self.logs: 129*9c5db199SXin Li log_name = log['log name'] 130*9c5db199SXin Li for f, ev in zip(log['files'], log['enable values']): 131*9c5db199SXin Li cmdexec_with_log('echo %s > %s' % (ev, f), 132*9c5db199SXin Li '%s enable' % log_name) 133*9c5db199SXin Li 134*9c5db199SXin Li def __exit__(self, exception_type, exception_value, traceback): 135*9c5db199SXin Li """Disable logs""" 136*9c5db199SXin Li for log in self.logs: 137*9c5db199SXin Li log_name = log['log name'] 138*9c5db199SXin Li for f, dv in zip(log['files'], log['disable values']): 139*9c5db199SXin Li cmdexec_with_log('echo %s > %s' % (dv, f), 140*9c5db199SXin Li '%s disable' % log_name) 141