In order to build the test documentation the python package `nose` is
required therefore this commit adds a requirements.txt to ensure the
package is available when building the documentation on RTD.
As the Makefile is no longer responsible for calling the extension and
instrumentation documentation ensure any previously generated
documentation is deleted from the respective build file.
This commit now automatically calls the extension and
instrumentation documention generator and calls Sphinx-api tool
to allow documention generation on ReadTheDocs.
If the $WA_USER_DIRECTORY folder is not present on the users
system it is automatically created and a default config.py file
created. Previously this newly created file would not be loaded into
WA causing it to crash.
If the environment variable $WA_USER_DIRECTORY is not set `_env_root`
is automatically generated from the path expansion of `~`. In some cases
if a home directory is not avaliable for the user this may result in an empty
string. This commit ensure that '_env_root' is still an absolute path
using the current working directory.
Previously the try clause worked to catch StopIteration exceptions correctly,
however upon catching the exception, another statment which set self._duration
to (last.time - first.time) was being run regardless, which defeated the point
of the try clause.
This has been fixed by introducing an else clause to contain said statement.
This fixes an issue introduced by commit 5965956
revent: fix off-by-one in replay
This moved the updating of the current event to the beginning of the
body of the loop, after the check of the while loop to prevent attempting
to assign past the end of array. The problem is that one the conditions
in the check relies on the event being updated, so it need to happen
before that part of the loop condition check.
This move event update back to the end of the loop body, but it moves
the array bounds check from the while loop condition into the body, just
before the update but after the counter is incremented. This should
satisfy both, the counter being bounds checked before it is used, and
the event being updated to the next one to be played before the timing
check in the loop condition.
Fix for Chromebook Plus and possibly other devices - removes forbidden
characters from the device_model such as the null character which was
causing a problem with getters getting file names including device_model.
The ReventWorkload class has been moved to the linux directory and
two new features have been added: the option to run an idle workload
and the option to specify a .teardown revent file as well as a .setup file
which runs in the eponymous stage.
Removed dynamically populated existing configs path from doc string as
this is also used to generate the online documentation and therefore should
not be an absolute path.
The workload has been updated to handle the latest version
which no longer has the welcome view page. This has been
done so in a way that still provides backwards compatibility
to previous versions.
Android 7 no longer has the broadcast functions which
mean we have to refresh our image directory another way.
We are now using Google Photos to do this but only if the
current method is unable to find the correct test images.
Update idx and ev to the next event after the while check (which makes
sure that the next index is within bounds) to avoid a potential
access-past-end-of-array.
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.
': ' is used as the delimiter for the different parts of of the event
line; unfortunately, it is also a valid character sequence to appear in
a task name.
This change attempts to perform the event line split correctly by
ensuring that the cpu id is present in the first part.
Make event preamble parsing more robust in cases there are multiple
instances of ' [' (e.g. as part of thread name) by splitting exactly
once from the right. The right-most columns are the timestamp and the
cpu id, and much more restricted (and therefore predictable) in their
formatting.
install_apk() was using the default timeout of 30 seconds, this can
cause problems for some applications on slower targets. Since
installation is expected to be a long-ish operation, there is not reason
for the timeout to be this short.
This commit adjusts the timeout to 5 minutes, which should be a more
reasonable value for most applications. For some apps with particularly
large APKs, this may not be enough, but in those cases, the default
should already be overriden on per-worload bases.