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