Switch to the "new" way of ASan deployment on Android devices.

This will elimitate startup slowdown in ASan/Android tests, and
improve overall run time very significantly.
For the idea behind this change, refer to
https://code.google.com/p/address-sanitizer/wiki/Android#Running_NDK_applications_with_ASan

R=bulach@chromium.org, frankf@chromium.org, glider@chromium.org, navabi@chromium.org
BUG=

Review URL: https://codereview.chromium.org/138153003

git-svn-id: http://src.chromium.org/svn/trunk/src/build@246847 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
This commit is contained in:
eugenis@chromium.org 2014-01-24 12:35:03 +00:00
Родитель 39a2338132
Коммит c9139ec536
1 изменённых файлов: 9 добавлений и 22 удалений

Просмотреть файл

@ -22,6 +22,7 @@ Call tool.CleanUpEnvironment().
"""
import os.path
import subprocess
import sys
from glob import glob
@ -85,16 +86,11 @@ class BaseTool(object):
class AddressSanitizerTool(BaseTool):
"""AddressSanitizer tool."""
TMP_DIR = '/data/local/tmp/asan'
WRAPPER_NAME = 'asanwrapper.sh'
WRAPPER_NAME = '/system/bin/asanwrapper'
EXTRA_OPTIONS = 'allocator_may_return_null=1,strict_memcmp=0'
def __init__(self, adb):
self._adb = adb
self._wrap_properties = ['wrap.com.google.android.apps.ch',
'wrap.org.chromium.native_test',
'wrap.org.chromium.content_shell',
'wrap.org.chromium.chrome.testsh',
'wrap.org.chromium.android_webvi']
# Configure AndroidCommands to run utils (such as md5sum_bin) under ASan.
# This is required because ASan is a compiler-based tool, and md5sum
# includes instrumented code from base.
@ -102,17 +98,14 @@ class AddressSanitizerTool(BaseTool):
def CopyFiles(self):
"""Copies ASan tools to the device."""
files = (['tools/android/asan/asanwrapper.sh'] +
glob('third_party/llvm-build/Release+Asserts/lib/clang/*/lib/'
'linux/libclang_rt.asan-arm-android.so'))
for f in files:
self._adb.PushIfNeeded(os.path.join(DIR_SOURCE_ROOT, f),
os.path.join(AddressSanitizerTool.TMP_DIR,
os.path.basename(f)))
subprocess.call([os.path.join(DIR_SOURCE_ROOT,
'tools/android/asan/asan_device_setup.sh'),
'--device', self._adb.GetDevice(),
'--extra-options', AddressSanitizerTool.EXTRA_OPTIONS])
self._adb.WaitForDevicePm()
def GetTestWrapper(self):
return os.path.join(AddressSanitizerTool.TMP_DIR,
AddressSanitizerTool.WRAPPER_NAME)
return AddressSanitizerTool.WRAPPER_NAME
def GetUtilWrapper(self):
"""Returns the wrapper for utilities, such as forwarder.
@ -124,15 +117,9 @@ class AddressSanitizerTool(BaseTool):
def SetupEnvironment(self):
self._adb.EnableAdbRoot()
self._adb.RunShellCommand('setenforce 0')
for prop in self._wrap_properties:
self._adb.RunShellCommand('setprop %s "logwrapper %s"' % (
prop, self.GetTestWrapper()))
SetChromeTimeoutScale(self._adb, self.GetTimeoutScale())
def CleanUpEnvironment(self):
for prop in self._wrap_properties:
self._adb.RunShellCommand('setprop %s ""' % (prop,))
SetChromeTimeoutScale(self._adb, None)
def GetTimeoutScale(self):