)]}'
{
  "commit": "ff59ce65022d71f883b7e3be146bbd32facadaf8",
  "tree": "621916b78e556f41e4698e1f1ad1ae8efa8a08ab",
  "parents": [
    "53c9663c3b833316799ac5570cd5f2ec74c42a7b"
  ],
  "author": {
    "name": "Lukasz Anforowicz",
    "email": "lukasza@chromium.org",
    "time": "Tue Oct 22 18:18:58 2024 +0000"
  },
  "committer": {
    "name": "SkCQ",
    "email": "skcq-be@skia-corp.google.com.iam.gserviceaccount.com",
    "time": "Wed Oct 23 20:59:39 2024 +0000"
  },
  "message": "[rust png] Discover frames more aggressively in `onGetFrameCount`.\n\nBefore this CL, `SkPngRustCodec::onGetFrameCount` would not skip over\nframe data (i.e. over `IDAT` or `fdAT` chunks) to discover additional\nframe metadta (i.e. `fcTL` chunks).  This meant that even if all the\ninput data has been available, `onGetFrameCount` wouldn\u0027t necessarily\nreturn the number of all frames (e.g. if initial frames haven\u0027t yet\nbeen decoded).  This had undesirable impact on Blink integration.\n\nAfter this CL, `SkPngRustCodec::onGetFrameCount` would aggressively\nconsume the input `SkStream` to discover additional frame metadata.\nSkipping over `IDAT` and `fdAT` chunks means that decoding them later\nmay necessitate `seek`ing earlier in the input.  This seems ok\n(and opportunities to improve the performance of `seek`ing are tracked\nin https://crbug.com/371060427).\n\nBug: 356922876\nChange-Id: I6c5cc686faf9c0766b75e8786e94b9155aeaa362\nReviewed-on: https://skia-review.googlesource.com/c/skia/+/911038\nCommit-Queue: Łukasz Anforowicz \u003clukasza@google.com\u003e\nReviewed-by: Florin Malita \u003cfmalita@google.com\u003e\nReviewed-by: Daniel Dilan \u003cdanieldilan@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b58208723f4725825f08a9e03b572a022c76aaf4",
      "old_mode": 33188,
      "old_path": "experimental/rust_png/impl/SkPngRustCodec.cpp",
      "new_id": "cac44c21b2998d350f49b06f83ef1ba446f40d56",
      "new_mode": 33188,
      "new_path": "experimental/rust_png/impl/SkPngRustCodec.cpp"
    },
    {
      "type": "modify",
      "old_id": "3cb3a6905cdca40bed667a1200b4eca27f03f6dc",
      "old_mode": 33188,
      "old_path": "experimental/rust_png/impl/SkPngRustCodec.h",
      "new_id": "a692508e0adc493ace528085061371a37abf0d99",
      "new_mode": 33188,
      "new_path": "experimental/rust_png/impl/SkPngRustCodec.h"
    },
    {
      "type": "modify",
      "old_id": "c2db6538f49b6613f070aeec0e7dced7ed936a4f",
      "old_mode": 33188,
      "old_path": "include/codec/SkCodec.h",
      "new_id": "4e5c3c1ebd74a873b486f30a2b0c222a730a007b",
      "new_mode": 33188,
      "new_path": "include/codec/SkCodec.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3094c1d23d6004e4c93fa6ffd4064d5cb023d9a4",
      "new_mode": 33188,
      "new_path": "resources/images/apng-test-suite--dispose-ops--none-basic.png"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ca7b13ab8ab4b98440130010f01e9396b44ea923",
      "new_mode": 33188,
      "new_path": "resources/images/apng-test-suite--invalid--num-frames-outside-valid-range.png"
    },
    {
      "type": "modify",
      "old_id": "9f35eba875d9d9f0b1ea306ded93b3cf56f911e1",
      "old_mode": 33188,
      "old_path": "tests/SkPngRustDecoderTest.cpp",
      "new_id": "61cf3192bbad147b533b396b4f6771c23e605fa3",
      "new_mode": 33188,
      "new_path": "tests/SkPngRustDecoderTest.cpp"
    }
  ]
}
