1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-03-22 18:48:38 +00:00
Sergei Trofimov be3c91b131 Device: raise RuntimeError in _check_ready
Previously, a AttributeError has been raised. This causes issues when
attempting to access some properties that rely on invoking commands on
the device. The error would get swallowed up in Python attribute
resolution machinery, resulting in an error claiming a missing
attribute.

For example, for AndroidDevice, "abi" is a property that internally
calls getprop(), which executes on the device, and thus requires a
connection. If attempting to access device.abi before device.connect()
has been invoked, the following sequence takes place

1. Caller tries to access attribute "abi" of device, which resolves to
   the device.abi property defined in the class.
2. device.abi calls device.getprop()
3. ...which calls device.execute()
4. ...which calls device._check_ready()
5. device._check_ready() raises AttributeError('device not ready.')
6. That gets propagated all the way up to 1., which gets interpreted
   as attribute not being found.
7. Since AndroidDevice defines a __getattr__(), that gets called next
8. __getattr__() looks for a loaded Device module that has an "abi"
   attribute. Since there isn't one, it raises AttributeError('abi').

The result is that the error reports a missing "abi" attribute, rather
than "device not ready", leading to some fun debugging.

Raising RuntimeError (which more appropriate for the circumstances
anyway) does not trigger __getattr__, so the correct error message is
reported to the user. The text of the message has also been adjusted to
make it clearer what has likely gone wrong.
2017-08-02 13:39:55 +01:00
2015-12-09 16:52:39 +00:00

Workload Automation
+++++++++++++++++++

Workload Automation (WA) is a framework for executing workloads and collecting
measurements on Android and Linux devices. WA includes automation for nearly 50
workloads (mostly Android), some common instrumentation (ftrace, ARM
Streamline, hwmon).  A number of output formats are supported. 

Workload Automation is designed primarily as a developer tool/framework to
facilitate data driven development by providing a method of collecting
measurements from a device in a repeatable way.

Workload Automation is highly extensible. Most of the concrete functionality is
implemented via plug-ins, and  it is easy to write new plug-ins to support new
device types, workloads, instrumentation or output processing. 


Requirements
============

- Python 2.7
- Linux (should work on other Unixes, but untested)
- Latest Android SDK (ANDROID_HOME must be set) for Android devices, or
- SSH for Linux devices


Installation
============

To install::

        python setup.py sdist
        sudo pip install dist/wlauto-*.tar.gz

Please refer to the `installation section <./doc/source/installation.rst>`_ 
in the documentation for more details.


Basic Usage
===========

Please see the `Quickstart <./doc/source/quickstart.rst>`_ section of the 
documentation.


Documentation
=============

You can view pre-built HTML documentation `here <http://pythonhosted.org/wlauto/>`_.

Documentation in reStructuredText format may be found under ``doc/source``. To
compile it into cross-linked HTML, make sure you have `Sphinx
<http://sphinx-doc.org/install.html>`_ installed, and then ::

        cd doc
        make html


License
=======

Workload Automation is distributed under `Apache v2.0 License
<http://www.apache.org/licenses/LICENSE-2.0>`_. Workload automation includes
binaries distributed under differnt licenses (see LICENSE files in specfic
directories).


Feedback, Contrubutions and Support
===================================

- Please use the GitHub Issue Tracker associated with this repository for
  feedback.
- ARM licensees may contact ARM directly via their partner managers.
- We welcome code contributions via GitHub Pull requests. Please see
  "Contributing Code" section of the documentation for details.
Description
No description provided
Readme Apache-2.0 208 MiB
Languages
Python 75.9%
Java 15.8%
C 5.4%
Shell 2.5%
Dockerfile 0.3%