1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-01-31 10:11:17 +00:00

doc: Misc fixes

Fix typos, formatting and irrelevant information.
This commit is contained in:
Marc Bonnici 2018-05-14 17:21:59 +01:00 committed by setrofim
parent f4dd1a1c84
commit 04fe3768af
19 changed files with 241 additions and 216 deletions

View File

@ -16,8 +16,10 @@ changes moving from WA2 to WA3.
config file and will be performed upon first invocation of WA3.
- The "config" and "global" sections in an agenda are not interchangeable so can all be specified in a "config" section.
- "Results Processors" are now known as "Output Processors" and can now be ran offline.
- "Instrumentation" is now know as "Instruments" for more consistent naming.
- "Both "Output Processor" and "Instrument" configuration has been merged into "Augmentations" (support for the old naming schemes have been retained for backwards compatibility)
- "Instrumentation" is now known as "Instruments" for more consistent naming.
- "Both "Output Processor" and "Instrument" configuration have been merged
into "Augmentations" (support for the old naming schemes have been
retained for backwards compatibility)
- New features:

View File

@ -13,6 +13,12 @@ Developer Reference
.. include:: developer_reference/output_processing_api.rst
.. include:: developer_reference/writing_plugins.rst
-----------------
.. include:: developer_reference/contributing.rst
-----------------
.. include:: developer_reference/revent.rst

View File

@ -1,7 +1,7 @@
Contributing Code
=================
We welcome code contributions via GitHub pull requests.To help with
We welcome code contributions via GitHub pull requests. To help with
maintainability of the code line we ask that the code uses a coding style
consistent with the rest of WA code. Briefly, it is
@ -16,7 +16,7 @@ consistent with the rest of WA code. Briefly, it is
"stats" for "statistics", "config" for "configuration", etc are OK). Do
*not* use Hungarian notation (so prefer ``birth_date`` over ``dtBirth``).
New extensions should also follow implementation guidelines specified in
New extensions should also follow implementation guidelines specified in the
:ref:`writing-plugins` section of the documentation.
We ask that the following checks are performed on the modified code prior to

View File

@ -21,7 +21,7 @@ directory we can initialize a ``RunOutput`` as follows:
From here we can retrieve different information about the run. For example if we
From here we can retrieve various information about the run. For example if we
want to see what the overall status of the run was, along with the runtime
parameters and the metrics recorded from the first job was we can do the following:

View File

@ -26,8 +26,8 @@ Only the run stage is mandatory, the remaining stages will be replayed if a
recording is present otherwise no actions will be performed for that particular
stage.
For instance, to add a custom revent files for a device named mydevice and
a workload name myworkload, you need to add the revent files to the directory
For instance, to add a custom revent files for a device named "mydevice" and
a workload name "myworkload", you need to add the revent files to the directory
``/home/$WA_USER_HOME/dependencies/myworkload/revent_files`` creating it if
necessary. ::

View File

@ -4,7 +4,7 @@
Writing Plugins
================
Workload Automation offers several plugin points (or plugin types).The most
Workload Automation offers several plugin points (or plugin types). The most
interesting of these are
:workloads: These are the tasks that get executed and measured on the device. These
@ -14,24 +14,24 @@ interesting of these are
physical device would require its own interface class (though some functionality
may be reused by subclassing from an existing base).
:instruments: Instruments allow collecting additional data from workload execution (e.g.
system traces). Instruments are not specific to a particular Workload. Instruments
system traces). Instruments are not specific to a particular workload. Instruments
can hook into any stage of workload execution.
:output processors: These are used to format the results of workload execution once they have been
collected. Depending on the callback used, these will run either after each
iteration or at the end of the run, after all of the results have been
iteration and/or at the end of the run, after all of the results have been
collected.
You can create an plugin by subclassing the appropriate base class, defining
appropriate methods and attributes, and putting the .py file with the class into
the "plugins" subdirectory under ``~/.workload_automation`` (or equivalent)
where it will be automatically picked up by WA.
You can create a plugin by subclassing the appropriate base class, defining
appropriate methods and attributes, and putting the .py file containing the
class into the "plugins" subdirectory under ``~/.workload_automation`` (or
equivalent) where it will be automatically picked up by WA.
Plugin Basics
----------------
--------------
This sub-section covers things common to implementing plugins of all types. It
is recommended you familiarize yourself with the information here before
is recommended you familiarize yourself with the information here before
proceeding onto guidance for specific plugin types.
.. _context:
@ -280,7 +280,8 @@ As with other resources, host-side paths to the executable binary to be deployed
should be obtained via the :ref:`resource resolver <resource-resolution>`. A
special resource type, ``Executable`` is used to identify a binary to be
deployed. This is similar to the regular ``File`` resource, however it takes an
additional parameter that specifies the ABI for which executable was compiled.
additional parameter that specifies the ABI for which the executable was
compiled for.
In order for the binary to be obtained in this way, it must be stored in one of
the locations scanned by the resource resolver in a directory structure
@ -304,7 +305,8 @@ binary has been previously deployed by WA and will not try to re-install.
.. note:: Please also note that the check is done based solely on the binary name.
For more information please see: :func:`devlib.target.Target.install_if_needed`
For more information please see the devlib
`documentation <http://devlib.readthedocs.io/en/latest/target.html#Target.install_if_needed>`_.
Both of the above methods will return the path to the installed binary on the
target. The executable should be invoked *only* via that path; do **not** assume
@ -312,7 +314,7 @@ that it will be in ``PATH`` on the target (or that the executable with the same
name in ``PATH`` is the version deployed by WA.
For more information on how to implement this, please see the
:ref:`how to guide <deploying-executables-example>`
:ref:`how to guide <deploying-executables-example>`.
Deploying assets
@ -344,8 +346,8 @@ name
Python identifier.
kind
This is the type of the value of the parameter. This could be an
callable. Normally this should be a standard Python type, e.g. ``int``
This is the type of the value of the parameter. This must be an
callable. Normally this should be a standard Python type, e.g. ``int``
or ``float``, or one the types defined in :mod:`wa.utils.types`.
If not explicitly specified, this will default to ``str``.
@ -402,12 +404,12 @@ override
Validation and cross-parameter constraints
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
An plugin will get validated at some point after constructions. When exactly
A plugin will get validated at some point after construction. When exactly
this occurs depends on the plugin type, but it *will* be validated before it
is used.
You can implement ``validate`` method in your plugin (that takes no arguments
beyond the ``self``) to perform any additions *internal* validation in your
beyond the ``self``) to perform any additional *internal* validation in your
plugin. By "internal", I mean that you cannot make assumptions about the
surrounding environment (e.g. that the device has been initialized).
@ -476,7 +478,7 @@ notify the user. The exception would typically be :class:`ConfigError` or
:class:`WorkloadError`/:class:`DeviceError`/:class:`InstrumentError`/:class:`OutputProcessorError`.
All these errors are defined in :mod:`wa.framework.exception` module.
:class:`ConfigError` should be raised where there is a problem in configuration
A :class:`ConfigError` should be raised where there is a problem in configuration
specified by the user (either through the agenda or config files). These errors
are meant to be resolvable by simple adjustments to the configuration (and the
error message should suggest what adjustments need to be made. For all other
@ -606,9 +608,9 @@ Workload Interface
^^^^^^^^^^^^^^^^^^^
The workload interface should be implemented as follows:
:name: This identifies the workload (e.g. it used to specify it in the
:ref:`agenda`.
:init_resources: This method may be optionally override to implement dynamic
:name: This identifies the workload (e.g. it is used to specify the workload
in the :ref:`agenda <agenda>`).
:init_resources: This method may be optionally overridden to implement dynamic
resource discovery for the workload. This method executes
early on, before the device has been initialized, so it
should only be used to initialize resources that do not
@ -661,7 +663,7 @@ track of the current execution state (such as the current workload, iteration
number, etc), and contains, among other things, a
:class:`wa.framework.output.JobOutput` instance that should be populated from
the ``update_output`` method with the results of the execution. For more
information please see `the context`_ documentation.::
information please see `the context`_ documentation. ::
# ...
@ -697,7 +699,7 @@ The revent workload classes define the following interfaces::
The interface should be implemented as follows
:name: This identifies the workload (e.g. it used to specify it in the
:ref:`agenda`.
:ref:`agenda <agenda>`.
:package_names: This is a list of the android application apk packages names that
are required to run the workload.
@ -714,11 +716,11 @@ Automation, the methods of the new instrument will be found automatically and
hooked up to the supported signals. Once a signal is broadcasted, the
corresponding registered method is invoked.
Each method in Instrument must take two arguments, which are self and context.
Supported method and their corresponding signals can be found in the
:ref:`Signals Documentation <instruments_method_map>` To make implementations
easier and common, the basic steps to add new instrument is similar to the steps
to add new workload and an example can be found
Each method in ``Instrument`` must take two arguments, which are ``self`` and
``context``. Supported methods and their corresponding signals can be found in
the :ref:`Signals Documentation <instruments_method_map>`. To make
implementations easier and common, the basic steps to add new instrument is
similar to the steps to add new workload and an example can be found
:ref:`here <adding-an-instrument-example>`.
.. _instrument-api:
@ -787,7 +789,7 @@ The full interface of WA instruments is shown below::
"""
pass
This is similar to a Workload, except all methods are optional. In addition to
This is similar to a ``Workload``, except all methods are optional. In addition to
the workload-like methods, instruments can define a number of other methods that
will get invoked at various points during run execution. The most useful of
which is perhaps ``initialize`` that gets invoked after the device has been
@ -861,11 +863,11 @@ Below is a simple instrument that measures the execution time of a workload::
self.start_time = None
self.end_time = None
@fast
@very_fast
def start(self, context):
self.start_time = time.time()
@fast
@very_fast
def stop(self, context):
self.end_time = time.time()
@ -887,7 +889,7 @@ generating plots, etc. WA comes with a few output processors that output
results in a few common formats (such as csv or JSON).
You can add your own output processors by creating a Python file in
``~/.workload_automation/result_processors`` with a class that derives from
``~/.workload_automation/plugins`` with a class that derives from
:class:`wa.OutputProcessor <wa.framework.processor.OutputProcessor>`, which has
the following interface::
@ -919,7 +921,7 @@ the following interface::
The method names should be fairly self-explanatory. The difference between
"process" and "export" methods is that export methods will be invoke after
"process" and "export" methods is that export methods will be invoked after
process methods for all output processors have been generated. Process methods
may generated additional artifacts (metrics, files, etc), while export methods
should not -- the should only handle existing results (upload them to a
@ -927,8 +929,7 @@ database, archive on a filer, etc).
The output object passed to job methods is an instance of
:class:`wa.framework.output.JobOutput`, the output object passed to run methods
is an instance of :class:`wa.RunOutput <wa.framework.output.RunOutput>`. Please
refer to their API documentation for details.
is an instance of :class:`wa.RunOutput <wa.framework.output.RunOutput>`.
Adding a Resource Getter
@ -987,7 +988,7 @@ should typically be registered as ``preferred``.
You don't have to stick to standard priority levels (though you should, unless
there is a good reason). Any integer is a valid priority. The standard priorities
range from 0 to 50 in increments of 10.
range from 0 to 40 in increments of 10.
Example
^^^^^^^
@ -1036,9 +1037,9 @@ The currently available platforms are:
The currently available targets from devlib are:
:linux: A device running a Linux based OS.
:android: A device running the Android OS.
:android: A device running Android OS.
:local: Used to run locally on a linux based host.
:chromeos: A device running chromeos, supporting an android container if available.
:chromeos: A device running ChromeOS, supporting an android container if available.
For an example of adding you own customized version of an existing devlib target,
please see the how to section :ref:`Adding a Custom Target <adding-custom-target-example>`.
@ -1113,7 +1114,7 @@ management tools, e.g. ::
sudo pip install my_wa_exts-0.0.1.tar.gz
As part of the installation process, the setup.py in the package, will write the
package's name into ``~/.workoad_automoation/packages``. This will tell WA that
package's name into ``~/.workoad_automation/packages``. This will tell WA that
the package contains plugin and it will load them next time it runs.
.. note:: There are no uninstall hooks in ``setuputils``, so if you ever

View File

@ -37,8 +37,8 @@ install the application onto the device or source the apk and place into
**Q:** I am trying to set a valid runtime parameters however I still receive the error ``"Unknown runtime parameter"``
-------------------------------------------------------------------------------------------------------------------------
**A:** PLease ensure you have the corresponding module loaded on the device.
Please see :ref:`Runtime Parameters <runtime-parameters>` for the list of
**A:** Please ensure you have the corresponding module loaded on the device.
See :ref:`Runtime Parameters <runtime-parameters>` for the list of
runtime parameters and their containing modules, and the appropriate section in
:ref:`setting up a device <setting-up-a-device>` for ensuring it is installed.

View File

@ -11,7 +11,7 @@ then the ``initialize`` method should be decorated with the ``@once``
method which is decorated instead. Please note if doing this then any installed
paths should be added as class attributes rather than instance variables. As a
general rule if binaries are installed as part of ``initialize`` then they
should be installed in the complementary ``finalize`` method.
should be uninstalled in the complementary ``finalize`` method.
Part of an example workload demonstrating this is shown below:
@ -41,11 +41,11 @@ Part of an example workload demonstrating this is shown below:
Adding a Workload Examples
==========================
The easiest way to create a new workload is to use the create command. ``wa
create workload <args>``. This will use predefined templates to create a
workload based on the options that are supplied to be used as a starting point
for the workload. For more information on using the create workload command see
``wa create workload -h``
The easiest way to create a new workload is to use the
:ref:`create <create-command>` command. ``wa create workload <args>``. This
will use predefined templates to create a workload based on the options that are
supplied to be used as a starting point for the workload. For more information
on using the create workload command see ``wa create workload -h``
The first thing to decide is the type of workload you want to create depending
on the OS you will be using and the aim of the workload. The are currently 6
@ -55,7 +55,7 @@ Once you have decided what type of workload you wish to choose this can be
specified with ``-k <workload_kind>`` followed by the workload name. This
will automatically generate a workload in the your ``WA_CONFIG_DIR/plugins``. If
you wish to specify a custom location this can be provided with ``-p
<directory>``
<path>``
Adding a Basic Workload Example
--------------------------------
@ -68,10 +68,9 @@ This will generate a very basic workload with dummy methods for the workload
interface and it is left to the developer to add any required functionality to
the workload.
This example shows a simple workload that times how long it takes to compress a
file of a particular size on the device, not all the methods are required to be
implements however as many as possible have been used to demonstrate their
purpose.
Not all the methods are required to be implemented, this example shows how a
subset might be used to implement a simple workload that times how long it takes
to compress a file of a particular size on the device.
.. note:: This is intended as an example of how to implement the Workload
@ -92,7 +91,6 @@ purpose.
This workload was created for illustration purposes only. It should not be
used to collect actual measurements.
'''
parameters = [
@ -137,9 +135,9 @@ purpose.
This method is used to extract any results from the target for
example we want to pull the file containing the timing information
that we will use to generate metrics for our workload and then we
add this file as a artifact as a 'raw' file which once WA has
finished processing it will allow it to decide whether to keep the
file or not.
add this file as an artifact with a 'raw' kind, which means once WA
has finished processing it will allow it to decide whether to keep
the file or not.
"""
super(ZipTestWorkload, self).extract_results(context)
# Pull the results file to the host
@ -149,9 +147,9 @@ purpose.
def update_output(self, context):
"""
In this method we can do any generation of metric that we wish to
In this method we can do any generation of metrics that we wish to
for our workload. In this case we are going to simply convert the
times reported to seconds and add them as 'metrics' to WA which can
times reported into seconds and add them as 'metrics' to WA which can
then be displayed to the user along with any others in a format
dependant on which output processors they have enabled for the run.
"""
@ -343,7 +341,8 @@ command::
This will generate a revent based workload you will end up with a very similar
python file as to the one outlined in generating a :ref:`UiAutomator based
workload <apkuiautomator-example>` except without the java automation files.
workload <apkuiautomator-example>` however without the accompanying java
automation files.
The main difference between the two is that this workload will subclass
``ApkReventWorkload`` instead of ``ApkUiautomatorWorkload`` as shown below.
@ -367,7 +366,7 @@ The main difference between the two is that this workload will subclass
Adding an Instrument Example
=============================
This is an example of how we would create a instrument which will trace device
errors. For more detailed information please see
errors using a custom "trace" binary file. For more detailed information please see
:ref:`here <instrument-reference>`. The first thing to do is to subclass
:class:`Instrument`, overwrite the variable name with what we want our instrument
to be called and locate our binary for our instrument.
@ -388,7 +387,7 @@ We then declare and implement the required methods as detailed
:ref:`here <instrument-api>`. For the ``initialize`` method, we want to install
the executable file to the target so we can use the target's ``install``
method which will try to copy the file to a location on the device that
supports execution, will change the file mode appropriately and return the
supports execution, change the file mode appropriately and return the
file path on the target. ::
def initialize(self, context):
@ -398,7 +397,7 @@ Then we implemented the start method, which will simply run the file to start
tracing. Supposing that the call to this binary requires some overhead to begin
collecting errors we might want to decorate the method with the ``@slow``
decorator to try and reduce the impact on other running instruments. For more
information on prioritization please see :ref:`here <prioritization>`::
information on prioritization please see :ref:`here <prioritization>`. ::
@slow
def start(self, context):
@ -406,7 +405,7 @@ information on prioritization please see :ref:`here <prioritization>`::
Lastly, we need to stop tracing once the workload stops and this happens in the
stop method, assuming stopping the collection also require some overhead we have
again decorated the method::
again decorated the method. ::
@slow
def stop(self, context):
@ -425,9 +424,9 @@ example for trace data we will want to pull it to the device and add it as a
Once we have retrieved the data we can now do any further processing and add any
relevant :ref:`Metrics <metrics>` to the :ref:`context <context>`. For this we
will use the the ``add_metric`` method and to add the instruments results to the
final result for that workload. The method can be passed 4 params, which are the
metric `key`, `value`, `unit` and `lower_is_better`. ::
will use the the ``add_metric`` method to add the results to the final output
for that workload. The method can be passed 4 params, which are the metric
`key`, `value`, `unit` and `lower_is_better`. ::
def update_output(self, context):
# parse the file if needs to be parsed, or add result directly to
@ -442,7 +441,7 @@ instruments and the code to clear these file goes in teardown method. ::
def teardown(self, context):
self.target.remove(os.path.join(self.target.working_directory, 'trace.txt'))
At the very end of the run we would want to uninstall the binary we deployed earlier ::
At the very end of the run we would want to uninstall the binary we deployed earlier. ::
def finalize(self, context):
self.target.uninstall(self.binary_name)
@ -499,7 +498,7 @@ Next we need to implement any relevant methods, (please see
available methods). In this case we only want to implement the
``export_run_output`` method as we are not generating any new artifacts and
we only care about the overall output rather than the individual job
outputs. And the implementation is very simple, it just loops through all
outputs. The implementation is very simple, it just loops through all
the available metrics for all the available jobs and adds them to a list
which is written to file and then added as an :ref:`artifact <artifact>` to
the :ref:`context <context>`.
@ -514,7 +513,7 @@ the :ref:`context <context>`.
class Table(OutputProcessor):
name = 'table'
description = 'Generates a text file containing a column-aligned table with run results.'
description = 'Generates a text file containing a column-aligned table of run results.'
def export_run_output(self, output, target_info):
rows = []
@ -527,7 +526,7 @@ the :ref:`context <context>`.
outfile = output.get_path('table.txt')
with open(outfile, 'w') as wfh:
write_table(rows, wfh)
output.add_artifact('results_table', 'table.txt, 'export')
output.add_artifact('results_table', 'table.txt', 'export')
.. _adding-custom-target-example:

View File

@ -347,8 +347,8 @@ Classifiers
------------
Classifiers can be used in 2 distinct ways, the first use is being supplied in
an agenda as a set of key-value pairs which can be used to help identify sub-
tests of a run, for example if you have multiple sections in your agenda running
an agenda as a set of key-value pairs which can be used to help identify sub-tests
of a run, for example if you have multiple sections in your agenda running
your workloads at different frequencies you might want to set a classifier
specifying which frequencies are being used. These can then be utilized later,
for example with the ``csv`` :ref:`output processor <output-processors>` with
@ -384,9 +384,9 @@ An example agenda is shown here:
The other way that they can used is by being automatically added by some
workloads to identify their results metrics and artifacts. For example some
workloads perform multiple tests with the same execution run and therefore will
use metrics to differentiate between them, For example the ``recentfling``
workload will use classifiers to distinguish between which loop a particular
result is for or whether it is an average across all loops ran.
use metrics to differentiate between them, e.g. the ``recentfling`` workload
will use classifiers to distinguish between which loop a particular result is
for or whether it is an average across all loops ran.
The output from the agenda above will produce a csv file similar to what is
shown below. Some columns have been omitted for clarity however as can been seen
@ -500,7 +500,7 @@ turn override global settings.
Augmentationts
Augmentations
--------------
Augmentations are plugins that augment the execution of workload jobs with
@ -509,7 +509,7 @@ metrics and/or artifacts, such as traces or logs. There are two types of
augmentations:
Instruments
These "instrument" a WA run in order to change it's behavior (e.g.
These "instrument" a WA run in order to change it's behaviour (e.g.
introducing delays between successive job executions), or collect
additional measurements (e.g. energy usage). Some instruments may depend
on particular features being enabled on the target (e.g. cpufreq), or
@ -677,9 +677,11 @@ Each workload will be run in two configurations: once, to collect energy
measurements, and once to collect thermal data and kernel trace. Trace can give
insight into why a workload is using more or less energy than expected, but it
can be relatively intrusive and might impact absolute energy and performance
metrics, which is why it is collected separately. classifiers_ are used to
metrics, which is why it is collected separately. Classifiers_ are used to
separate metrics from the two configurations in the results.
.. _other-agenda-configuration:
Other Configuration
-------------------

View File

@ -20,12 +20,11 @@ Android
General Device Setup
^^^^^^^^^^^^^^^^^^^^
You can specify the device interface by setting ``device`` setting in
``~/.workload_automation/config.yaml``. Available interfaces can be viewed by
running ``wa list targets`` command. If you don't see your specific platform
listed (which is likely unless you're using one of the Arm-supplied platforms), then
you should use ``generic_android`` interface (this is set in the config by
default).
You can specify the device interface by setting ``device`` setting in a
``config`` file or section. Available interfaces can be viewed by running ``wa
list targets`` command. If you don't see your specific platform listed (which is
likely unless you're using one of the Arm-supplied platforms), then you should
use ``generic_android`` interface (this is what is used by the default config).
.. code-block:: yaml
@ -38,7 +37,8 @@ common parameters you might want to change are outlined below.
.. confval:: device
If you have multiple Android devices connected to the host machine, you will
need to set this to indicate to WA which device you want it to use.
need to set this to indicate to WA which device you want it to use. The will
be the adb name the is displayed when running ``adb devices``
.. confval:: working_directory
@ -81,7 +81,7 @@ A typical ``device_config`` inside ``config.yaml`` may look something like
device_config:
device: 0123456789ABCDEF
# ...
# ...
or a more specific config could be be
@ -172,12 +172,11 @@ Linux
General Device Setup
^^^^^^^^^^^^^^^^^^^^
You can specify the device interface by setting ``device`` setting in
``~/.workload_automation/config.yaml``. Available interfaces can be viewed by
running ``wa list targets`` command. If you don't see your specific platform
listed (which is likely unless you're using one of the Arm-supplied platforms), then
you should use ``generic_linux`` interface (this is set in the config by
default).
You can specify the device interface by setting ``device`` setting in a
``config`` file or section. Available interfaces can be viewed by running
``wa list targets`` command. If you don't see your specific platform listed
(which is likely unless you're using one of the Arm-supplied platforms), then
you should use ``generic_linux`` interface.
.. code-block:: yaml
@ -239,25 +238,24 @@ Chrome OS
General Device Setup
^^^^^^^^^^^^^^^^^^^^
You can specify the device interface by setting ``device`` setting in
``~/.workload_automation/config.yaml``. Available interfaces can be viewed by
You can specify the device interface by setting ``device`` setting in a
``config`` file or section. Available interfaces can be viewed by
running ``wa list targets`` command. If you don't see your specific platform
listed (which is likely unless you're using one of the Arm-supplied platforms), then
you should use ``generic_chromeos`` interface (this is set in the config by
default).
you should use ``generic_chromeos`` interface.
.. code-block:: yaml
device: generic_chromeos
The device interface may be configured through ``device_config`` setting, who's
value is a ``dict`` mapping setting names to their values. The chrome os target
value is a ``dict`` mapping setting names to their values. The ChromeOS target
is essentially the same as a linux device and requires a similar setup, however
it also optionally supports connecting to an android container running on the
device which will be automatically deted if present. If the device supports
device which will be automatically detected if present. If the device supports
android applications then the android configuration is also supported. In order
to support this then WA will open 2 connections to the device, one via SSH to
the main ChomeOS OS and another via ADB to the android container where a limited
to support this WA will open 2 connections to the device, one via SSH to
the main OS and another via ADB to the android container where a limited
subset of functionality can be performed.
In order to distinguish between the two connections some of the android specific

View File

@ -94,7 +94,7 @@ command with an example output shown below::
INFO Recording(s) are available at: '$WA_USER_DIRECTORY/dependencies/angrybirds_rio/revent_files'
Once you have made your desired recordings, you can either manually playback
individual recordings using the :ref:`reply <replay-command>` command or, with
individual recordings using the :ref:`replay <replay-command>` command or, with
the recordings in the appropriate dependencies location, simply run the workload
using the :ref:`run <run-command>` command and then all the available recordings will be
played back automatically.

View File

@ -227,7 +227,7 @@ which contains addional information about how to build and to use the file.
Some WA plugins have additional dependencies that need to be
satisfied before they can be used. Not all of these can be provided with WA and
so will need to be supplied by the user. They should be placed into
``~/.workload_uatomation/dependencies/<extension name>`` so that WA can find
``~/.workload_automation/dependencies/<extension name>`` so that WA can find
them (you may need to create the directory if it doesn't already exist). You
only need to provide the dependencies for workloads you want to use.
@ -237,16 +237,16 @@ APK Files
---------
APKs are application packages used by Android. These are necessary to install on
a device when running an :ref:`ApkWorkload <apk-workload>` or derivative. PLease
see the workload description using the :ref:`show command <show-command>` to see
a device when running an :ref:`ApkWorkload <apk-workload>` or derivative. Please
see the workload description using the :ref:`show <show-command>` command to see
which version of the apk the UI automation has been tested with and place the
apk in the corresponding Automation may also work with other versions
(especially if it's only a minor or revision difference -- major version
differences are more likely to contain incompatible UI changes) but this has not
been tested. As a general rule we do not guarantee support for the latest
version of an app and they are updated on as needed basis. We do however attempt
to support backwards compatibility with previous major releases however beyond
this support will likely be dropped.
apk in the corresponding workloads dependency folder. Automation may also work
with other versions (especially if it's only a minor or revision difference --
major version differences are more likely to contain incompatible UI changes)
but this has not been tested. As a general rule we do not guarantee support for
the latest version of an app and they are updated on an as needed basis. We do
however attempt to support backwards compatibility with previous major releases
however beyond this support will likely be dropped.
Gaming Workloads

View File

@ -15,12 +15,12 @@ Configuration
Default configuration file change
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Instead of the standard ``config.py`` file located at ``$WA_USER_HOME/config.py`
WA not use a ``confg.yaml`` files which is written in the YAML format instead of
python. Additionally upon first invocation WA3 will automatically try and detect
whether a WA2 config file is present and convert it to use the new WA3 format.
During this process any know parameter name changes should be detected and
updated accordingly.
Instead of the standard ``config.py`` file located at
``$WA_USER_HOME/config.py`` WA now uses a ``confg.yaml`` file (at the same
location) which is written in the YAML format instead of python. Additionally
upon first invocation WA3 will automatically try and detect whether a WA2 config
file is present and convert it to use the new WA3 format. During this process
any known parameter name changes should be detected and updated accordingly.
Plugin Changes
^^^^^^^^^^^^^^^
@ -78,7 +78,7 @@ the new parameter names should be preferred:
- The workload parameter :confval:`check_apk` has been renamed to
:confval:`prefer_host_package` to be more explicit in it's functionality to indicated
whether a package on the target for the host should have priority when
whether a package on the target or the host should have priority when
searching for a suitable package.
Individual workload parameters have been attempted to be standardized for the
@ -110,7 +110,7 @@ moved into a ``__failed`` subdirectory to allow for quicker analysis.
Output API
~~~~~~~~~~
There is now an Output API which can be used to more easily post process the
output from a workload. For more information please see the
output from a run. For more information please see the
:ref:`Output API <output-api>` documentation.
@ -155,15 +155,15 @@ Workloads
Python Workload Structure
^^^^^^^^^^^^^^^^^^^^^^^^^^
The ``update_results`` method has been split out into 2 stages. There is now
``extract_results`` and ``update_output`` which should be used for extracting
any results from the target back to the host system and to update the output
with any metrics or artefacts for the specific workload iteration respectively.
- The ``update_results`` method has been split out into 2 stages. There is now
``extract_results`` and ``update_output`` which should be used for extracting
any results from the target back to the host system and to update the output
with any metrics or artefacts for the specific workload iteration respectively.
WA now features :ref:`decorators <decorators>` which can be used to allow for more efficient
binary deployment and that they are only installed to the device once per run. For
more information of implementing this please see
:ref:`deploying executables to a target <deploying-executables>`.
- WA now features :ref:`decorators <decorators>` which can be used to allow for more efficient
binary deployment and that they are only installed to the device once per run. For
more information of implementing this please see
:ref:`deploying executables to a target <deploying-executables>`.
APK Functionality
@ -176,27 +176,25 @@ available as the apk attribute of the workload. This means that for example
UiAutomator Java Structure
^^^^^^^^^^^^^^^^^^^^^^^^^^
Instead of a single ``runUiAutomation`` method to perform all of the UiAutomation,
the structure has been refactored into 4 methods that can optionally be overridden.
the structure has been refactored into 5 methods that can optionally be overridden.
The available methods are ``initialize``, ``setup``, ``runWorkload``, ``extactResults``
and ``teardown`` to better mimic the different stages in the python workload.
``initialize`` should have the ``@Before`` tag attached to the method which will cause it
to be ran before each of the stages of the workload. This method should be used to retrieve
and set any relevant parameters required during the workload.
- ``initialize`` should be used to retrieve
and set any relevant parameters required during the workload.
- ``setup`` should be used to perform any setup required for the workload, for
example dismissing popups or configuring and required settings.
- ``runWorkload`` should be used to perform the actual measurable work of the workload.
- ``extractResults`` should be used to extract any relevant results from the
target after the workload has been completed.
- ``teardown`` should be used to perform any final clean up of the workload on the target.
The remaining method all have the ``@Test`` tag attached to the method to indicate that this
is a test stage that should be called at the appropriate time.
``setup`` should be used to perform any setup required for the workload, for
example dismissing popups or configuring and required settings.
``runWorkload`` should be used to perform the actual measurable work of the workload.
``extractResults`` should be used to extract any relevant results from the
target after the workload has been completed.
``teardown`` should be used to perform any final clean up of the workload on the target.
.. note:: The ``initialize`` method should have the ``@Before`` tag attached
to the method which will cause it to be ran before each of the stages of
the workload. The remaining method should all have the ``@Test`` tag
attached to the method to indicate that this is a test stage that should be
called at the appropriate time.
GUI Functionality
^^^^^^^^^^^^^^^^^
@ -208,28 +206,26 @@ you wish to pass parameters to a UiAuotmator workload you will now need to use
Attributes
^^^^^^^^^^
The ``device`` attribute of the workload is now a devlib ``target``. Some of the
command names remain the same, however there will be differences. The API can be
found here: http://devlib.readthedocs.io/en/latest/target.html however some of
the more common changes can be found below:
- The old ``package`` attribute has been replaced by ``package_names`` which
expects a list of strings which allows for multiple package names to be
specified if required. It is also no longer required to explicitly state the
launch-able activity, this will be automatically discovered from the apk so this
workload attribute can be removed.
- The ``device`` attribute of the workload is now a devlib ``target``. Some of the
command names remain the same, however there will be differences. The API can be
found at http://devlib.readthedocs.io/en/latest/target.html however some of
the more common changes can be found below:
+----------------------------------------------+---------------------------------+
| Original Method | New Method |
+----------------------------------------------+---------------------------------+
|``self.device.pull_file(file)`` | ``self.target.pull(file)`` |
+----------------------------------------------+---------------------------------+
|``self.device.push_file(file)`` | ``self.target.push(file)`` |
+----------------------------------------------+---------------------------------+
|``self.device.install_executable(file)`` | ``self.target.install(file)`` |
+----------------------------------------------+---------------------------------+
|``self.device.execute(cmd, background=True)`` | ``self.target.background(cmd)``|
+----------------------------------------------+---------------------------------+
The old ``package`` attribute has been replaced by ``package_names`` which
expects a list of strings which allows for multiple package names to be
specified if required. It is also no longer required to explicitly state the
launch-able activity, this will be automatically discovered from the apk so this
workload attribute can be removed.
+----------------------------------------------+---------------------------------+
| Original Method | New Method |
+----------------------------------------------+---------------------------------+
|``self.device.pull_file(file)`` | ``self.target.pull(file)`` |
+----------------------------------------------+---------------------------------+
|``self.device.push_file(file)`` | ``self.target.push(file)`` |
+----------------------------------------------+---------------------------------+
|``self.device.install_executable(file)`` | ``self.target.install(file)`` |
+----------------------------------------------+---------------------------------+
|``self.device.execute(cmd, background=True)`` | ``self.target.background(cmd)``|
+----------------------------------------------+---------------------------------+

View File

@ -67,7 +67,7 @@ List Command
============
In order to get started with using WA we first we need to find
out what is available to use. In order to do this we can use the "list"
out what is available to use. In order to do this we can use the :ref:`list <list-command>`
command followed by the type of plugin that you wish to see.
For example to see what workloads are available along with a short description
@ -97,7 +97,9 @@ Which will give an output in the format of:
The same syntax can be used to display ``commands``,
``energy_instrument_backends``, ``instruments``, ``output_processors``,
``resource_getters`` and ``targets``. Alternatively please see the
``resource_getters``, ``targets``. Once you have found the plugin you are
looking for you can use the :ref:`show <show-command>` command to display more
detailed information. Alternatively please see the
:ref:`Plugin Reference <plugin-reference>` for an online version.
Show Command
@ -141,13 +143,14 @@ configuration file which will in turn overwrite the default configuration file.
Android
-------
By default, the device is set to 'generic_android'. WA is configured to work
with a generic Android device through ``adb``. If you only have one device listed
when you execute ``adb devices``, and your device has a standard Android
configuration, then no extra configuration is required.
By default, the device WA will use is set to 'generic_android'. WA is configured
to work with a generic Android device through ``adb``. If you only have one
device listed when you execute ``adb devices``, and your device has a standard
Android configuration, then no extra configuration is required.
However, if your device is connected via network, you will have to manually execute
``adb connect <device ip>`` so that it appears in the device listing.
However, if your device is connected via network, you will have to manually
execute ``adb connect <device ip>`` (or specify this in your
:ref:`agenda <agenda>`) so that it appears in the device listing.
If you have multiple devices connected, you will need to tell WA which one you
want it to use. You can do that by setting ``device`` in the device_config section.

View File

@ -12,5 +12,14 @@ User Reference
---------------------------------------------------------------
.. include:: user_reference/configuration.rst
-------------------
.. include:: user_reference/invocation.rst
-------------------
.. include:: user_reference/output_directory.rst

View File

@ -16,16 +16,18 @@ Individual sub-commands are discussed in detail below.
Run
---
The most common sub-command you will use is ``run``. This will run specified
workload(s) and process resulting output. This takes a single mandatory
argument that specifies what you want WA to run. This could be either a
workload name, or a path to an "agenda" file that allows to specify multiple
workloads as well as a lot additional configuration (see :ref:`agenda`
section for details). Executing ::
The most common sub-command you will use is ``run``. This will run the specified
workload(s) and process its resulting output. This takes a single mandatory
argument which specifies what you want WA to run. This could be either a workload
name, or a path to an agenda" file that allows to specify multiple workloads as
well as a lot additional configuration (see :ref:`agenda` section for details).
Executing ::
wa run -h
Will display help for this subcommand that will look something like this::
Will display help for this subcommand that will look something like this:
.. code-block:: none
usage: wa run [-h] [-c CONFIG] [-v] [--version] [-d DIR] [-f] [-i ID]
[--disable INSTRUMENT]
@ -130,7 +132,7 @@ will produce something like: ::
from the website:
The whole idea behind this application is to use the same Pi calculation
algorithm on every Android Device and check how fast that proccess is.
algorithm on every Android Device and check how fast that process is.
Better calculation times, conclude to faster Android devices. This way you
can also check how lightweight your custom made Android build is. Or not.
@ -185,9 +187,9 @@ will produce something like: ::
markers_enabled : boolean
If set to ``True``, workloads will insert markers into logs
at various points during execution. These markes may be used
at various points during execution. These markers may be used
by other plugins or post-processing scripts to provide
measurments or statistics for specific parts of the workload
measurements or statistics for specific parts of the workload
execution.
.. note:: You can also use this command to view global settings by using ``wa show settings``
@ -202,9 +204,8 @@ This aids in the creation of new WA-related objects for example agendas and work
For more detailed information on creating workloads please see the
:ref:`adding a workload <adding-a-workload>` section for more details.
agendas:
As an example to create an agenda that will run the dhrystone and memcpy workloads
that will use the status and hwmon augumentations, run each test 3 times and save
that will use the status and hwmon augmentations, run each test 3 times and save
into the file ``my_agenda.yaml`` the following command can be used::
wa create agenda dhrystone memcpy status hwmon -i 3 -o my_agenda.yaml
@ -271,7 +272,7 @@ using the following command::
Record
------
This command simiplifies the process of recording revent files. It will
This command simplifies the process of recording revent files. It will
automatically deploy revent and has options to automatically open apps and
record specified stages of a workload. Revent allows you to record raw inputs
such as screen swipes or button presses. This can be useful for recording inputs
@ -285,14 +286,14 @@ devices it is obtained from ``/proc/device-tree/model``. - suffix is used by WA
to determine which part of the app execution the recording is for, currently
these are either ``setup``, ``run``, ``extract_results`` or ``teardown``. All
stages except ``run`` are optional for playback and to specify which stages
shoule be recorded the ``-s``, ``-r``, ``-e`` or ``-t`` arguments respectively,
should be recorded the ``-s``, ``-r``, ``-e`` or ``-t`` arguments respectively,
or optionally ``-a`` to indicate all stages should be recorded.
The full set of options for this command are::
usage: wa record [-h] [-c CONFIG] [-v] [--version] [-d DEVICE] [-o FILE] [-s]
[-e] [-t] [-a] [-C] [-p PACKAGE | -w WORKLOAD]
[-r] [-e] [-t] [-a] [-C] [-p PACKAGE | -w WORKLOAD]
optional arguments:
-h, --help show this help message and exit
@ -307,8 +308,8 @@ The full set of options for this command are::
-o FILE, --output FILE
Specify the output file
-s, --setup Record a recording for setup stage
-e, --extract_results
Record a recording for extract_results stage
-r, --run Record a recording for run stage
-e, --extract_results Record a recording for extract_results stage
-t, --teardown Record a recording for teardown stage
-a, --all Record recordings for available stages
-C, --clear Clear app cache before launching it
@ -324,8 +325,9 @@ For more information please see :ref:`Revent Recording <revent-recording>`.
Replay
------
Along side ``record`` wa also has a command to playback a single recorded revent file.
It behaves similar to the ``record`` command taking a subset of the same options allowing you to automatically launch a package on the device ::
Alongside ``record`` wa also has a command to playback a single recorded revent
file. It behaves similar to the ``record`` command taking a subset of the same
options allowing you to automatically launch a package on the device ::
usage: wa replay [-h] [-c CONFIG] [-v] [--debug] [--version] [-p PACKAGE] [-C]
revent

View File

@ -14,22 +14,27 @@ Example
^^^^^^^
Say we want to perform an experiment on an Android big.LITTLE devices to compare
the power consumption between the big and LITTLE clusters running the dhrystone
workload. Assuming we have additional instrumentation active for this device
that we can measure the power the device is consuming, to reduce external
factors we want to ensure that the device has its screen turned off and that it
is in airplane mode turned on for both tests. We will then run 2 :ref:`sections
<sections>` will each enable a single cluster on the device, set the cores to their
maximum frequency and disable all available idle states.
and benchmarkpi workloads. Assuming we have additional instrumentation active
for this device that can measure the power the device is consuming, to reduce
external factors we want to ensure that the device is in airplane mode turned on
for all our tests and the screen is off only for our dhrystone run. We will then
run 2 :ref:`sections <sections>` will each enable a single cluster on the
device, set the cores to their maximum frequency and disable all available idle
states.
.. code-block:: yaml
config:
runtime_parameters:
airplane_mode: true
#..
workloads:
- name: dhrystone
iterations: 1
runtime_parameters:
airplane_mode: true
screen_on: false
- name: benchmarkpi
iterations: 1
sections:
- id: LITTLES
runtime_parameters:
@ -167,8 +172,9 @@ CPUIdle
^^^^^^^
:idle_states: A ``string`` or list of strings which can be used to specify what
idles states should be enabled for all cores if there are common frequencies
available. 'all' and 'none' are also valid entries as a shorthand
idles states should be enabled for all cores if there are common
idle states available. 'all' and 'none' are also valid entries as a
shorthand
:<core_name>_idle_states: A ``string`` or list of strings which can be used to
specify what idles states should be enabled for cores of a particular type
@ -200,7 +206,7 @@ Android Specific Runtime Parameters
entries are ``NATURAL``, ``LEFT``, ``INVERTED``, ``RIGHT``.
:screen_on: A ``boolean`` to specify whether the devices screen should be
turned on. Defaults to ``true``.
turned on. Defaults to ``True``.
.. _setting-sysfiles:
@ -209,18 +215,19 @@ Setting Sysfiles
In order to perform additional configuration of a target the ``sysfile_values``
runtime parameter can be used. The value for this parameter is a mapping (an
associative array, in YAML) of file paths onto values that should be written
into those files. sysfile_values is the only runtime parameter that is available
for any (Linux) device. Other runtime parameters will depend on the specifics of
the device used (e.g. its CPU cores configuration) as detailed above.
into those files. ``sysfile_values`` is the only runtime parameter that is
available for any (Linux) device. Other runtime parameters will depend on the
specifics of the device used (e.g. its CPU cores configuration) as detailed
above.
.. note:: By default WA will attempt to verify that the sysfile value was
.. note:: By default WA will attempt to verify that the any sysfile values were
written correctly by reading the node back and comparing the two values. If
you do not wish this check to happen, for example the node you are writing to
is write only, you can append an ``!`` to the file path to disable this
verification.
For example the following configuration could be used to enable and verify that cpu0
is online, however will not attempt to check that it's governor have been set to
is online, however will not attempt to check that its governor have been set to
userspace::
- name: dhrystone

View File

@ -652,7 +652,7 @@ class RunConfiguration(Configuration):
The maximum number of times failed jobs will be retried before
giving up. If not set.
.. note:: this number does not include the original attempt
.. note:: This number does not include the original attempt
''',
),
ConfigurationPoint(

View File

@ -37,8 +37,8 @@ class Geekbench(ApkUiautoWorkload):
Geekbench scores are calibrated against a baseline score of 1,000 (which is
the score of a single-processor Power Mac G5 @ 1.6GHz). Higher scores are
better, with double the score indicating double the performance.
The benchmarks fall into one of four categories:
The benchmarks fall into one of four categories:
- integer performance.
- floating point performance.
- memory performance.