| Than McIntosh | be1b177 | 2016-05-23 11:07:08 -0400 | [diff] [blame] | 1 | Native tests for 'perfprofd'. Please run with |
| 2 | |
| 3 | runtest --path=system/extras/perfprofd/tests |
| 4 | |
| 5 | (where runtest == $ANDROID_BUILD_TOP"/development/testrunner/runtest.py). |
| Than McIntosh | 7e2f4e9 | 2015-03-05 11:05:02 -0500 | [diff] [blame] | 6 | |
| 7 | Notes: |
| 8 | |
| Than McIntosh | be1b177 | 2016-05-23 11:07:08 -0400 | [diff] [blame] | 9 | 1. Several of the testpoints in this unit tests perform a live 'simpleperf' |
| 10 | run on the device (if you are using a userdebug build, simpleperf should |
| 11 | already be available in /system/xbin/simpleperf). |
| Than McIntosh | 7e2f4e9 | 2015-03-05 11:05:02 -0500 | [diff] [blame] | 12 | |
| Than McIntosh | be1b177 | 2016-05-23 11:07:08 -0400 | [diff] [blame] | 13 | 2. Part of the test is a system-wide profile, meaning that you will |
| 14 | need to run 'adb root' prior to test execution. |
| 15 | |
| 16 | 3. The daemon under test, perfprofd, is broken into a main function, a |
| Than McIntosh | 7e2f4e9 | 2015-03-05 11:05:02 -0500 | [diff] [blame] | 17 | "core" library, and a "utils library. Picture: |
| 18 | |
| 19 | +-----------+ perfprofdmain.o |
| 20 | | perfprofd | |
| 21 | | main() | 1-liner; calls perfprofd_main() |
| 22 | +-----------+ |
| 23 | | |
| 24 | v |
| 25 | +-----------+ perfprofdcore.a |
| 26 | | perfprofd | |
| 27 | | core | most of the interesting code is here; |
| 28 | | | calls into utils library when for |
| 29 | +-----------+ operations such as sleep, log, etc |
| 30 | | |
| 31 | v |
| 32 | +-----------+ perfprofdutils.a |
| 33 | | perfprofd | |
| 34 | | utils | real implementations of perfprofd_sleep, |
| 35 | | | perfprofd_log_* etc |
| 36 | +-----------+ |
| 37 | |
| 38 | Because the daemon tends to spend a lot of time sleeping/waiting, |
| 39 | it is impractical to try to test it directly. Instead we insert a |
| 40 | mock utilities layer and then have a test driver that invokes the |
| 41 | daemon main function. Picture for perfprofd_test: |
| 42 | |
| 43 | +----------------+ perfprofd_test.cc |
| 44 | | perfprofd_test | |
| 45 | | | makes calls into perfprofd_main(), |
| 46 | +----------------+ then verifies behavior |
| 47 | | |
| 48 | v |
| 49 | +-----------+ perfprofdcore.a |
| 50 | | perfprofd | |
| 51 | | core | same as above |
| 52 | +-----------+ |
| 53 | | |
| 54 | v |
| 55 | +-----------+ perfprofdmockutils.a |
| 56 | | perfprofd | |
| 57 | | mockutils | mock implementations of perfprofd_sleep, |
| 58 | | | perfprofd_log_* etc |
| 59 | +-----------+ |
| 60 | |
| 61 | The mockup versions of perfprofd_sleep() and perfprofd_log_* do |
| 62 | simply log the fact that they are called; the test driver can |
| 63 | then examine the log to make sure that the daemon is doing |
| 64 | what it is supposed to be doing. |