Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Unified Diff: build/android/pylib/valgrind_tools.py

Issue 2392643003: Removes files from //build that we don't need (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/pylib/utils/zip_utils.py ('k') | build/android/rezip.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/pylib/valgrind_tools.py
diff --git a/build/android/pylib/valgrind_tools.py b/build/android/pylib/valgrind_tools.py
deleted file mode 100644
index 99719d08114d26522c446eb66122a85756372747..0000000000000000000000000000000000000000
--- a/build/android/pylib/valgrind_tools.py
+++ /dev/null
@@ -1,304 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Classes in this file define additional actions that need to be taken to run a
-test under some kind of runtime error detection tool.
-
-The interface is intended to be used as follows.
-
-1. For tests that simply run a native process (i.e. no activity is spawned):
-
-Call tool.CopyFiles(device).
-Prepend test command line with tool.GetTestWrapper().
-
-2. For tests that spawn an activity:
-
-Call tool.CopyFiles(device).
-Call tool.SetupEnvironment().
-Run the test as usual.
-Call tool.CleanUpEnvironment().
-"""
-# pylint: disable=R0201
-
-import glob
-import logging
-import os.path
-import subprocess
-import sys
-
-from pylib.constants import DIR_SOURCE_ROOT
-from pylib.device import device_errors
-
-
-def SetChromeTimeoutScale(device, scale):
- """Sets the timeout scale in /data/local/tmp/chrome_timeout_scale to scale."""
- path = '/data/local/tmp/chrome_timeout_scale'
- if not scale or scale == 1.0:
- # Delete if scale is None/0.0/1.0 since the default timeout scale is 1.0
- device.RunShellCommand('rm %s' % path)
- else:
- device.WriteFile(path, '%f' % scale, as_root=True)
-
-
-class BaseTool(object):
- """A tool that does nothing."""
-
- def __init__(self):
- """Does nothing."""
- pass
-
- def GetTestWrapper(self):
- """Returns a string that is to be prepended to the test command line."""
- return ''
-
- def GetUtilWrapper(self):
- """Returns the wrapper name for the utilities.
-
- Returns:
- A string that is to be prepended to the command line of utility
- processes (forwarder, etc.).
- """
- return ''
-
- @classmethod
- def CopyFiles(cls, device):
- """Copies tool-specific files to the device, create directories, etc."""
- pass
-
- def SetupEnvironment(self):
- """Sets up the system environment for a test.
-
- This is a good place to set system properties.
- """
- pass
-
- def CleanUpEnvironment(self):
- """Cleans up environment."""
- pass
-
- def GetTimeoutScale(self):
- """Returns a multiplier that should be applied to timeout values."""
- return 1.0
-
- def NeedsDebugInfo(self):
- """Whether this tool requires debug info.
-
- Returns:
- True if this tool can not work with stripped binaries.
- """
- return False
-
-
-class AddressSanitizerTool(BaseTool):
- """AddressSanitizer tool."""
-
- WRAPPER_NAME = '/system/bin/asanwrapper'
- # Disable memcmp overlap check.There are blobs (gl drivers)
- # on some android devices that use memcmp on overlapping regions,
- # nothing we can do about that.
- EXTRA_OPTIONS = 'strict_memcmp=0,use_sigaltstack=1'
-
- def __init__(self, device):
- super(AddressSanitizerTool, self).__init__()
- self._device = device
- # 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.
- device.old_interface.SetUtilWrapper(self.GetUtilWrapper())
-
- @classmethod
- def CopyFiles(cls, device):
- """Copies ASan tools to the device."""
- libs = glob.glob(os.path.join(DIR_SOURCE_ROOT,
- 'third_party/llvm-build/Release+Asserts/',
- 'lib/clang/*/lib/linux/',
- 'libclang_rt.asan-arm-android.so'))
- assert len(libs) == 1
- subprocess.call(
- [os.path.join(
- DIR_SOURCE_ROOT,
- 'tools/android/asan/third_party/asan_device_setup.sh'),
- '--device', str(device),
- '--lib', libs[0],
- '--extra-options', AddressSanitizerTool.EXTRA_OPTIONS])
- device.WaitUntilFullyBooted()
-
- def GetTestWrapper(self):
- return AddressSanitizerTool.WRAPPER_NAME
-
- def GetUtilWrapper(self):
- """Returns the wrapper for utilities, such as forwarder.
-
- AddressSanitizer wrapper must be added to all instrumented binaries,
- including forwarder and the like. This can be removed if such binaries
- were built without instrumentation. """
- return self.GetTestWrapper()
-
- def SetupEnvironment(self):
- try:
- self._device.EnableRoot()
- except device_errors.CommandFailedError as e:
- # Try to set the timeout scale anyway.
- # TODO(jbudorick) Handle this exception appropriately after interface
- # conversions are finished.
- logging.error(str(e))
- SetChromeTimeoutScale(self._device, self.GetTimeoutScale())
-
- def CleanUpEnvironment(self):
- SetChromeTimeoutScale(self._device, None)
-
- def GetTimeoutScale(self):
- # Very slow startup.
- return 20.0
-
-
-class ValgrindTool(BaseTool):
- """Base abstract class for Valgrind tools."""
-
- VG_DIR = '/data/local/tmp/valgrind'
- VGLOGS_DIR = '/data/local/tmp/vglogs'
-
- def __init__(self, device):
- super(ValgrindTool, self).__init__()
- self._device = device
- # exactly 31 chars, SystemProperties::PROP_NAME_MAX
- self._wrap_properties = ['wrap.com.google.android.apps.ch',
- 'wrap.org.chromium.native_test']
-
- @classmethod
- def CopyFiles(cls, device):
- """Copies Valgrind tools to the device."""
- device.RunShellCommand(
- 'rm -r %s; mkdir %s' % (ValgrindTool.VG_DIR, ValgrindTool.VG_DIR))
- device.RunShellCommand(
- 'rm -r %s; mkdir %s' % (ValgrindTool.VGLOGS_DIR,
- ValgrindTool.VGLOGS_DIR))
- files = cls.GetFilesForTool()
- device.PushChangedFiles(
- [((os.path.join(DIR_SOURCE_ROOT, f),
- os.path.join(ValgrindTool.VG_DIR, os.path.basename(f)))
- for f in files)])
-
- def SetupEnvironment(self):
- """Sets up device environment."""
- self._device.RunShellCommand('chmod 777 /data/local/tmp')
- self._device.RunShellCommand('setenforce 0')
- for prop in self._wrap_properties:
- self._device.RunShellCommand(
- 'setprop %s "logwrapper %s"' % (prop, self.GetTestWrapper()))
- SetChromeTimeoutScale(self._device, self.GetTimeoutScale())
-
- def CleanUpEnvironment(self):
- """Cleans up device environment."""
- for prop in self._wrap_properties:
- self._device.RunShellCommand('setprop %s ""' % (prop,))
- SetChromeTimeoutScale(self._device, None)
-
- @staticmethod
- def GetFilesForTool():
- """Returns a list of file names for the tool."""
- raise NotImplementedError()
-
- def NeedsDebugInfo(self):
- """Whether this tool requires debug info.
-
- Returns:
- True if this tool can not work with stripped binaries.
- """
- return True
-
-
-class MemcheckTool(ValgrindTool):
- """Memcheck tool."""
-
- def __init__(self, device):
- super(MemcheckTool, self).__init__(device)
-
- @staticmethod
- def GetFilesForTool():
- """Returns a list of file names for the tool."""
- return ['tools/valgrind/android/vg-chrome-wrapper.sh',
- 'tools/valgrind/memcheck/suppressions.txt',
- 'tools/valgrind/memcheck/suppressions_android.txt']
-
- def GetTestWrapper(self):
- """Returns a string that is to be prepended to the test command line."""
- return ValgrindTool.VG_DIR + '/' + 'vg-chrome-wrapper.sh'
-
- def GetTimeoutScale(self):
- """Returns a multiplier that should be applied to timeout values."""
- return 30
-
-
-class TSanTool(ValgrindTool):
- """ThreadSanitizer tool. See http://code.google.com/p/data-race-test ."""
-
- def __init__(self, device):
- super(TSanTool, self).__init__(device)
-
- @staticmethod
- def GetFilesForTool():
- """Returns a list of file names for the tool."""
- return ['tools/valgrind/android/vg-chrome-wrapper-tsan.sh',
- 'tools/valgrind/tsan/suppressions.txt',
- 'tools/valgrind/tsan/suppressions_android.txt',
- 'tools/valgrind/tsan/ignores.txt']
-
- def GetTestWrapper(self):
- """Returns a string that is to be prepended to the test command line."""
- return ValgrindTool.VG_DIR + '/' + 'vg-chrome-wrapper-tsan.sh'
-
- def GetTimeoutScale(self):
- """Returns a multiplier that should be applied to timeout values."""
- return 30.0
-
-
-TOOL_REGISTRY = {
- 'memcheck': MemcheckTool,
- 'memcheck-renderer': MemcheckTool,
- 'tsan': TSanTool,
- 'tsan-renderer': TSanTool,
- 'asan': AddressSanitizerTool,
-}
-
-
-def CreateTool(tool_name, device):
- """Creates a tool with the specified tool name.
-
- Args:
- tool_name: Name of the tool to create.
- device: A DeviceUtils instance.
- Returns:
- A tool for the specified tool_name.
- """
- if not tool_name:
- return BaseTool()
-
- ctor = TOOL_REGISTRY.get(tool_name)
- if ctor:
- return ctor(device)
- else:
- print 'Unknown tool %s, available tools: %s' % (
- tool_name, ', '.join(sorted(TOOL_REGISTRY.keys())))
- sys.exit(1)
-
-def PushFilesForTool(tool_name, device):
- """Pushes the files required for |tool_name| to |device|.
-
- Args:
- tool_name: Name of the tool to create.
- device: A DeviceUtils instance.
- """
- if not tool_name:
- return
-
- clazz = TOOL_REGISTRY.get(tool_name)
- if clazz:
- clazz.CopyFiles(device)
- else:
- print 'Unknown tool %s, available tools: %s' % (
- tool_name, ', '.join(sorted(TOOL_REGISTRY.keys())))
- sys.exit(1)
-
« no previous file with comments | « build/android/pylib/utils/zip_utils.py ('k') | build/android/rezip.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698