Bug 441016 - Speed up text search by parallelizing
Execute text search processing in parallel, yielding a 3x-4x speedup.
Previously all files in a text search were processed serially.
This change moves the work into Jobs and uses a JobGroup to
parallelize the processing. The following additional changes
were needed:
* Some “global” state (e.g., FileCharSequenceProvider and
ReusableMatchAccess) that were previously accessed as class member
variables were changed to per-file or per-job instances.
* Access to FileSearchQuery.TextSearchResultCollector needed to be
synchronized. Its intermediate cache, which was previously an
ArrayList and assumed the last entry held the previous match from the
current file, was changed to a Map of IFile->ArrayList so that each
file’s results are segregated.
Converted spaces to tabs in the search() method to improve the Gerrit
code review experience.
Added minimal performance logging.
Change-Id: I3e36da89cd891acabb902e28415d8ddecea4df60
Signed-off-by: Terry Parker <tparker@google.com>
4 files changed