Budget interlaced row buffers in SkPngRustCodec

- Replace the single-row std::vector<uint8_t> buffers in
  expandDecodedInterlacedRow() and incrementalDecode() with
  SkCodecPriv::BudgetedBuffer fields in DecodingState
  (fDecodedInterlacedFullWidthRow and fXformedInterlacedRow),
  allocated once per decode in initializeDecodingDst()
- Re-zero fXformedInterlacedRow before each row only with
  kYes_ZeroInitialized, where fSwizzler skips writing leading
  transparent pixels
- Add unit tests verifying fMaxDecodeMemory accounting for both the
  canReadRow() and incrementalDecodeXForm() interlaced decode paths,
  and that kYes_ZeroInitialized matches kNo_ZeroInitialized on the
  incrementalDecodeXForm() interlaced path

Bug: b/565484678
Change-Id: I2742ea7d5e94e5f7ada51c8d3fd0571e71b45c4e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1375536
Reviewed-by: Florin Malita <fmalita@google.com>
Commit-Queue: Elliot Sisteron <elliotsisteron@google.com>
3 files changed