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