diff options
author | Karel Zak <kzak@redhat.com> | 2011-02-04 22:44:31 +0100 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2011-03-10 11:48:33 -0800 |
commit | b0006b6ea2357572637b0c7946dfd074cfe18178 (patch) | |
tree | fcf19381097dc453c1dfe64ea5431d02b34e8539 /notmuch-new.c | |
parent | 2d6718b837b11b48d6b6ce1ae3f863591d5b651a (diff) |
new: read db_files and db_subdirs only if mtime changed
The db_files and db_subdirs are unnecessary for unchanged directories.
maildir with 10000 e-mails:
old version:
$ time ./notmuch new
No new mail.
real 0m0.053s
user 0m0.028s
sys 0m0.026s
new version:
$ time ./notmuch new
No new mail.
real 0m0.032s
user 0m0.009s
sys 0m0.023s
Signed-off-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Austin Clements <amdragon@mit.edu>
Looks good (faster than, but provably equivalent to the original code!
notmuch_directory_get_child_* are side-effect free,
db_files/db_subdirs aren't used between where they were set in the old
code and where they are set in the new code, and db_files/db_subdirs
are initialized to NULL when declared).
Another timing data point:
Old code: ./notmuch new 0.77s user 0.28s system 99% cpu 1.051 total
New code: ./notmuch new 0.09s user 0.27s system 98% cpu 0.368 total
Diffstat (limited to 'notmuch-new.c')
-rw-r--r-- | notmuch-new.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/notmuch-new.c b/notmuch-new.c index 941f9d61..31d45532 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -247,15 +247,7 @@ add_files_recursive (notmuch_database_t *notmuch, directory = notmuch_database_get_directory (notmuch, path); db_mtime = notmuch_directory_get_mtime (directory); - if (db_mtime == 0) { - new_directory = TRUE; - db_files = NULL; - db_subdirs = NULL; - } else { - new_directory = FALSE; - db_files = notmuch_directory_get_child_files (directory); - db_subdirs = notmuch_directory_get_child_directories (directory); - } + new_directory = db_mtime ? FALSE : TRUE; /* If the database knows about this directory, then we sort based * on strcmp to match the database sorting. Otherwise, we can do @@ -328,6 +320,11 @@ add_files_recursive (notmuch_database_t *notmuch, if (fs_mtime == db_mtime) goto DONE; + if (!new_directory) { + db_files = notmuch_directory_get_child_files (directory); + db_subdirs = notmuch_directory_get_child_directories (directory); + } + /* Pass 2: Scan for new files, removed files, and removed directories. */ for (i = 0; i < num_fs_entries; i++) { |