xref: /aosp_15_r20/external/skia/experimental/rust_png/README.md (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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