The Photo Editing 3.0 test measures how well your device performs when applying various filters and effects to images.
The test uses four different APIs to apply filters and effects to the images.
- The native android.media.effect API, which processes effects on the GPU.
- The native android.renderscript API and specifically the RenderScript Intrinsics functions that support high-performance computation across heterogeneous processors.
- The android-jhlabs API, which allows image processing using Java filters on the CPU, (licensed under the Apache license, version 2).
- 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
- Load and display a source image.
- Apply an effect to the source image and display the resulting image.
- 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 6 intermediate saves.
In task 2, effects without parameters are run only once. Effects with parameters are run 3 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 name | Parameters | API used |
---|---|---|
autofix | phased | android.media.effects |
blur | radius: 10.0 | android.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.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.renderscript.ScriptIntrinsicConvolve3x3 | |
sharpen | phased | android.media.effects |
temperature | phased | android.media.effects |
red eye correction | android.media.effects |
Scoring
PhotoEditing3.0 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. A_17 = Arithmetic average of the loading time from flash to memory, including decompression for all images A_18 = Arithmetic average of the saving time from memory to flash, including image compression for all images A_19 = Arithmetic average of loading time from memory to GPU for all images A_20 = Arithmetic average of fetch times from GPU to memory for all saves