OSDN Git Service

Speed up ContentProvider.query() in simple case by ~30%
authorBrad Fitzpatrick <bradfitz@android.com>
Tue, 9 Mar 2010 21:18:02 +0000 (13:18 -0800)
committerBrad Fitzpatrick <bradfitz@android.com>
Tue, 9 Mar 2010 23:20:21 +0000 (15:20 -0800)
commit9ffdfa0c238fce3b85741d7f6828fd484cd8f195
treeb187b4936d33363f652e5d0cd5d1d2e9bfa577b7
parent33d1fdd6aa9ac9b59295756f151a49f2cf520691
Speed up ContentProvider.query() in simple case by ~30%

When query() uses bulkQuery() and we know we're going to need some
metadata right afterwards (number of rows and column index of _id, if
present), just asked for it in the initial binder transaction instead
of immediately fetching it again.

Also, this defers loading column names until the client asks for them.

This gets down the simpler (and very common) use cases of
ContentProvider.query() down to 3 binder calls:

   QUERY_TRANSACTION to android.content.ContentProvider$Transport
   GET_CURSOR_WINDOW_TRANSACTION to android.database.CursorToBulkCursorAdaptor
   CLOSE_TRANSACTION to android.database.CursorToBulkCursorAdaptor

More can still be done, but this is a good bite-sized first piece.

Change-Id: I7ad45949f53e0097ff18c2478d659f0f36929693
core/java/android/content/ContentProviderNative.java
core/java/android/database/BulkCursorToCursorAdaptor.java
core/java/android/database/CursorWindow.java
core/java/android/database/IBulkCursor.java
core/java/android/database/sqlite/SQLiteClosable.java