Skip to content

Commit

Permalink
fsmonitor: log invocation of FSMonitor hook to trace2
Browse files Browse the repository at this point in the history
Let's measure the time taken to request and receive FSMonitor data
via the hook API and the size of the response.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
jeffhostetler authored and gitster committed Feb 17, 2021
1 parent 15268d1 commit 940b94f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
29 changes: 28 additions & 1 deletion fsmonitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate)
static int query_fsmonitor(int version, const char *last_update, struct strbuf *query_result)
{
struct child_process cp = CHILD_PROCESS_INIT;
int result;

if (!core_fsmonitor)
return -1;
Expand All @@ -152,7 +153,33 @@ static int query_fsmonitor(int version, const char *last_update, struct strbuf *
cp.use_shell = 1;
cp.dir = get_git_work_tree();

return capture_command(&cp, query_result, 1024);
trace2_region_enter("fsm_hook", "query", NULL);

result = capture_command(&cp, query_result, 1024);

if (result)
trace2_data_intmax("fsm_hook", NULL, "query/failed", result);
else {
trace2_data_intmax("fsm_hook", NULL, "query/response-length",
query_result->len);

if (fsmonitor_is_trivial_response(query_result))
trace2_data_intmax("fsm_hook", NULL,
"query/trivial-response", 1);
}

trace2_region_leave("fsm_hook", "query", NULL);

return result;
}

int fsmonitor_is_trivial_response(const struct strbuf *query_result)
{
static char trivial_response[3] = { '\0', '/', '\0' };
int is_trivial = !memcmp(trivial_response,
&query_result->buf[query_result->len - 3], 3);

return is_trivial;
}

static void fsmonitor_refresh_callback(struct index_state *istate, const char *name)
Expand Down
5 changes: 5 additions & 0 deletions fsmonitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ void tweak_fsmonitor(struct index_state *istate);
*/
void refresh_fsmonitor(struct index_state *istate);

/*
* Does the received result contain the "trivial" response?
*/
int fsmonitor_is_trivial_response(const struct strbuf *query_result);

/*
* Set the given cache entries CE_FSMONITOR_VALID bit. This should be
* called any time the cache entry has been updated to reflect the
Expand Down

0 comments on commit 940b94f

Please sign in to comment.