)]}'
{
  "commit": "2851c5a6c0872082e5eaa6e8f19bef5ecb244856",
  "tree": "5a3996c59389cec4563fc4948d9919d0c3b6f760",
  "parents": [
    "c4c90718a715fb799b5bcf63e36c0d21b806ad20"
  ],
  "author": {
    "name": "csmartdalton",
    "email": "hello@rive.app",
    "time": "Tue Sep 06 20:08:05 2022 +0000"
  },
  "committer": {
    "name": "csmartdalton",
    "email": "hello@rive.app",
    "time": "Tue Sep 06 20:08:05 2022 +0000"
  },
  "message": "Simpify RawPath::Iter\n\nImplement Iter as an STL-style iterator that can be traversed very\nefficiently using range-for:\n\n  for (auto [verb, pts] : rawPath) { ... }\n\nManually inject the implicit moveTos in RawPath (namely, the implicit\nmoveTo(0) at the beginning of a path, if the client didn\u0027t add one, and\na similar moveTo after close).\n\nThe implicit moveTos fix a bug in RawPath::bounds where we were not\naccounting for the implicit moveTo(0), as well as a bug in\nContourMeasureIter::tryNext where we expected the first contour in a\npath to begin with PathVerb::move.\n\nWith the implicit moveTos guaranteed to be in the raw path, the iterator\ncan be simplified to just peek back one point and give a contiguous array\nbeginning with p0 for each verb. In addition to generally simplifying\nthings, one more perk of having all the points contiguous is that it\nalso enables fast SIMD loads.\n\nIterateRawPath bench result:\n\n  MacOS NEON: 8.71ms -\u003e 5.02 (58%)\n  Windows SSE: 5.63ms -\u003e 4.20 (75%)\n\nBuildRawPath bench result:\n\n  MacOS NEON: 2.09ms -\u003e 2.19 (105%)\n  Windows SSE: 2.18ms -\u003e 2.27 (104%)\n\nDiffs\u003d\nfdeff54d1 Simpify RawPath::Iter (#4157)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7c8701dca3daead237f87e5f2d863e2ccd77c249",
      "old_mode": 33188,
      "old_path": ".rive_head",
      "new_id": "59d6fd3454fe114ac77e3319a5011f44f66ed237",
      "new_mode": 33188,
      "new_path": ".rive_head"
    },
    {
      "type": "modify",
      "old_id": "096564521c557222fb63976a4d6b9cdc8852a038",
      "old_mode": 33188,
      "old_path": "include/rive/math/contour_measure.hpp",
      "new_id": "1f51b5e13d131dab9c2178cf9c1d2fb19d30f96a",
      "new_mode": 33188,
      "new_path": "include/rive/math/contour_measure.hpp"
    },
    {
      "type": "modify",
      "old_id": "41ac2b40969a8831096595c5b8fc875260f30583",
      "old_mode": 33188,
      "old_path": "include/rive/math/raw_path.hpp",
      "new_id": "7514e9362d8315fe3d821df8e44d6254141f2f3f",
      "new_mode": 33188,
      "new_path": "include/rive/math/raw_path.hpp"
    },
    {
      "type": "modify",
      "old_id": "9e8a56be5214c79d365390cffec0432ce27c3630",
      "old_mode": 33188,
      "old_path": "skia/renderer/src/skia_factory.cpp",
      "new_id": "a03ca7b7ee438a05022367e1148b414e36bbbe9d",
      "new_mode": 33188,
      "new_path": "skia/renderer/src/skia_factory.cpp"
    },
    {
      "type": "modify",
      "old_id": "b3421d4d0aeec9a96aee9ad13b7830838a735ca6",
      "old_mode": 33188,
      "old_path": "src/math/contour_measure.cpp",
      "new_id": "5f4f88762ffb279e0f45ac9c8c039f8c965e7510",
      "new_mode": 33188,
      "new_path": "src/math/contour_measure.cpp"
    },
    {
      "type": "modify",
      "old_id": "40e821f21e06e84bb1abe8140620ae95a88648ac",
      "old_mode": 33188,
      "old_path": "src/math/raw_path.cpp",
      "new_id": "1fa9381131424ed052a0d7a2955b645136252e64",
      "new_mode": 33188,
      "new_path": "src/math/raw_path.cpp"
    },
    {
      "type": "modify",
      "old_id": "47146a2fb95eaf9246cf0ba930963b50888145ed",
      "old_mode": 33188,
      "old_path": "tess/include/rive/tess/segmented_contour.hpp",
      "new_id": "07b4657e25f6cba846e4ce567c18ed43db290731",
      "new_mode": 33188,
      "new_path": "tess/include/rive/tess/segmented_contour.hpp"
    },
    {
      "type": "modify",
      "old_id": "490623245ff833a9d89dac642fcc166279b37c8d",
      "old_mode": 33188,
      "old_path": "tess/src/segmented_contour.cpp",
      "new_id": "c47dc53227870c7e04255a86466f08e0971780ad",
      "new_mode": 33188,
      "new_path": "tess/src/segmented_contour.cpp"
    },
    {
      "type": "modify",
      "old_id": "7b77337c7e1e300fbf1bfb72c87d040a01a7b0b6",
      "old_mode": 33188,
      "old_path": "test/raw_path_test.cpp",
      "new_id": "460542b7f87a627a08bd2b7ffd5088d669b8a7f1",
      "new_mode": 33188,
      "new_path": "test/raw_path_test.cpp"
    }
  ]
}
