Mercurial > hg4j
comparison cmdline/org/tmatesoft/hg/console/Main.java @ 574:88afffd39899
Improve memory consumption of HgManifest#getFileRevision(): avoid extra byte[] instances
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 16 Apr 2013 14:44:57 +0200 |
| parents | 2f9ed6bcefa2 |
| children | 3c4db86e8c1f |
comparison
equal
deleted
inserted
replaced
| 573:e49f9d9513fa | 574:88afffd39899 |
|---|---|
| 26 import java.util.HashSet; | 26 import java.util.HashSet; |
| 27 import java.util.List; | 27 import java.util.List; |
| 28 import java.util.Map; | 28 import java.util.Map; |
| 29 | 29 |
| 30 import org.tmatesoft.hg.core.HgChangeset; | 30 import org.tmatesoft.hg.core.HgChangeset; |
| 31 import org.tmatesoft.hg.core.HgChangesetFileSneaker; | |
| 31 import org.tmatesoft.hg.core.HgChangesetTreeHandler; | 32 import org.tmatesoft.hg.core.HgChangesetTreeHandler; |
| 32 import org.tmatesoft.hg.core.HgCheckoutCommand; | 33 import org.tmatesoft.hg.core.HgCheckoutCommand; |
| 33 import org.tmatesoft.hg.core.HgException; | 34 import org.tmatesoft.hg.core.HgException; |
| 34 import org.tmatesoft.hg.core.HgFileRenameHandlerMixin; | 35 import org.tmatesoft.hg.core.HgFileRenameHandlerMixin; |
| 35 import org.tmatesoft.hg.core.HgFileRevision; | 36 import org.tmatesoft.hg.core.HgFileRevision; |
| 40 import org.tmatesoft.hg.core.Nodeid; | 41 import org.tmatesoft.hg.core.Nodeid; |
| 41 import org.tmatesoft.hg.internal.BasicSessionContext; | 42 import org.tmatesoft.hg.internal.BasicSessionContext; |
| 42 import org.tmatesoft.hg.internal.ByteArrayChannel; | 43 import org.tmatesoft.hg.internal.ByteArrayChannel; |
| 43 import org.tmatesoft.hg.internal.ConfigFile; | 44 import org.tmatesoft.hg.internal.ConfigFile; |
| 44 import org.tmatesoft.hg.internal.DigestHelper; | 45 import org.tmatesoft.hg.internal.DigestHelper; |
| 46 import org.tmatesoft.hg.internal.ManifestRevision; | |
| 45 import org.tmatesoft.hg.internal.PathGlobMatcher; | 47 import org.tmatesoft.hg.internal.PathGlobMatcher; |
| 46 import org.tmatesoft.hg.internal.RelativePathRewrite; | 48 import org.tmatesoft.hg.internal.RelativePathRewrite; |
| 47 import org.tmatesoft.hg.internal.StreamLogFacility; | 49 import org.tmatesoft.hg.internal.StreamLogFacility; |
| 48 import org.tmatesoft.hg.repo.HgBookmarks; | 50 import org.tmatesoft.hg.repo.HgBookmarks; |
| 49 import org.tmatesoft.hg.repo.HgBranches; | 51 import org.tmatesoft.hg.repo.HgBranches; |
| 98 System.out.println("REPO:" + hgRepo.getLocation()); | 100 System.out.println("REPO:" + hgRepo.getLocation()); |
| 99 } | 101 } |
| 100 | 102 |
| 101 public static void main(String[] args) throws Exception { | 103 public static void main(String[] args) throws Exception { |
| 102 Main m = new Main(args); | 104 Main m = new Main(args); |
| 103 m.testRevert(); | 105 m.checkFileSneakerPerformance2(); |
| 106 // m.testRevert(); | |
| 104 // m.testCheckout(); | 107 // m.testCheckout(); |
| 105 // m.tryExtensions(); | 108 // m.tryExtensions(); |
| 106 // m.dumpBookmarks(); | 109 // m.dumpBookmarks(); |
| 107 // m.readConfigFile(); | 110 // m.readConfigFile(); |
| 108 // m.dumpCommitLastMessage(); | 111 // m.dumpCommitLastMessage(); |
| 124 // m.catCompleteHistory(); | 127 // m.catCompleteHistory(); |
| 125 // m.dumpCompleteManifestLow(); | 128 // m.dumpCompleteManifestLow(); |
| 126 // m.dumpCompleteManifestHigh(); | 129 // m.dumpCompleteManifestHigh(); |
| 127 // m.bunchOfTests(); | 130 // m.bunchOfTests(); |
| 128 } | 131 } |
| 132 | |
| 133 private void checkFileSneakerPerformance() throws Exception { | |
| 134 HgChangesetFileSneaker fs1 = new HgChangesetFileSneaker(hgRepo); | |
| 135 HgChangesetFileSneaker fs2 = new HgChangesetFileSneaker(hgRepo); | |
| 136 fs1.followRenames(true); | |
| 137 fs2.followRenames(true); | |
| 138 Nodeid cset = hgRepo.getChangelog().getRevision(TIP); | |
| 139 Path fname = Path.create("dir3/file8"); | |
| 140 fs1.changeset(cset); | |
| 141 fs2.changeset(cset); | |
| 142 // hgRepo.getManifest().getFileRevision(TIP, fname); | |
| 143 final long start1 = System.nanoTime(); | |
| 144 boolean e1 = fs1.checkExists(fname); | |
| 145 final long end1 = System.nanoTime(); | |
| 146 boolean e2 = fs2.checkExists(fname); | |
| 147 final long end2 = System.nanoTime(); | |
| 148 Nodeid fr = hgRepo.getManifest().getFileRevision(TIP, fname); | |
| 149 final long end3 = System.nanoTime(); | |
| 150 System.out.printf("\t1st run: %d ms, %b\n\t2nd run: %d ms, %b\n\tfile only: %d ms", (end1 - start1) / 1000000, e1, (end2 - end1) / 1000000, e2, (end3-end2)/1000000); | |
| 151 if (!fr.equals(fs1.revision()) || !fr.equals(fs2.revision())) { | |
| 152 throw new AssertionError(); | |
| 153 } | |
| 154 ManifestRevision mr = new ManifestRevision(null, null); | |
| 155 final long _s1 = System.nanoTime(); | |
| 156 hgRepo.getManifest().walk(2, 2, mr); | |
| 157 final long _e1 = System.nanoTime(); | |
| 158 hgRepo.getManifest().getFileRevision(2, fname); | |
| 159 final long _e2 = System.nanoTime(); | |
| 160 System.out.printf("\n\tManifestRevision:%d ms, getFileRevision:%d ms\n", (_e1-_s1)/1000000, (_e2-_e1)/1000000); | |
| 161 } | |
| 162 | |
| 163 // -agentlib:hprof=cpu=times,heap=sites,depth=10 | |
| 164 private void checkFileSneakerPerformance2() throws Exception { | |
| 165 Path fname = Path.create("dir3/file8"); | |
| 166 hgRepo.getManifest().getFileRevision(2, fname); | |
| 167 // ManifestRevision mr = new ManifestRevision(null, null); | |
| 168 // hgRepo.getManifest().walk(2, 2, mr); | |
| 169 } | |
| 170 | |
| 129 | 171 |
| 130 private void testRevert() throws Exception { | 172 private void testRevert() throws Exception { |
| 131 HgRevertCommand cmd = new HgRevertCommand(hgRepo); | 173 HgRevertCommand cmd = new HgRevertCommand(hgRepo); |
| 132 cmd.file(Path.create("a.txt")).execute(); | 174 cmd.file(Path.create("a.txt")).execute(); |
| 133 } | 175 } |
