You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.0 KiB

Native tests for 'perfprofd'. Please run with

runtest --path=system/extras/perfprofd/tests

(where runtest == $ANDROID_BUILD_TOP"/development/testrunner/runtest.py).

Notes:

1. Several of the testpoints in this unit tests perform a live 'simpleperf'
run on the device (if you are using a userdebug build, simpleperf should
already be available in /system/xbin/simpleperf).

2. Part of the test is a system-wide profile, meaning that you will
need to run 'adb root' prior to test execution.

3. The daemon under test, perfprofd, is broken into a main function, a
"core" library, and a "utils library. Picture:

+-----------+ perfprofdmain.o
| perfprofd |
| main() | 1-liner; calls perfprofd_main()
+-----------+
|
v
+-----------+ perfprofdcore.a
| perfprofd |
| core | most of the interesting code is here;
| | calls into utils library when for
+-----------+ operations such as sleep, log, etc
|
v
+-----------+ perfprofdutils.a
| perfprofd |
| utils | real implementations of perfprofd_sleep,
| | perfprofd_log_* etc
+-----------+

Because the daemon tends to spend a lot of time sleeping/waiting,
it is impractical to try to test it directly. Instead we insert a
mock utilities layer and then have a test driver that invokes the
daemon main function. Picture for perfprofd_test:

+----------------+ perfprofd_test.cc
| perfprofd_test |
| | makes calls into perfprofd_main(),
+----------------+ then verifies behavior
|
v
+-----------+ perfprofdcore.a
| perfprofd |
| core | same as above
+-----------+
|
v
+-----------+ perfprofdmockutils.a
| perfprofd |
| mockutils | mock implementations of perfprofd_sleep,
| | perfprofd_log_* etc
+-----------+

The mockup versions of perfprofd_sleep() and perfprofd_log_* do
simply log the fact that they are called; the test driver can
then examine the log to make sure that the daemon is doing
what it is supposed to be doing.