1*c8dee2aaSAndroid Build Coastguard Worker# Rust PNG decoder 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard WorkerThis directory contains experimental code for 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Worker* Providing `SkCodec` API for decoding PNG images using Rust `png` crate. 6*c8dee2aaSAndroid Build Coastguard Worker* Providing `SkEncoder` API for encoding PNG images using Rust `png` crate. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard WorkerSee the following document for more details: 9*c8dee2aaSAndroid Build Coastguard Workerhttps://docs.google.com/document/d/1glx5ue5JDlCld5WzWgTOGK3wsMErQFnkY5N5Dsbi91Y/edit?usp=sharing 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker## Chromium build instructions 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard WorkerTo build and test the code from this directory from Chromium: 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker1. `gn args out/...` and set `enable_rust_png = true` 16*c8dee2aaSAndroid Build Coastguard Worker1. `autoninja -C out/... gfx_unittests blink_platform_unittests chrome` 17*c8dee2aaSAndroid Build Coastguard Worker1. `out/.../gfx_unittests --gtest_filter=RustEnabled*` 18*c8dee2aaSAndroid Build Coastguard Worker1. `out/.../blink_platform_unittests --gtest_filter=RustEnabled*` 19*c8dee2aaSAndroid Build Coastguard Worker1. `out/.../chrome --enable-features=RustyPng` 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker## Skia build instructions 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker### Bazel 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard WorkerTo build the code from this directory from Skia (testing via Bazel is not 26*c8dee2aaSAndroid Build Coastguard Workersupported yet): 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker``` 29*c8dee2aaSAndroid Build Coastguard Worker$ cd skia-repo-root 30*c8dee2aaSAndroid Build Coastguard Worker$ bazelisk build experimental/rust_png/... 31*c8dee2aaSAndroid Build Coastguard Worker``` 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker### gn / ninja 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard WorkerTo build the code from this directory from Skia: 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker1. `gn args out/RustPng` and set `skia_use_rust_png_decode = true` 38*c8dee2aaSAndroid Build Coastguard Worker as well as `skia_use_rust_png_encode = true` 39*c8dee2aaSAndroid Build Coastguard Worker1. `gn gen out/RustPng` 40*c8dee2aaSAndroid Build Coastguard Worker1. `autoninja -C out/RustPng dm` 41*c8dee2aaSAndroid Build Coastguard Worker``` 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard WorkerTo test the code (via `tests/SkPngRustDecoderTest.cpp` and 44*c8dee2aaSAndroid Build Coastguard Worker`tests/SkPngRustEncoderTest.cpp`): 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker``` 47*c8dee2aaSAndroid Build Coastguard Worker$ out/RustPng/dm --src tests --nogpu \ 48*c8dee2aaSAndroid Build Coastguard Worker --match Codec_apng \ 49*c8dee2aaSAndroid Build Coastguard Worker --match Codec_png \ 50*c8dee2aaSAndroid Build Coastguard Worker --match Encode_png 51*c8dee2aaSAndroid Build Coastguard Worker``` 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard WorkerTODO(https://crbug.com/356875275): Add support for running older tests 54*c8dee2aaSAndroid Build Coastguard Worker(e.g. ones from `tests/CodecTest.cpp`) against `SkPngRustCodec`. 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker## Differences between `SkPngCodec` and `SkRustPngCodec` 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker* `SkPngCodec`: 59*c8dee2aaSAndroid Build Coastguard Worker - No APNG support. 60*c8dee2aaSAndroid Build Coastguard Worker - No CICP support. 61*c8dee2aaSAndroid Build Coastguard Worker* `SkPngRustCodec` differences - see 62*c8dee2aaSAndroid Build Coastguard Worker https://issues.chromium.org/issues?q=parentid:362829876%2B): 63