1722 Commits

Author SHA1 Message Date
Jeff Brown
986f00faf4 Merge "Rewrite SQLite database wrappers." 2012-01-12 15:03:26 -08:00
Jeff Brown
18c415c3c8 Merge "Clean up database tests a little bit." 2012-01-12 14:59:11 -08:00
Jeff Brown
e5360fbf3e Rewrite SQLite database wrappers.
The main theme of this change is encapsulation.  This change
preserves all existing functionality but the implementation
is now much cleaner.

Instead of a "database lock", access to the database is treated
as a resource acquisition problem.  If a thread's owns a database
connection, then it can access the database; otherwise, it must
acquire a database connection first, and potentially wait for other
threads to give up theirs.  The SQLiteConnectionPool encapsulates
the details of how connections are created, configured, acquired,
released and disposed.

One new feature is that SQLiteConnectionPool can make scheduling
decisions about which thread should next acquire a database
connection when there is contention among threads.  The factors
considered include wait queue ordering (fairness among peers),
whether the connection is needed for an interactive operation
(unfairness on behalf of the UI), and whether the primary connection
is needed or if any old connection will do.  Thus one goal of the
new SQLiteConnectionPool is to improve the utilization of
database connections.

To emulate some quirks of the old "database lock," we introduce
the concept of the primary database connection.  The primary
database connection is the one that is typically used to perform
write operations to the database.  When a thread holds the primary
database connection, it effectively prevents other threads from
modifying the database (although they can still read).  What's
more, those threads will block when they try to acquire the primary
connection, which provides the same kind of mutual exclusion
features that the old "database lock" had.  (In truth, we
probably don't need to be requiring use of the primary database
connection in as many places as we do now, but we can seek to refine
that behavior in future patches.)

Another significant change is that native sqlite3_stmt objects
(prepared statements) are fully encapsulated by the SQLiteConnection
object that owns them.  This ensures that the connection can
finalize (destroy) all extant statements that belong to a database
connection when the connection is closed.  (In the original code,
this was very complicated because the sqlite3_stmt objects were
managed by SQLiteCompiledSql objects which had different lifetime
from the original SQLiteDatabase that created them.  Worse, the
SQLiteCompiledSql finalizer method couldn't actually destroy the
sqlite3_stmt objects because it ran on the finalizer thread and
therefore could not guarantee that it could acquire the database
lock in order to do the work.  This resulted in some rather
tortured logic involving a list of pending finalizable statements
and a high change of deadlocks or leaks.)

Because sqlite3_stmt objects never escape the confines of the
SQLiteConnection that owns them, we can also greatly simplify
the design of the SQLiteProgram, SQLiteQuery and SQLiteStatement
objects.  They no longer have to wrangle a native sqlite3_stmt
object pointer and manage its lifecycle.  So now all they do
is hold bind arguments and provide a fancy API.

All of the JNI glue related to managing database connections
and performing transactions is now bound to SQLiteConnection
(rather than being scattered everywhere).  This makes sense because
SQLiteConnection owns the native sqlite3 object, so it is the
only class in the system that can interact with the native
SQLite database directly.  Encapsulation for the win.

One particularly tricky part of this change is managing the
ownership of SQLiteConnection objects.  At any given time,
a SQLiteConnection is either owned by a SQLiteConnectionPool
or by a SQLiteSession.  SQLiteConnections should never be leaked,
but we handle that case too (and yell about it with CloseGuard).

A SQLiteSession object is responsible for acquiring and releasing
a SQLiteConnection object on behalf of a single thread as needed.
For example, the session acquires a connection when a transaction
begins and releases it when finished.  If the session cannot
acquire a connection immediately, then the requested operation
blocks until a connection becomes available.

SQLiteSessions are thread-local.  A SQLiteDatabase assigns a
distinct session to each thread that performs database operations.
This is very very important.  First, it prevents two threads
from trying to use the same SQLiteConnection at the same time
(because two threads can't share the same session).
Second, it prevents a single thread from trying to acquire two
SQLiteConnections simultaneously from the same database (because
a single thread can't have two sessions for the same database which,
in addition to being greedy, could result in a deadlock).

There is strict layering between the various database objects,
objects at lower layers are not aware of objects at higher layers.
Moreover, objects at higher layers generally own objects at lower
layers and are responsible for ensuring they are properly disposed
when no longer needed (good for the environment).

API layer: SQLiteDatabase, SQLiteProgram, SQLiteQuery, SQLiteStatement.
Session layer: SQLiteSession.
Connection layer: SQLiteConnectionPool, SQLiteConnection.
Native layer: JNI glue.

By avoiding cyclic dependencies between layers, we make the
architecture much more intelligible, maintainable and robust.

Finally, this change adds a great deal of new debugging information.
It is now possible to view a list of the most recent database
operations including how long they took to run using
"adb shell dumpsys dbinfo".  (Because most of the interesting
work happens in SQLiteConnection, it is easy to add debugging
instrumentation to track all database operations in one place.)

Change-Id: Iffb4ce72d8bcf20b4e087d911da6aa84d2f15297
2012-01-12 14:56:18 -08:00
Jeff Brown
5a05c23f3d Clean up database tests a little bit.
Change-Id: Ib05c699bf59187cb51627b5f352c2a15ad2c28bb
2012-01-12 14:37:57 -08:00
Glenn Kasten
1c66547ba2 Merge "Use audio_format_t consistently" 2012-01-12 10:30:28 -08:00
Glenn Kasten
a9830d430a Merge "Fix build warnings" 2012-01-11 13:42:47 -08:00
Glenn Kasten
129e19cb37 Fix build warnings
Change-Id: I334e0a6e018bb1067c90e050cf3583c1057aacd9
2012-01-11 13:40:05 -08:00
Glenn Kasten
ed70933d45 Fix build warnings
Change-Id: Ic82cc86ac4b63b30ab66e1b8c7fd0e998fea590e
2012-01-11 07:27:41 -08:00
Steve Block
ec193dec4d Rename LOG_ASSERT to ALOG_ASSERT DO NOT MERGE
See https://android-git.corp.google.com/g/157519

Bug: 5449033
Change-Id: I8ceb2dba1b031a0fd68d15d146960d9ced62bbf3
2012-01-09 21:36:22 +00:00
Steve Block
3762c31172 Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/#/c/157220

Bug: 5449033
Change-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c
2012-01-08 13:19:13 +00:00
Steve Block
8564c8da81 Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/157065

Bug: 5449033
Change-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69
2012-01-06 10:07:54 +00:00
Fabrice Di Meglio
d4a69b4a1c Merge "Fix bug #5753006 Garbled Labels in Maps" 2012-01-05 15:18:52 -08:00
Steve Block
bd47cac4df Merge "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGE" 2012-01-05 14:07:02 -08:00
Fabrice Di Meglio
c726ff02c7 Merge "Fix bug #5822825 Paint.measureText (char[] text, int index, int count) cannot handle text more than 32K long" 2012-01-05 13:55:01 -08:00
Glenn Kasten
1c5a89d4af Use audio_format_t consistently
Was int, uint32_t, uint16_t, and uint8_t with 2-bit bitfield.
Also replace 0 by AUDIO_FORMAT_DEFAULT and replace 1 by
AUDIO_FORMAT_PCM_16_BIT.

Change-Id: Ia8804f53f1725669e368857d5bb2044917e17975
2012-01-05 13:34:54 -08:00
Fabrice Di Meglio
c511bee87c Fix bug #5753006 Garbled Labels in Maps
- it was a regression introduced into this CL: https://android-git.corp.google.com/g/#/c/154240/5
- basically needed to set the GlyphID encoding to the Skia Paint as we are now using glyphID resulting
from the Harfbuzz shaping
- also define GlyphID encoding as the default on the Paint class

Change-Id: Idb7c2c57ac67595425ce3be9421258962690fcdd
2012-01-05 13:30:54 -08:00
Fabrice Di Meglio
bd7cdc32eb Fix bug #5822825 Paint.measureText (char[] text, int index, int count) cannot handle text more than 32K long
- do not clear the smart pointer when the cache entry does not fit the cache size

Change-Id: I49f1aa1e70018bb7d6a8fb076d9269d0ec6a5d98
See: http://code.google.com/p/android/issues/detail?id=23337
2012-01-04 14:25:54 -08:00
Steve Block
6215d3ff4b Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/156801

Bug: 5449033
Change-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea
2012-01-04 20:05:49 +00:00
Steve Block
5baa3a62a9 Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/156016

Bug: 5449033
Change-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298
2012-01-03 22:38:27 +00:00
Irfan Sheriff
44b330dfb0 Add multi-interface support to native calls
Add the initial support for supporting seperate socket
connections on the p2p interface.

This is the initial change making primary interface connections
work alongside native support for p2p socket connection

Change-Id: I7619715ca75b10afd29af852279fe713331f75e0
2011-12-28 13:25:14 -08:00
Irfan Sheriff
1f09586953 clean up jni code
- Move all supplicant commands out of jni code in preparation for multi-socket
changes

- Also, clean up some function names to remove the explicit command

Change-Id: Id609ac7df0792fb85b52554d159f22064227c584
2011-12-28 13:18:07 -08:00
Nick Pelly
eca6d909f7 Merge "Rewrite NDEF parsing in Java, clean-up API." 2011-12-19 15:53:10 -08:00
Nick Pelly
a356bf1cd8 Rewrite NDEF parsing in Java, clean-up API.
o Lots of documentation fixes.
o Add NdefMessage(NdefRecord ... records) ctor
o Add NdefRecord.createMime()
o Add NdefRecord.createExternal()
o Add toString(), equals() and hashCode() implementations
o Deprecate NdefRecord(byte[]) and NdefRecord.toByteArray()
o Remove framework dependency on libnfc_ndef.so
o Remove NfcAdapter.getDefaultAdapter(), its been deprecated a while

next step:
o Attempt to move NdefMessage -> Intent conversion into NDEF, and
  make it CTS tested. This will ensure consistent NDEF -> Intent
  mapping across all Android devices.

Change-Id: Ifed4910caa9a1d6bad32dbf0a507ab22bca35e22
2011-12-19 15:48:35 -08:00
Glenn Kasten
25adf47477 Merge "Fix indentation and whitespace" 2011-12-14 17:35:36 -08:00
Glenn Kasten
fb2ab9efc3 Fix indentation and whitespace
Use git diff -w to verify.

Change-Id: Ib65be0a1ecf65d6cad516110604e3855bf68a638
2011-12-14 16:54:05 -08:00
Jaikumar Ganesh
ec62f12a94 Merge "Change the fd to be blocking for health profile." 2011-12-14 15:25:25 -08:00
Jaikumar Ganesh
82477b5e3c Change the fd to be blocking for health profile.
This is sync with the java IO stream APIs for the public APIs.

Change-Id: I5c7958687275d89257ac26f6a5abd08906327d02
2011-12-14 14:00:44 -08:00
Fabrice Di Meglio
a4d0770063 Fix bug #5674155 Segmentation issue for Thai
- force Harfbuzz to shape with the Thai font

Change-Id: I3830acae17385b050e2745fca277cf66af103099
2011-12-13 18:52:13 -08:00
Fabrice Di Meglio
65194adc9a Fix bug #5727213 Rendering issues with Bengali in Textview in IML63B
- force Harfbuzz to shape with the Bengali font
- also fix potential returned NULL value from SkTypeface::CreateFromFile(path)

Change-Id: I25be09d06e449b89bb4a62444e27f77e436b77ba
2011-12-13 18:14:49 -08:00
Fabrice Di Meglio
902a5b31c5 TextLayoutCache - fix diacritics composition
- normalize (with ICU) each BiDi run before shaping them

We are normalizing by "chuncks" and starting from the end of the string. Each "chunck"
is composed of the main code point and its associated diacritics.

Fix bug #5738435 TextLayoutCache should be able to take care about diacritics during shaping

Change-Id: I7288027a7fa8eafb8b9f38d449625be60214548a
2011-12-13 15:28:16 -08:00
Fabrice Di Meglio
b02d0ca555 Clean TextLayout code and remove RTL_USE_HARFBUZZ
- remove dependencies on ICU
- use TextLayouCache
- remove RTL_USE_HARFBUZZ define (we *are* using Harfbuzz now)
- also fix compilation warning

Change-Id: I022e11703438d07032e49e42724184f6bf16653e
2011-12-08 15:16:17 -08:00
Mathias Agopian
6779df2c28 Improve the VSYNC api a bit.
- add the ability to set the vsync delivery rate, when the rate is
set to N>1 (ie: receive every N vsync), SF process' is woken up for
all of vsync, but clients only see the every N events.

- add the concept of one-shot vsync events, with a call-back
to request the next one. currently the call-back is a binder IPC.

Change-Id: I09f71df0b0ba0d88ed997645e2e2497d553c9a1b
2011-12-06 22:43:10 -08:00
Romain Guy
9c4b79af22 Discard framebuffer rendering queues when discarding layers
Bug #5581817

Change-Id: Ie30700a29059d2ea60eb7bd3f8bd20ac48a149ab
2011-12-06 16:37:10 -08:00
Jeff Brown
731b939de8 Merge "Add a new class to receive vsync events." 2011-12-05 21:19:41 -08:00
Jeff Brown
a03bdedbdf Harfbuzz assumes the length of the item is at least 1.
If the length is zero, then it will clobber memory at index -1
into the log_clusters array.

Explicitly handle the cases where the entire string or a single
run might have a length of 0.

Bug: 5705479
Change-Id: Ibbd3a4edcb7e1cad09c34091b42bb315776ea558
2011-12-05 20:33:50 -08:00
Jeff Brown
738ef87eac Ensure log_clusters array is big enough.
Bug: 5714171
Change-Id: I886f1af8af177827f052e6406a192f2fad5c2cec
2011-12-05 20:24:21 -08:00
Jeff Brown
0a0a1248cf Add a new class to receive vsync events.
Change-Id: I4e384336d2813752a6d65fda6a77e86113a4510c
2011-12-05 11:16:07 -08:00
Dianne Hackborn
315e468763 am 803caff1: am 003c15d7: Merge "Fix issue #5614559: Registering surface error in..." into ics-mr1
* commit '803caff1dc307a8895e9f3560112f969fa3f6f39':
  Fix issue #5614559: Registering surface error in...
2011-12-05 10:45:16 -08:00
Dianne Hackborn
61566cc193 Fix issue #5614559: Registering surface error in...
...Background Replacement on Stingray

This is how I should have done it in the first place.  We get the
new surface from the window manager, and then just copy it in to
the constant Surface object we have for the holder.

Change-Id: I537a9e413829a18f689dfb46687014676b27156e
2011-12-03 11:16:49 -08:00
Jesse Hall
a6062265bd am 54cf27d7: am 6d90c1c6: Merge "Disable GLES20Canvas on emu w/o native GL" into ics-mr1
* commit '54cf27d7bbe27b1096f5e060c540f07dac07f1d0':
  Disable GLES20Canvas on emu w/o native GL
2011-12-02 17:57:09 -08:00
Fabrice Di Meglio
868d1bdf3c Merge "TextLayoutCache Fix compilation issue" 2011-12-02 16:21:14 -08:00
Fabrice Di Meglio
5448f0378e TextLayoutCache Fix compilation issue
- fix compilation after refactoring and when setting DEBUG_ADVANCES to 1

Change-Id: I8eef7e3c4550c505325459948d3c8eebbdd5215a
2011-12-02 15:56:19 -08:00
Jesse Hall
4406345cd6 Disable GLES20Canvas on emu w/o native GL
When the emulator is run without '-gpu on', GLES20 isn't supported,
so claiming GLES20Canvas is available will lead to catastrophic
failure. This change makes GLES20Canvas available when compiled in
and either not running on the emulator, or running on the emulator
with native GL acceleration enabled.

Change-Id: I89c944f9e3c9585224f5aa0877335ea48ea4a468
2011-12-02 09:35:42 -08:00
Jeff Brown
32cbc3855c Refactor InputQueue as InputEventReceiver.
This change simplifies the code associated with receiving input
events from input channels and makes it more robust.  It also
does a better job of ensuring that input events are properly
recycled (sometimes we dropped them on the floor).

This change also adds a sequence number to all events, which is
handy for determining whether we are looking at the same event or a
new one, particularly when events are recycled.

Change-Id: I4ebd88f73b5f77f3e150778cd550e7f91956aac2
2011-12-01 21:04:47 -08:00
Jeff Brown
4952dfd16a Ensure input events are processed in-order in the application.
As it turns out, it used to be possible for there to be multiple
input events simultaneously in flight in an application.  Although
it worked, it made it hard to reason about what was going on.
The problem was somewhat exacerbated by the introduction of a
queue of "InputEventMessage" objects as part of an earlier latency
optimization.

This change restores order from chaos and greatly simplifies the
invariants related to input event dispatch within the application.

Change-Id: I6de5fe61c1fe2ac3dd33edf770d949044df8a019
2011-12-01 14:13:48 -08:00
Fabrice Di Meglio
2e5e96e9f0 TextLayoutCache Code cleaning
- remove commented code
- fix log

Change-Id: I8495b923c9426e33e645fe85ea04005520716f4e
2011-11-30 20:08:16 -08:00
Fabrice Di Meglio
a90d65265f Merge "Improve TextLayoutCache logging" 2011-11-30 15:58:49 -08:00
Fabrice Di Meglio
56e6e54927 Improve TextLayoutCache logging
- make logs more consistent and readable
- add more logs information

Change-Id: Idfe5bb53e9163c4c07a9b4267b66b0d0e164a498
2011-11-30 15:48:18 -08:00
Wu-cheng Li
020975236c Fix compile error in android_hardware_Camera.cpp.
Change-Id: I06b187deaacb98e01813dbfb8d92a332bfc08fc4
2011-11-30 11:07:08 +08:00
Wu-cheng Li
b4123ef0f9 Merge "Add camera focus move callback." 2011-11-29 18:45:06 -08:00