Mercurial > hg4j
comparison cmdline/org/tmatesoft/hg/console/Main.java @ 243:0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 23 Jun 2011 16:58:38 +0200 |
parents | ad6a046943be |
children | 4b661efb9374 |
comparison
equal
deleted
inserted
replaced
242:ad6a046943be | 243:0e01f9182e16 |
---|---|
70 System.out.println("REPO:" + hgRepo.getLocation()); | 70 System.out.println("REPO:" + hgRepo.getLocation()); |
71 } | 71 } |
72 | 72 |
73 public static void main(String[] args) throws Exception { | 73 public static void main(String[] args) throws Exception { |
74 Main m = new Main(args); | 74 Main m = new Main(args); |
75 m.testRevisionMap(); | |
75 // m.testSubrepos(); | 76 // m.testSubrepos(); |
76 // m.testReadWorkingCopy(); | 77 // m.testReadWorkingCopy(); |
77 // m.testParents(); | 78 // m.testParents(); |
78 m.testEffectiveFileLog(); | 79 // m.testEffectiveFileLog(); |
79 // m.testCatAtCsetRevision(); | 80 // m.testCatAtCsetRevision(); |
80 // m.testMergeState(); | 81 // m.testMergeState(); |
81 // m.testFileStatus(); | 82 // m.testFileStatus(); |
82 // m.dumpBranches(); | 83 // m.dumpBranches(); |
83 // m.inflaterLengthException(); | 84 // m.inflaterLengthException(); |
86 // m.testStatusInternals(); | 87 // m.testStatusInternals(); |
87 // m.catCompleteHistory(); | 88 // m.catCompleteHistory(); |
88 // m.dumpCompleteManifestLow(); | 89 // m.dumpCompleteManifestLow(); |
89 // m.dumpCompleteManifestHigh(); | 90 // m.dumpCompleteManifestHigh(); |
90 // m.bunchOfTests(); | 91 // m.bunchOfTests(); |
92 } | |
93 | |
94 /* | |
95 * cpython repo with 70715 revisions. | |
96 3 revisions - 80 ms vs 250 ms (250ms init) | |
97 4 revisions - 110 ms vs 265 ms (265 ms init) | |
98 5 revisions - 94 vs 266. | |
99 complete iteration in changelog.getLocalRevision(tipNodeid) takes 47 ms | |
100 compared to complete iteration inside RevisionMap.init() of 171 ms. | |
101 The only difference is latter instantiates Nodeids, while former compares binary content as is. | |
102 Hence, with 20-30 ms per regular getLocalRevision, it pays off to use RevisionMap with at least 15-20 | |
103 queries | |
104 */ | |
105 private void testRevisionMap() throws Exception { | |
106 HgChangelog changelog = hgRepo.getChangelog(); | |
107 HgChangelog.RevisionMap rmap = changelog.new RevisionMap().init(); // warm-up, ensure complete file read | |
108 int tip = changelog.getLastRevision(); | |
109 // take 5 arbitrary revisions at 0, 1/4, 2/4, 3/4 and 4/4 | |
110 final Nodeid[] revs = new Nodeid[5]; | |
111 revs[4] = changelog.getRevision(0); | |
112 revs[3] = changelog.getRevision(tip / 4); | |
113 revs[2] = changelog.getRevision(tip / 2); | |
114 revs[1] = changelog.getRevision(tip / 4 + tip / 2); | |
115 revs[0] = changelog.getRevision(tip); | |
116 long start = System.currentTimeMillis(); | |
117 for (int i = 0; i < revs.length; i++) { | |
118 final int localRev = changelog.getLocalRevision(revs[i]); | |
119 System.out.printf("%d:%s\n", localRev, revs[i]); | |
120 } | |
121 System.out.println(System.currentTimeMillis() - start); | |
122 System.out.println(); | |
123 // | |
124 start = System.currentTimeMillis(); | |
125 rmap = changelog.new RevisionMap().init(); | |
126 long s2 = System.currentTimeMillis(); | |
127 for (int i = 0; i < revs.length; i++) { | |
128 final int localRev = rmap.localRevision(revs[i]); | |
129 System.out.printf("%d:%s\n", localRev, revs[i]); | |
130 } | |
131 System.out.println(System.currentTimeMillis() - start); | |
132 System.out.printf("\t from that, init took %d ms\n", s2 - start); | |
133 | |
91 } | 134 } |
92 | 135 |
93 private void testSubrepos() throws Exception { | 136 private void testSubrepos() throws Exception { |
94 for (HgSubrepoLocation l : hgRepo.getSubrepositories()) { | 137 for (HgSubrepoLocation l : hgRepo.getSubrepositories()) { |
95 System.out.println(l.getLocation()); | 138 System.out.println(l.getLocation()); |