aboutsummaryrefslogtreecommitdiff
path: root/catapult/devil/devil/android/logcat_monitor.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/devil/devil/android/logcat_monitor.py')
-rw-r--r--catapult/devil/devil/android/logcat_monitor.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/catapult/devil/devil/android/logcat_monitor.py b/catapult/devil/devil/android/logcat_monitor.py
index 0aece87d..249320b7 100644
--- a/catapult/devil/devil/android/logcat_monitor.py
+++ b/catapult/devil/devil/android/logcat_monitor.py
@@ -23,14 +23,15 @@ logger = logging.getLogger(__name__)
class LogcatMonitor(object):
- _RECORD_ITER_TIMEOUT = 2.0
+ _RECORD_ITER_TIMEOUT = 0.2
_RECORD_THREAD_JOIN_WAIT = 5.0
_WAIT_TIME = 0.2
- _THREADTIME_RE_FORMAT = (
+ THREADTIME_RE_FORMAT = (
r'(?P<date>\S*) +(?P<time>\S*) +(?P<proc_id>%s) +(?P<thread_id>%s) +'
r'(?P<log_level>%s) +(?P<component>%s) *: +(?P<message>%s)$')
- def __init__(self, adb, clear=True, filter_specs=None, output_file=None):
+ def __init__(self, adb, clear=True, filter_specs=None, output_file=None,
+ transform_func=None):
"""Create a LogcatMonitor instance.
Args:
@@ -38,6 +39,8 @@ class LogcatMonitor(object):
clear: If True, clear the logcat when monitoring starts.
filter_specs: An optional list of '<tag>[:priority]' strings.
output_file: File path to save recorded logcat.
+ transform_func: An optional unary callable that takes and returns
+ a list of lines, possibly transforming them in the process.
"""
if isinstance(adb, adb_wrapper.AdbWrapper):
self._adb = adb
@@ -50,6 +53,7 @@ class LogcatMonitor(object):
self._record_file_lock = threading.Lock()
self._record_thread = None
self._stop_recording_event = threading.Event()
+ self._transform_func = transform_func
@property
def output_file(self):
@@ -146,7 +150,7 @@ class LogcatMonitor(object):
component = r'[^\s:]+'
# pylint: disable=protected-access
threadtime_re = re.compile(
- type(self)._THREADTIME_RE_FORMAT % (
+ type(self).THREADTIME_RE_FORMAT % (
proc_id, thread_id, log_level, component, message_regex))
with open(self._record_file.name, 'r') as f:
@@ -176,6 +180,8 @@ class LogcatMonitor(object):
with self._record_file_lock:
if self._record_file and not self._record_file.closed:
+ if self._transform_func:
+ data = '\n'.join(self._transform_func([data]))
self._record_file.write(data + '\n')
self._stop_recording_event.clear()
@@ -228,6 +234,13 @@ class LogcatMonitor(object):
self._record_file.close()
self._record_file = None
+ def close(self):
+ """An alias for Close.
+
+ Allows LogcatMonitors to be used with contextlib.closing.
+ """
+ self.Close()
+
def __enter__(self):
"""Starts the logcat monitor."""
self.Start()