Commit Graph

20 Commits

Author SHA1 Message Date
Marc Blank
d12f78d6ba Fix cursor-related errors:
1) Have CachedCursor implement CrossProcessCursor; still need to
  figure out how this ever worked
2) Close cursor used internally in findMailboxOfType

Bug: 4869024
Change-Id: Id20d37b7b83e133aa4d5fe9293a42ae217024f01
2011-06-22 10:59:06 -07:00
Marc Blank
6e418aa41a Improve EmailContent caching...
* Guarantee that up to 16 Account (with HostAuths), and Policy rows
  are always cached.  Also, 6 commonly used Mailboxes per Account
  (Inbox, Outbox, Drafts, Sent, Trash, and Search)
* Precache these rows when EmailProvider starts up
* Ensure that newly added, precachable rows are cached when created
* Clean up some inefficient/wrong caching code
* Fix a commonly called method in NotificationManager in which we
  load a single Mailbox row using selection vs withAppendedId
* Confirm that we don't read from the database in typical use and
  heavy message loading
* Add a special URI for finding mailbox by type (using the cache)
* Add special-case code for EmailContent.count(Account.CONTENT_URI)
  which is used in a number of places (including on the UI thread)
  and whose value is easily determined
* Add a special URI to get the default account id
* Confirm that all unit tests work

The goal here is to be able to load all Account, HostAuth, Policy,
and Mailbox objects (by id) without worrying about disk access.
There will still be a single disk read for uncommon Mailbox reads,
but this should be considered acceptable.

Change-Id: Ibc9aa7acc73185e360b0b6f3053b90a985e97210
TODO: Unit tests
2011-06-21 21:39:19 -07:00
Todd Kennedy
78849fd388 Lock cache puts while running tests
Change-Id: I04c88ee70f9d72252fd1c5114d560a28fcee1b56
2011-06-08 11:51:55 -07:00
Jesse Wilson
5d29dac806 React to LruCache.entryEvicted renamed to LruCache.entryRemoved
Change-Id: Iab20ce0386ee4dabc8490dbde5cd2208626c293c
http://b/3461302
2011-02-25 17:25:28 -08:00
Jesse Wilson
92ab6db38d Adopt LruCache in Email's ContentCache.
LruCache simply wraps LinkedHashMap for a better API.
Performance/hit rate should not be impacted.

Tracking bug: http://b/3184897

Change-Id: Icbac38d3cea5f8c522df7a883d8e74a8f3786b92
2011-02-11 14:02:28 -08:00
Jesse Wilson
3aee641aab Use a field rather than a superclass for ContentCache's cache.
This makes it easier for cache experiments to swap out the
LinkedHashMap for another cache.

http://b/3184897
Change-Id: Iacdb266e41f5a98efd9bb30bc09ff8fff5a0a5a9
2011-02-02 12:11:17 -08:00
Todd Kennedy
f1b510462f Fix ConcurrentAccessException in unit tests
The ContentCache is now an LRU cache. This means we must NOT access the cache
while using any iterator over the cache. In this case, we were calling get()
using an iterator of cache keys.

Change-Id: I2d1feabff7474b6f2a230b98f97df067ab7ccd9c
2011-01-31 17:39:44 -08:00
Marc Blank
a86265e8e5 am 9a09129d: am 1122e0f6: Merge "Remove cache statistics logging" into honeycomb
* commit '9a09129d0928712ad84a11027812ff0a63afed4a':
  Remove cache statistics logging
2011-01-28 16:22:14 -08:00
Marc Blank
f40294e1aa Remove cache statistics logging
* Use static final flag to control this
* Set flag to false for all commits

Bug: 3403725
Change-Id: I70c89aaf2f0b226206e505a14e9a8f1ed2ebb51a
2011-01-28 14:54:52 -08:00
Marc Blank
50c7d755a7 Make ContentCache LRU, rather than LRI
Bug: 3403111
Change-Id: I12993a8185db1bebe760f8bd1a8d22683bcdddc3
2011-01-28 12:37:09 -08:00
Marc Blank
788408dee4 Fix synchronization issue w/ closing CachedCursor
Bug: 3306031

Change-Id: I3000cf92c27e93b2df94799492fb9960a3d795dc
2010-12-26 11:45:30 -08:00
Marc Blank
d9b251d23b Properly return zero-count cursor from getMatrixCursor
Change-Id: I574528bf56b5a82ecbaab3d3501b26e7afb974ec
2010-12-20 13:58:11 -08:00
Marc Blank
4970392341 Synchronize properly with ContentCache; document synchronization
Bug: 3291682
Change-Id: I69c4a3b2ee62a41e6488b63deeb975e510a3f554
2010-12-16 10:39:08 -08:00
Marc Blank
74596b3799 Enable cache logging for debugging (w/ STOPSHIP)
Change-Id: I97493430f2aedcb070bc6d1789e47b562394eeb3
2010-12-15 14:06:54 -08:00
Marc Blank
c159d32be0 Never close underlying cursor if there are active users
Bug: 3249537
Bug: 3238216
Change-Id: I281f0b0d6319adaffd78fe8e4c3da6f126eb71da
2010-12-03 12:01:59 -08:00
Marc Blank
68dc380d62 Don't throw exception on moveToPosition in CachedCursor
* Just return false

Bug: 3240290
Change-Id: I808ca88c7897c573d19c2c2c92b179b4106a6dd3
2010-11-30 12:38:52 -08:00
Marc Blank
5835dceced Fix deadlock in ContentCache
* The situation is that putCursor() is called from a reading thread
  while invalidate() is called from a writing thread
* putCursor() must not hold the monitor lock on ContentCache while
  moving the underlying cursor to position 0

Bug: 3224203
Change-Id: I35b798dccf245c761dc79c39ced4fc8c0cfb9d78
2010-11-23 11:19:26 -08:00
Marc Blank
349055aad4 Allow ProviderTests to work with ContentCache
Bug: 3204331
Change-Id: I5399345c2b759fb34d3dc7c694eb0eef8d7de493
2010-11-17 10:19:30 -08:00
Andy Stadler
2199c7ddf5 Minor cleanups for ContentCache
* Change CounterMap to not extend HashMap
* Renamed remove() to subtract()
* Comment out a failing test
* Add a flag that prevents any objects from being cached

Change-Id: I74754133b505178e8b0166390f69509f006a3da2
2010-11-16 22:49:04 -08:00
Marc Blank
fab77f147f EmailProvider content caching
* In this CL, we cache individual rows, based on the CONTENT_PROJECTION
  defined for the most common queries (Account, HostAuth, Mailbox, and
  Message)
* Queries on individual rows (most often Class.restoreClassById()) will
  look to the cache first, rather than querying the database
* Queries on smaller projections will build MatrixCursor's from cached
  data
* Write-through caching updates the cache with changed columns
* Experiments with live data indicate that > 95% of queries that are
  cacheable (single row, no selection) can be retrieved from the cache,
  thereby saving a great deal of disk access.
* Timing experiments show that cache hits are > 40x faster than cache
  misses
* Unit tests for the various classes exist, with more coming

TODO
----
* More unit tests

Change-Id: I386a948a2f4cc02b6548d07d9b2fefd1e018a262
2010-11-16 08:58:05 -08:00