ae37ff098a
This CL changes how canonical sets for some specific types are written into the root snapshot: instead of writing canonical set as a separate object we reorder objects within a canonical cluster in such a way that the order matches order of elements in the backing store of a canonical set and then we write canonical set layout out using differential encoding (essentially writing gaps between elements instead of writing absolute indices). This significantly reduces the overhead of having canonical sets in the snapshot while maintaining fast deserialisation: for example on build microbenchmark this brings regression in the snapshot size from 4% to .3%. On sizeopt benchmarks: flutter_gallery_app_so_gzip_size -1.5% flutter_gallery_app_so_size -4.7% flutter_gallery_total_heap_size -16.2% TEST=ci Change-Id: I2be7fd073668e9b52098e2acda9f11d128cfda95 Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-dwarf-linux-product-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try,pkg-linux-release-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185381 Commit-Queue: Vyacheslav Egorov <vegorov@google.com> Reviewed-by: Siva Annamalai <asiva@google.com>