# Fuzzers for SurfaceFlinger
## Table of contents
+ [SurfaceFlinger](#SurfaceFlinger)
+ [DisplayHardware](#DisplayHardware)
+ [Scheduler](#Scheduler)
+ [Layer](#Layer)
# Fuzzer for SurfaceFlinger
SurfaceFlinger supports the following data sources:
1. Pixel Formats (parameter name: `defaultCompositionPixelFormat`)
2. Data Spaces (parameter name: `defaultCompositionDataspace`)
3. Rotations (parameter name: `internalDisplayOrientation`)
3. Surface composer tags (parameter name: `onTransact`)
You can find the possible values in the fuzzer's source code.
#### Steps to run
1. Build the fuzzer
```
$ mm -j$(nproc) surfaceflinger_fuzzer
```
2. To run on device
```
$ adb sync data
$ adb shell /data/fuzz/arm64/surfaceflinger_fuzzer/surfaceflinger_fuzzer
```
# Fuzzer for DisplayHardware
DisplayHardware supports the following parameters:
1. Hal Capability (parameter name: `hasCapability`)
2. Hal BlendMode (parameter name: `setBlendMode`)
3. Hal Composition (parameter name: `setCompositionType`)
4. Hal Display Capability (parameter name: `hasDisplayCapability`)
5. Composition Types (parameter name: `prepareFrame`)
6. Color Modes (parameter name: `setActiveColorMode`)
7. Render Intents (parameter name: `setActiveColorMode`)
8. Power Modes (parameter name: `setPowerMode`)
9. Content Types (parameter name: `setContentType`)
10. Data Space (parameter name: `setDataspace`)
11. Transforms (parameter name: `setLayerTransform`)
You can find the possible values in the fuzzer's source code.
#### Steps to run
1. Build the fuzzer
```
$ mm -j$(nproc) surfaceflinger_displayhardware_fuzzer
```
2. Run on device
```
$ adb sync data
$ adb shell /data/fuzz/arm64/surfaceflinger_displayhardware_fuzzer/surfaceflinger_displayhardware_fuzzer
```
# Fuzzer for Scheduler
Scheduler supports the following parameters:
1. VSync Periods (parameter name: `lowFpsPeriod`)
You can find the possible values in the fuzzer's source code.
#### Steps to run
1. Build the fuzzer
```
$ mm -j$(nproc) surfaceflinger_scheduler_fuzzer
```
2. To run on device
```
$ adb sync data
$ adb shell /data/fuzz/arm64/surfaceflinger_scheduler_fuzzer/surfaceflinger_scheduler_fuzzer
```
# Fuzzer for Layer
Layer supports the following parameters:
1. Display Connection Types (parameter name: `fakeDisplay`)
2. State Sets (parameter name: `traverseInZOrder`)
3. State Subsets (parameter name: `prepareCompositionState`)
4. Disconnect modes (parameter name: `disconnect`)
5. Data Spaces (parameter name: `setDataspace`)
You can find the possible values in the fuzzer's source code.
#### Steps to run
1. Build the fuzzer
```
$ mm -j$(nproc) surfaceflinger_layer_fuzzer
```
2. Run on device
```
$ adb sync data
$ adb shell /data/fuzz/arm64/surfaceflinger_layer_fuzzer/surfaceflinger_layer_fuzzer
```