51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
# 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)
|