git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Tay Ray Chuan <rctay89@gmail.com>
To: "Git Mailing List" <git@vger.kernel.org>
Cc: "Shawn O. Pearce" <spearce@spearce.org>
Subject: [RFC/PATCH 2/3] xdiff/xprepare: skip classification
Date: Tue, 12 Jul 2011 14:10:26 +0800	[thread overview]
Message-ID: <1310451027-15148-3-git-send-email-rctay89@gmail.com> (raw)
In-Reply-To: <1310451027-15148-2-git-send-email-rctay89@gmail.com>

xdiff performs "classification" of records (xdl_classify_record()),
replacing hashes (xrecord_t.ha) with a unique identifier of the
record/line and building a hash table (xrecord_t.rhash) of records. This
is then used to "cleanup" records (xdl_cleanup_records()).

We don't need any of that in histogram diff, so we omit calls to these
functions. We also skip allocating memory to the hash table, rhash, as
it is no longer used.

This gives us a small boost in performance.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 xdiff/xprepare.c |   24 ++++++++++++++++--------
 1 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
index 0f571db..7556538 100644
--- a/xdiff/xprepare.c
+++ b/xdiff/xprepare.c
@@ -154,11 +154,15 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
 	if (!(recs = (xrecord_t **) xdl_malloc(narec * sizeof(xrecord_t *))))
 		goto abort;
 
-	hbits = xdl_hashbits((unsigned int) narec);
-	hsize = 1 << hbits;
-	if (!(rhash = (xrecord_t **) xdl_malloc(hsize * sizeof(xrecord_t *))))
-		goto abort;
-	memset(rhash, 0, hsize * sizeof(xrecord_t *));
+	if (xpp->flags & XDF_HISTOGRAM_DIFF)
+		hbits = hsize = 0;
+	else {
+		hbits = xdl_hashbits((unsigned int) narec);
+		hsize = 1 << hbits;
+		if (!(rhash = (xrecord_t **) xdl_malloc(hsize * sizeof(xrecord_t *))))
+			goto abort;
+		memset(rhash, 0, hsize * sizeof(xrecord_t *));
+	}
 
 	nrec = 0;
 	if ((cur = blk = xdl_mmfile_first(mf, &bsize)) != NULL) {
@@ -183,7 +187,8 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
 			crec->ha = hav;
 			recs[nrec++] = crec;
 
-			if (xdl_classify_record(cf, rhash, hbits, crec) < 0)
+			if (!(xpp->flags & XDF_HISTOGRAM_DIFF) &&
+				xdl_classify_record(cf, rhash, hbits, crec) < 0)
 				goto abort;
 		}
 	}
@@ -240,7 +245,8 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 	enl1 = xdl_guess_lines(mf1) + 1;
 	enl2 = xdl_guess_lines(mf2) + 1;
 
-	if (xdl_init_classifier(&cf, enl1 + enl2 + 1, xpp->flags) < 0) {
+	if (!(xpp->flags & XDF_HISTOGRAM_DIFF) &&
+		xdl_init_classifier(&cf, enl1 + enl2 + 1, xpp->flags) < 0) {
 
 		return -1;
 	}
@@ -257,9 +263,11 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 		return -1;
 	}
 
-	xdl_free_classifier(&cf);
+	if (!(xpp->flags & XDF_HISTOGRAM_DIFF))
+		xdl_free_classifier(&cf);
 
 	if (!(xpp->flags & XDF_PATIENCE_DIFF) &&
+			!(xpp->flags & XDF_HISTOGRAM_DIFF) &&
 			xdl_optimize_ctxs(&xe->xdf1, &xe->xdf2) < 0) {
 
 		xdl_free_ctx(&xe->xdf2);
-- 
1.7.3.4.681.gb718e

  reply	other threads:[~2011-07-12  6:10 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-12  6:10 [RFC/PATCH 0/3] teach --histogram to diff Tay Ray Chuan
2011-07-12  6:10 ` [RFC/PATCH 1/3] " Tay Ray Chuan
2011-07-12  6:10   ` Tay Ray Chuan [this message]
2011-07-12  6:10     ` [RFC/PATCH 3/3] xdiff/xprepare: use a smaller sample size for histogram diff Tay Ray Chuan
2011-07-12 19:56   ` [RFC/PATCH 1/3] teach --histogram to diff Junio C Hamano
2011-07-13 16:36     ` Tay Ray Chuan
2011-07-12 14:19 ` [RFC/PATCH 0/3] " Shawn Pearce
2011-07-12 17:43   ` Junio C Hamano
2011-07-13 16:35     ` Tay Ray Chuan
2011-07-13 16:34   ` Tay Ray Chuan
2011-08-01  3:16 ` [PATCH v2 0/8] " Tay Ray Chuan
2011-08-01  3:16   ` [PATCH v2 1/8] xdiff/xprepare: use memset() Tay Ray Chuan
2011-08-01  3:16     ` [PATCH v2 2/8] do away with xdl_mmfile_next() Tay Ray Chuan
2011-08-01  3:16       ` [PATCH v2 3/8] xdiff/xprepare: refactor abort cleanups Tay Ray Chuan
2011-08-01  3:16         ` [PATCH v2 4/8] xdiff/xpatience: factor out fall-back-diff function Tay Ray Chuan
2011-08-01  3:16           ` [PATCH v2 5/8] t4033-diff-patience: factor out tests Tay Ray Chuan
2011-08-01  3:16             ` [PATCH v2 6/8] teach --histogram to diff Tay Ray Chuan
2011-08-01  3:16               ` [PATCH v2 7/8] xdiff/xprepare: skip classification Tay Ray Chuan
2011-08-01  3:16                 ` [PATCH v2 8/8] xdiff/xprepare: use a smaller sample size for histogram diff Tay Ray Chuan
2011-08-01  4:20   ` [PATCH 0/4] changes for rc/histogram-diff in 'next' Tay Ray Chuan
2011-08-01  4:20     ` [PATCH 1/4] xdiff: do away with xdl_mmfile_next() Tay Ray Chuan
2011-08-01  4:20       ` [PATCH 2/4] xdiff/xhistogram: rework handling of recursed results Tay Ray Chuan
2011-08-01  4:20         ` [PATCH 3/4] xdiff/xhistogram: rely on xdl_trim_ends() Tay Ray Chuan
2011-08-01  4:20           ` [PATCH 4/4] xdiff/xhistogram: drop need for additional variable Tay Ray Chuan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1310451027-15148-3-git-send-email-rctay89@gmail.com \
    --to=rctay89@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).