]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch: add trace2 instrumentation
authorErik Chen <erikchen@chromium.org>
Tue, 19 Nov 2019 23:02:09 +0000 (23:02 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 Nov 2019 01:06:40 +0000 (10:06 +0900)
Add trace2 regions to fetch-pack.c to better track time spent in the various
phases of a fetch:

    * parsing remote refs and finding a cutoff
    * marking local refs as complete
    * marking complete remote refs as common

All stages could potentially be slow for repositories with many refs.

Signed-off-by: Erik Chen <erikchen@chromium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-pack.c

index 0130b44112a063f3362f85c808a87f2ee25bf8ac..26b614780ac0e6bb35f0268510a7f370e51df6d7 100644 (file)
@@ -669,6 +669,7 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
 
        save_commit_buffer = 0;
 
+       trace2_region_enter("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL);
        for (ref = *refs; ref; ref = ref->next) {
                struct object *o;
 
@@ -679,7 +680,8 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
                if (!o)
                        continue;
 
-               /* We already have it -- which may mean that we were
+               /*
+                * We already have it -- which may mean that we were
                 * in sync with the other side at some time after
                 * that (it is OK if we guess wrong here).
                 */
@@ -689,7 +691,13 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
                                cutoff = commit->date;
                }
        }
+       trace2_region_leave("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL);
 
+       /*
+        * This block marks all local refs as COMPLETE, and then recursively marks all
+        * parents of those refs as COMPLETE.
+        */
+       trace2_region_enter("fetch-pack", "mark_complete_local_refs", NULL);
        if (!args->deepen) {
                for_each_ref(mark_complete_oid, NULL);
                for_each_cached_alternate(NULL, mark_alternate_complete);
@@ -697,11 +705,13 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
                if (cutoff)
                        mark_recent_complete_commits(args, cutoff);
        }
+       trace2_region_leave("fetch-pack", "mark_complete_local_refs", NULL);
 
        /*
         * Mark all complete remote refs as common refs.
         * Don't mark them common yet; the server has to be told so first.
         */
+       trace2_region_enter("fetch-pack", "mark_common_remote_refs", NULL);
        for (ref = *refs; ref; ref = ref->next) {
                struct object *o = deref_tag(the_repository,
                                             lookup_object(the_repository,
@@ -714,6 +724,7 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
                negotiator->known_common(negotiator,
                                         (struct commit *)o);
        }
+       trace2_region_leave("fetch-pack", "mark_common_remote_refs", NULL);
 
        save_commit_buffer = old_save_commit_buffer;
 }