Skip to content

Commit

Permalink
Merge pull request #964 from jeffhostetler/jeffhostetler/memihash_perf
Browse files Browse the repository at this point in the history
Jeffhostetler/memihash perf
  • Loading branch information
Git for Windows Build Agent committed Apr 12, 2017
2 parents 8827f70 + 64e84ee commit e6a1df2
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 0 deletions.
16 changes: 16 additions & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,9 @@ struct cache_entry {
unsigned int ce_flags;
unsigned int ce_namelen;
unsigned int index; /* for link extension */
unsigned int precompute_hash_state;
unsigned int precompute_hash_name;
unsigned int precompute_hash_dir;
struct object_id oid;
char name[FLEX_ARRAY]; /* more */
};
Expand Down Expand Up @@ -229,6 +232,19 @@ struct cache_entry {
#error "CE_EXTENDED_FLAGS out of range"
#endif

/*
* Bit set if preload-index precomputed the hash value(s)
* for this cache-entry.
*/
#define CE_PRECOMPUTE_HASH_STATE__SET (1 << 0)
/*
* Bit set if precompute-index also precomputed the hash value
* for the parent directory.
*/
#define CE_PRECOMPUTE_HASH_STATE__DIR (1 << 1)

void precompute_istate_hashes(struct cache_entry *ce);

/* Forward structure decls */
struct pathspec;
struct child_process;
Expand Down
2 changes: 2 additions & 0 deletions preload-index.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ static void *preload_thread(void *_data)
struct cache_entry *ce = *cep++;
struct stat st;

precompute_istate_hashes(ce);

if (ce_stage(ce))
continue;
if (S_ISGITLINK(ce->ce_mode))
Expand Down
3 changes: 3 additions & 0 deletions read-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ void rename_index_entry_at(struct index_state *istate, int nr, const char *new_n
copy_cache_entry(new, old);
new->ce_flags &= ~CE_HASHED;
new->ce_namelen = namelen;
new->precompute_hash_state = 0;
new->index = 0;
memcpy(new->name, new_name, namelen + 1);

Expand Down Expand Up @@ -614,6 +615,7 @@ static struct cache_entry *create_alias_ce(struct index_state *istate,
new = xcalloc(1, cache_entry_size(len));
memcpy(new->name, alias->name, len);
copy_cache_entry(new, ce);
new->precompute_hash_state = 0;
save_or_free_index_entry(istate, ce);
return new;
}
Expand Down Expand Up @@ -1446,6 +1448,7 @@ static struct cache_entry *cache_entry_from_ondisk(struct ondisk_cache_entry *on
ce->ce_stat_data.sd_size = get_be32(&ondisk->size);
ce->ce_flags = flags & ~CE_NAMEMASK;
ce->ce_namelen = len;
ce->precompute_hash_state = 0;
ce->index = 0;
hashcpy(ce->oid.hash, ondisk->sha1);
memcpy(ce->name, name, len);
Expand Down

0 comments on commit e6a1df2

Please sign in to comment.