# Copyright 2017 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os from pylib import constants from .expensive_line_transformer import ExpensiveLineTransformer from .expensive_line_transformer import ExpensiveLineTransformerPool _MINIMUM_TIMEOUT = 10.0 _PER_LINE_TIMEOUT = .005 # Should be able to process 200 lines per second. _PROCESS_START_TIMEOUT = 20.0 _MAX_RESTARTS = 4 # Should be plenty unless tool is crashing on start-up. _POOL_SIZE = 4 _PASSTHROUH_ON_FAILURE = False class Deobfuscator(ExpensiveLineTransformer): def __init__(self, mapping_path): super().__init__(_PROCESS_START_TIMEOUT, _MINIMUM_TIMEOUT, _PER_LINE_TIMEOUT) script_path = os.path.join(constants.DIR_SOURCE_ROOT, 'build', 'android', 'stacktrace', 'java_deobfuscate.py') self._command = [script_path, mapping_path] self.start() @property def name(self): return "deobfuscator" @property def command(self): return self._command class DeobfuscatorPool(ExpensiveLineTransformerPool): def __init__(self, mapping_path): # As of Sep 2017, each instance requires about 500MB of RAM, as measured by: # /usr/bin/time -v build/android/stacktrace/java_deobfuscate.py \ # out/Release/apks/ChromePublic.apk.mapping self.mapping_path = mapping_path super().__init__(_MAX_RESTARTS, _POOL_SIZE, _PASSTHROUH_ON_FAILURE) @property def name(self): return "deobfuscator-pool" def CreateTransformer(self): return Deobfuscator(self.mapping_path)