multiple package and process support.

This commit is contained in:
Edison Wang
2013-06-13 14:45:37 -04:00
+26 -13
View File
@@ -30,13 +30,12 @@ import termios
import struct import struct
parser = argparse.ArgumentParser(description='Filter logcat by package name') parser = argparse.ArgumentParser(description='Filter logcat by package name')
parser.add_argument('package', help='Application package name') parser.add_argument('package', nargs='+', help='Application package name(s)')
parser.add_argument('--tag-width', metavar='N', dest='tag_width', type=int, default=22, help='Width of log tag') parser.add_argument('--tag-width', metavar='N', dest='tag_width', type=int, default=22, help='Width of log tag')
parser.add_argument('--color-gc', dest='color_gc', action='store_true', help='Color garbage collection')
args = parser.parse_args() args = parser.parse_args()
package_process = args.package + ':'
header_size = args.tag_width + 1 + 3 + 1 # space, level, space header_size = args.tag_width + 1 + 3 + 1 # space, level, space
# unpack the current terminal width/height # unpack the current terminal width/height
@@ -45,17 +44,16 @@ HEIGHT, WIDTH = struct.unpack('hh',data)
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
def colorize(message, fg=None, bg=None): RESET = '\033[0m'
ret = ''
def termcolor(fg=None, bg=None):
codes = [] codes = []
if fg is not None: codes.append('3%d' % fg) if fg is not None: codes.append('3%d' % fg)
if bg is not None: codes.append('10%d' % bg) if bg is not None: codes.append('10%d' % bg)
if codes: return '\033[%sm' % ';'.join(codes) if codes else ''
ret += '\033[%sm' % ';'.join(codes)
ret += message def colorize(message, fg=None, bg=None):
if codes: return termcolor(fg, bg) + message + RESET
ret += '\033[0m'
return ret
def indent_wrap(message): def indent_wrap(message):
wrap_area = WIDTH - header_size wrap_area = WIDTH - header_size
@@ -79,6 +77,7 @@ KNOWN_TAGS = {
'ActivityThread': WHITE, 'ActivityThread': WHITE,
'AndroidRuntime': CYAN, 'AndroidRuntime': CYAN,
'jdwp': WHITE, 'jdwp': WHITE,
'StrictMode': WHITE,
} }
def allocate_color(tag): def allocate_color(tag):
@@ -94,9 +93,20 @@ def allocate_color(tag):
RULES = { RULES = {
#re.compile(r"([\w\.@]+)=([\w\.@]+)"): r"%s\1%s=%s\2%s" % (format(fg=BLUE), format(fg=GREEN), format(fg=BLUE), format(reset=True)), # StrictMode policy violation; ~duration=319 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=31 violation=1
re.compile(r'^(StrictMode policy violation)(; ~duration=)(\d+ ms)')
: r'%s\1%s\2%s\3%s' % (termcolor(RED), RESET, termcolor(YELLOW), RESET),
} }
# Only enable GC coloring if the user opted-in
if args.color_gc:
# GC_CONCURRENT freed 3617K, 29% free 20525K/28648K, paused 4ms+5ms, total 85ms
key = re.compile(r'^(GC_(?:CONCURRENT|FOR_M?ALLOC|EXTERNAL_ALLOC|EXPLICIT) )(freed <?\d+.)(, \d+\% free \d+./\d+., )(paused \d+ms(?:\+\d+ms)?)')
val = r'\1%s\2%s\3%s\4%s' % (termcolor(GREEN), RESET, termcolor(YELLOW), RESET)
RULES[key] = val
TAGTYPES = { TAGTYPES = {
'V': colorize(' V ', fg=WHITE, bg=BLACK), 'V': colorize(' V ', fg=WHITE, bg=BLACK),
'D': colorize(' D ', fg=BLACK, bg=BLUE), 'D': colorize(' D ', fg=BLACK, bg=BLUE),
@@ -116,8 +126,11 @@ input = os.popen('adb logcat')
pids = set() pids = set()
last_tag = None last_tag = None
print args.package
def belongs_package(token): def belongs_package(token):
return (token == args.package or (token.find(package_process) != -1)); index = token.find(':')
return (token in args.package) if index == -1 else (token[:index] in args.package)
def parse_death(tag, message): def parse_death(tag, message):
if tag != 'ActivityManager': if tag != 'ActivityManager':