view tests/test-convert-cvsnt-mergepoints.rlog @ 47120:7109a38830c9

dirstate-tree: Fold "tracked descendants" counter update in main walk For the purpose of implementing `has_tracked_dir` (which means "has tracked descendants) without an expensive sub-tree traversal, we maintaing a counter of tracked descendants on each "directory" node of the tree-shaped dirstate. Before this changeset, mutating or inserting a node at a given path would involve: * Walking the tree from root through ancestors to find the node or the spot where to insert it * Looking at the previous node if any to decide what counter update is needed * Performing any node mutation * Walking the tree *again* to update counters in ancestor nodes When profiling `hg status` on a large repo, this second walk takes times while loading a the dirstate from disk. It turns out we have enough information to decide before he first tree walk what counter update is needed. This changeset merges the two walks, gaining ~10% of the total time for `hg update` (in the same hyperfine benchmark as the previous changeset). --- Profiling was done by compiling with this `.cargo/config`: [profile.release] debug = true then running with: py-spy record -r 500 -n -o /tmp/hg.json --format speedscope -- \ ./hg status -R $REPO --config experimental.dirstate-tree.in-memory=1 then visualizing the recorded JSON file in https://www.speedscope.app/ Differential Revision: https://phab.mercurial-scm.org/D10554
author Simon Sapin <simon.sapin@octobus.net>
date Fri, 30 Apr 2021 14:22:14 +0200
parents 727f7aaefaab
children
line wrap: on
line source

head: 1.2
branch:
locks: strict
access list:
symbolic names:
	MYBRANCH1_2: 1.1.2.2.0.2
	MYBRANCH1_1: 1.1.0.4
	MYBRANCH1: 1.1.0.2
keyword substitution: kv
total revisions: 8;	selected revisions: 8
description:
----------------------------
revision 1.2
date: 2009/04/02 07:00:32;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 14d449d462903487;  mergepoint: 1.1.2.2.2.1;  filename: foo.txt;
merge
----------------------------
revision 1.1
date: 2009/04/02 06:50:43;  author: user;  state: Exp;  kopt: kv;  commitid: 17ac49d460432d04;  filename: foo.txt;
branches:  1.1.2;  1.1.4;
foo.txt
----------------------------
revision 1.1.4.2
date: 2009/04/02 07:02:51;  author: user;  state: Exp;  lines: +1 -0;  kopt: kv;  commitid: 170049d4631b364d;  mergepoint: 1.1.2.2;  filename: foo.txt;
merge
----------------------------
revision 1.1.4.1
date: 2009/04/02 06:53:42;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: dc849d460f52f49;  filename: foo.txt;
quux
----------------------------
revision 1.1.2.2
date: 2009/04/02 06:53:20;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 8ec49d460e02f04;  filename: foo.txt;
branches:  1.1.2.2.2;
baz
----------------------------
revision 1.1.2.1
date: 2009/04/02 06:52:38;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: d5049d460b62e7b;  filename: foo.txt;
bar
----------------------------
revision 1.1.2.2.2.1
date: 2009/04/02 06:55:42;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 11c849d4616d30d1;  filename: foo.txt;
bazzie
=============================================================================