The Photo Editing test measures how well your device performs when applying various filters and effects to images. The test runs in portrait screen orientation.

The test uses four different APIs to apply filters and effects to the images.

  1. The native android.media.effect API, which processes effects on the GPU. 
  2. The native android.support.v8.renderscript API and specifically the RenderScript Intrinsics functions that support high-performance computation across heterogeneous processors.
  3. The android-jhlabs API, which allows image processing using Java filters on the CPU, (licensed under the Apache license, version 2).
  4. The native android.graphics API, which provides low-level tools that handle drawing to the screen directly. 

The test measures the time taken to open, edit, and save a set of JPEG images. The measurements include the time taken to move graphics data to and from the CPU and GPU, decode from and encode to JPEG format, and read and write from the device's flash storage. The pictures used in the test have a 4 MP resolution (2048 × 2048). 

Loading forces the use of bitmap format of ARGB_8888. Saving uses JPEG format with 90% quality hint. Saves happen to internal flash, unless ENABLE_DUMP configuration is set to permanently save all output pictures, in which case images are saved in the shared photo gallery area DCIM/Futuremark/PCMA/PhotoEditing.

Workload tasks

  1. Load and display a source image.
  2. Apply an effect to the source image and display the resulting image.
  3. For selected images and filters, save the resulting image on disk.

Each of these tasks is followed by a one-second delay to make it easier for you to follow the progress of the test.

Tasks 1 to 3 are repeated for 24 different filters, across 13 unique source images, with six intermediate saves. 

In task 2, effects without parameters are run only once. Effects with parameters are run three times and the result is the arithmetic average of the execution times. 

At the end of each Android media effect round (within task 2), glFinish() is called to make sure the results end up on the screen. This is also how applications work in order to keep user inputs and screen contents in sync.

Some of the parameterized effects are using each round to apply a different value (in the space (0,1]) to the effect, giving the impression of a 'phased' application. The values for the three rounds are 0.33, 0.66, 1.0. 

Effects, parameters and APIs

Effect nameParametersAPI used

autofix

phased 

android.media.effects

blur

radius: 10.0

android.support.v8.renderscript.ScriptIntrinsicBlur

contrast

phased 

android.media.effects

contrast 

phased 

java

crop_java 

x:0 y:0 w:1600 h:1600

android.graphics

crossprocess 


android.media.effects

documentary


android.media.effects

emboss


android.support.v8.renderscript.ScriptIntrinsicConvolve3x3

exposure

phased

java

fill light

phased

android.media.effects

fisheye

phased 

android.media.effects

flip

horizontal 

android.media.effects

flip 

horizontal 

java

grain

phased

android.media.effects

grayscale


android.media.effects

lomoish


android.media.effects

rgb adjust

r:2 g:3 b:3

java

rotate

-90

android.media.effects

rotate_java

phased

android.graphics

saturate

phased

android.media.effects

sharpen


android.support.v8.renderscript.ScriptIntrinsicConvolve3x3

sharpen

phased

android.media.effects

temperature

phased

android.media.effects

red eye correction


android.media.effects

Scoring

PhotoEditing score    =    800,000 × geomean(Rj, Rr, Ra)

Where:

Rj    =    geomean(1/ContrastJava, 1/CropJava, 1/FlipJava, 1/RgbAdjustJava, 1/RotateJava)

Rr    =    geomean(1/BlurRenderScript, 1/SharpenRenderscript, 1/EmbossRenderScript)

Ra    =    geomean(1/A1, 1/A2, 1/A3, …, 1/A18, 1/A19, 1/A20)

And where:
A1    =    Time taken to apply Autofix effect
A2    =    Time taken to apply Contrast effect
A3    =    Time taken to apply Cross Process effect
A4    =    Time taken to apply Documentary effect
A5    =    Time taken to apply Fill-light effect
A6    =    Time taken to apply Fisheye effect
A7    =    Time taken to apply Flip effect
A8    =    Time taken to apply Grain effect
A9    =    Time taken to apply Greyscale effect
A10   =    Time taken to apply Lomoish effect
A11   =    Time taken to apply Rotate effect
A12   =    Time taken to apply Saturate effect
A13   =    Time taken to apply Sharpen effect
A14   =    Time taken to apply Temperature effect
A15   =    Time taken to apply Red Eye Correction filter effect
A16   =    The time taken for face detection in the Red Eye Correction effect when scaling down the source image by a factor of four to 512 × 512 px and using the native Android FaceDetector API to find the location of the eyes. This is repeated three times with the arithmetic average stored as the result. 
A17   =    Arithmetic average of the loading time from flash to memory, including decompression for all images
A18   =    Arithmetic average of the saving time from memory to flash, including image compression for all images
A19   =    Arithmetic average of loading time from memory to GPU for all images
A20   =    Arithmetic average of fetch times from GPU to memory for all saves