On Sun, Aug 12, 2018 at 10:15:48AM +0200, Nguyễn Thái Ngọc Duy wrote: > We're going to optimize unpack_trees() a bit in the following > patches. Let's add some tracing to measure how long it takes before > and after. This is the baseline ("git checkout -" on webkit.git, 275k > files on worktree) > > performance: 0.056651714 s: read cache .git/index > performance: 0.183101080 s: preload index > performance: 0.008584433 s: refresh index > performance: 0.633767589 s: traverse_trees > performance: 0.340265448 s: check_updates > performance: 0.381884638 s: cache_tree_update > performance: 1.401562947 s: unpack_trees > performance: 0.338687914 s: write index, changed mask = 2e > performance: 0.411927922 s: traverse_trees > performance: 0.000023335 s: check_updates > performance: 0.423697246 s: unpack_trees > performance: 0.423708360 s: diff-index > performance: 2.559524127 s: git command: git checkout - Am I the only one who feels a little funny about us sprinkling these performance probes through the code base? On Linux, "perf" already does a great job of this without having to modify the source, and there are tools like: http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html that help make sense of the results. I know that's not going to help on Windows, but presumably there are hardware-counter based perf tools there, too. I can buy the argument that it's nice to have some form of profiling that works everywhere, even if it's lowest-common-denominator. I just wonder if we could be investing effort into tooling around existing solutions that will end up more powerful and flexible in the long run. -Peff