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.