75 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| Flatland is a benchmark for measuring GPU performance in various 2D UI
 | |
| rendering and window compositing scenarios.  It is designed to be used early
 | |
| in the device development process to evaluate GPU hardware (e.g. for SoC
 | |
| selection).  It uses OpenGL ES 2.0, gralloc, and the Android explicit
 | |
| synchronization framework, so it can only be run on devices with drivers
 | |
| supporting those HALs.
 | |
| 
 | |
| 
 | |
| Preparing a Device
 | |
| 
 | |
| Because it's measuring hardware performance, flatland should be run in as
 | |
| consistent and static an environment as possible.  The display should be
 | |
| turned off and background services should be stopped before running the
 | |
| benchmark.  Running 'adb shell stop' after turning off the display is probably
 | |
| sufficient for this, but if there are device- specific background services
 | |
| that consume much CPU cycles, memory bandwidth, or might otherwise interfere
 | |
| with GPU rendering, those should be stopped as well (and ideally they'd be
 | |
| fixed or eliminated for production devices).
 | |
| 
 | |
| Additionally, all relevant hardware clocks should be locked at a particular
 | |
| frequency when running flatland.  At a minimum this includes the CPU, GPU, and
 | |
| memory bus clocks.  Running flatland with dynamic clocking essentially
 | |
| measures the behavior of the dynamic clocking algorithm under a fairly
 | |
| unrealistic workload, and will likely result in unstable and useless results.
 | |
| 
 | |
| If running the benchmark with the clocks locked causes thermal issues, the -s
 | |
| command line option can be used to insert a sleep (specified in milliseconds)
 | |
| in between each benchmark sample run.  Regardless of the scenario being
 | |
| measured, each sample measurement runs for between 50 and 200 ms, so a sleep
 | |
| time between 10 and 50 ms should address most thermal problems.
 | |
| 
 | |
| 
 | |
| Interpreting the Output
 | |
| 
 | |
| The output of flatland should look something like this:
 | |
| 
 | |
|  cmdline: flatland
 | |
|                Scenario               | Resolution  | Time (ms)
 | |
|  16:10 Single Static Window           | 1280 x  800 |   fast
 | |
|  16:10 Single Static Window           | 2560 x 1600 |  5.368
 | |
|  16:10 Single Static Window           | 3840 x 2400 | 11.979
 | |
|  16:10 App -> Home Transition         | 1280 x  800 |  4.069
 | |
|  16:10 App -> Home Transition         | 2560 x 1600 | 15.911
 | |
|  16:10 App -> Home Transition         | 3840 x 2400 | 38.795
 | |
|  16:10 SurfaceView -> Home Transition | 1280 x  800 |  5.387
 | |
|  16:10 SurfaceView -> Home Transition | 2560 x 1600 | 21.147
 | |
|  16:10 SurfaceView -> Home Transition | 3840 x 2400 |   slow
 | |
| 
 | |
| The first column is simply a description of the scenario that's being
 | |
| simulated.  The second column indicates the resolution at which the scenario
 | |
| was measured.  The third column is the measured benchmark result.  It
 | |
| indicates the expected time in milliseconds that a single frame of the
 | |
| scenario takes to complete.
 | |
| 
 | |
| The third column may also contain one of three other values:
 | |
| 
 | |
|     fast - This indicates that frames of the scenario completed too fast to be
 | |
|     reliably benchmarked.  This corresponds to a frame time less than 3 ms.
 | |
|     Rather than spending time trying (and likely failing) to get a stable
 | |
|     result, the scenario was skipped.
 | |
| 
 | |
|     slow - This indicates that frames of the scenario took too long to
 | |
|     complete.  This corresponds to a frame time over 50 ms.  Rather than
 | |
|     simulating a scenario that is obviously impractical on this device, the
 | |
|     scenario was skipped.
 | |
| 
 | |
|     varies - This indicates that the scenario was measured, but it did not
 | |
|     yield a stable result.  Occasionally this happens with an otherwise stable
 | |
|     scenario.  In this case, simply rerunning flatland should yield a valid
 | |
|     result.  If a scenario repeatedly results in a 'varies' output, that
 | |
|     probably indicates that something is wrong with the environment in which
 | |
|     flatland is being run.  Check that the hardware clock frequencies are
 | |
|     locked and that no heavy-weight services / daemons are running in the
 | |
|     background.
 |