19c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisFlatland is a benchmark for measuring GPU performance in various 2D UI 29c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisrendering and window compositing scenarios. It is designed to be used early 39c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisin the device development process to evaluate GPU hardware (e.g. for SoC 49c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisselection). It uses OpenGL ES 2.0, gralloc, and the Android explicit 59c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennissynchronization framework, so it can only be run on devices with drivers 69c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennissupporting those HALs. 79c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 89c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 99c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisPreparing a Device 109c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 119c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisBecause it's measuring hardware performance, flatland should be run in as 129c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisconsistent and static an environment as possible. The display should be 139c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisturned off and background services should be stopped before running the 149c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisbenchmark. Running 'adb shell stop' after turning off the display is probably 159c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennissufficient for this, but if there are device- specific background services 169c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisthat consume much CPU cycles, memory bandwidth, or might otherwise interfere 179c183f2493222000fa512d927cfde3f4c748eda0Jamie Genniswith GPU rendering, those should be stopped as well (and ideally they'd be 189c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisfixed or eliminated for production devices). 199c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 209c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisAdditionally, all relevant hardware clocks should be locked at a particular 219c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisfrequency when running flatland. At a minimum this includes the CPU, GPU, and 229c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennismemory bus clocks. Running flatland with dynamic clocking essentially 239c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennismeasures the behavior of the dynamic clocking algorithm under a fairly 249c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisunrealistic workload, and will likely result in unstable and useless results. 259c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 269c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisIf running the benchmark with the clocks locked causes thermal issues, the -s 279c183f2493222000fa512d927cfde3f4c748eda0Jamie Genniscommand line option can be used to insert a sleep (specified in milliseconds) 289c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisin between each benchmark sample run. Regardless of the scenario being 299c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennismeasured, each sample measurement runs for between 50 and 200 ms, so a sleep 309c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennistime between 10 and 50 ms should address most thermal problems. 319c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 329c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 339c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisInterpreting the Output 349c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 359c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisThe output of flatland should look something like this: 369c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 379c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis cmdline: flatland 389c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis Scenario | Resolution | Time (ms) 399c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 Single Static Window | 1280 x 800 | fast 409c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 Single Static Window | 2560 x 1600 | 5.368 419c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 Single Static Window | 3840 x 2400 | 11.979 429c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 App -> Home Transition | 1280 x 800 | 4.069 439c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 App -> Home Transition | 2560 x 1600 | 15.911 449c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 App -> Home Transition | 3840 x 2400 | 38.795 459c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 SurfaceView -> Home Transition | 1280 x 800 | 5.387 469c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 SurfaceView -> Home Transition | 2560 x 1600 | 21.147 479c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 16:10 SurfaceView -> Home Transition | 3840 x 2400 | slow 489c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 499c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisThe first column is simply a description of the scenario that's being 509c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennissimulated. The second column indicates the resolution at which the scenario 519c183f2493222000fa512d927cfde3f4c748eda0Jamie Genniswas measured. The third column is the measured benchmark result. It 529c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisindicates the expected time in milliseconds that a single frame of the 539c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisscenario takes to complete. 549c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 559c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisThe third column may also contain one of three other values: 569c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 579c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis fast - This indicates that frames of the scenario completed too fast to be 589c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis reliably benchmarked. This corresponds to a frame time less than 3 ms. 599c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis Rather than spending time trying (and likely failing) to get a stable 609c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis result, the scenario was skipped. 619c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 629c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis slow - This indicates that frames of the scenario took too long to 639c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis complete. This corresponds to a frame time over 50 ms. Rather than 649c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis simulating a scenario that is obviously impractical on this device, the 659c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis scenario was skipped. 669c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 679c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis varies - This indicates that the scenario was measured, but it did not 689c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis yield a stable result. Occasionally this happens with an otherwise stable 699c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis scenario. In this case, simply rerunning flatland should yield a valid 709c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis result. If a scenario repeatedly results in a 'varies' output, that 719c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis probably indicates that something is wrong with the environment in which 729c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis flatland is being run. Check that the hardware clock frequencies are 739c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis locked and that no heavy-weight services / daemons are running in the 749c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis background. 75