You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.6 KiB
141 lines
4.6 KiB
# 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/*image_processor.cc=2',
|
|
'*/media/gpu/v4l2/v4l2_device.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
|
|
"""
|
|
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],
|
|
['1'],
|
|
['0'],
|
|
's5p_mfc log')
|
|
|
|
#rk3399 log
|
|
#rk3399 debug level is controlled by bits.
|
|
#Here, 3 means to enable log level 0 and 1.
|
|
fpath = '/sys/module/rockchip_vpu/parameters/debug'
|
|
if os.path.exists(fpath):
|
|
vlog.add_log([fpath],
|
|
['3'],
|
|
['0'],
|
|
'rk3399 log')
|
|
|
|
#rk3288 log
|
|
#rk3288 debug level is controlled by bits.
|
|
#Here, 3 means to enable log level 0 and 1.
|
|
fpath = '/sys/module/rk3288_vpu/parameters/debug'
|
|
if os.path.exists(fpath):
|
|
vlog.add_log([fpath],
|
|
['3'],
|
|
['0'],
|
|
'rk3288 log')
|
|
|
|
#go2001 log
|
|
fpath = '/sys/module/go2001/parameters/go2001_debug_level'
|
|
if os.path.exists(fpath):
|
|
vlog.add_log([fpath],
|
|
['1'],
|
|
['0'],
|
|
'go2001 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)
|