Skip to content

Latest commit

 

History

History
 
 

ActivityManagerPerfTests

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
ActivityManagerPerfTests

Performance tests for various ActivityManager components, e.g. Services, Broadcasts
* These are only for tests that don't require a target package to test against
* Self-contained perf tests should go in frameworks/base/apct-tests/perftests

Command to run tests
* atest -v ActivityManagerPerfTests

Overview
* The numbers we are trying to measure are end-to-end numbers
  * For example, the time it takes from sending an Intent to start a Service
    to the time the Service runs its callbacks
* System.nanoTime() is monotonic and consistent between processes, so we use that for measuring time
* If the test app is involved, it will measure the time and send it back to the instrumentation test
  * The time is sent back through a Binder interface in the Intent with the help of Utils.sendTime()
  * Each sent time is tagged with an id since there can be multiple events that send back a time
* Each test will run multiple times to account for variation in test runs

Structure
* tests
  * Instrumentation test which runs the various performance tests and reports the results
* test-app
  * Target package which contains the Services, BroadcastReceivers, etc. to test against
  * Sends the time it measures back to the test package
* utils
  * Utilities that both the instrumentation test and test app can use

Adding tests
* Example
  * Look at tests/src/com/android/frameworks/perftests/am/BroadcastPerfTest and
    test-app/src/com/android/frameworks/perftests/amteststestapp/TestBroadcastReceiver
    for simple examples using this framework
* Steps
  * Add any components you will test against in the target package under
    test-app/src/com/android/frameworks/perftests/amteststestapp/
  * Add the test class under tests/src/com/android/frameworks/perftests/am/tests/
    * The class should extend BasePerfTest
    * Each test should call runPerfFunction() returning the elapsed time for a single iteration
    * The test has access to a Context through mContext
  * If you are measuring the time elapsed of something that either starts or ends in the target
    package
    * The target package can report the time it measures through an ITimeReceiverCallback passed
      through an Intent through Utils.sendTime(intent, "tag")
      (or however a Binder needs to be passed to the target package)
    * The instrumentation test can collect that time by calling getReceivedTimeNs("tag") and
      calculate the elapsed time
    * Each timestamp sent to the instrumentation test is tagged with a tag since multiple timestamps
      can be reported in an iteration
  * If the target package should be running before your test logic starts, add startTargetPackage();
    at the beginning of the iteration

* Reporting
  * Look at internal documentation for how to add new tests to dashboards and receive notification
    on regressions