1772 Commits

Author SHA1 Message Date
Mathias Agopian
37c56b94c4 Merge changes Ib6b6da1d,I6d9a466a
* changes:
  improve SurfaceFlinger dumpsys
  hack up frame latency measurement
2012-01-24 19:22:08 -08:00
Fabrice Di Meglio
e414613bb8 Merge "Fix bug #5901103 all_source_project_146981_Android - Android ICS LQA Regression:FA, AR, HE and TH - Font Corruption" 2012-01-24 16:57:21 -08:00
Fabrice Di Meglio
3941a22bfd Fix bug #5901103 all_source_project_146981_Android - Android ICS LQA Regression:FA, AR, HE and TH - Font Corruption
- use the first char of the "run" instead of the "string" for the BaseGlyphCount

Change-Id: I647528ec912bb69655cf301bbc73b66dc1a6fc82
2012-01-24 16:44:00 -08:00
Jamie Gennis
b335fad470 hack up frame latency measurement
Change-Id: I6d9a466a23285304f0e229a5649815636ab5d6af
2012-01-24 15:41:50 -08:00
Romain Guy
1a54368b24 Merge "Add full support for Canvas.setDrawFilter()" 2012-01-23 17:10:42 -08:00
Romain Guy
5ff9df6582 Add full support for Canvas.setDrawFilter()
Change-Id: I0ad35d0603c4eeda469014803be14c1dcdde918c
2012-01-23 17:09:05 -08:00
Fabrice Di Meglio
22cfd047ab Merge "Fix bug #5846413 "phone" keyboard layout is broken on master" 2012-01-23 15:46:58 -08:00
Fabrice Di Meglio
bd901dee31 Fix bug #5846413 "phone" keyboard layout is broken on master
- was a subtle regression introduced when fixing bug #5753006
- as we are now using SkPaint::kGlyphID_TextEncoding (glyph encoding)
instead of SkPaint::kUTF16_TextEncoding (UTF16 encoding), we need to
force the UTF16 encoding in some cases that are NOT going thru
the TextLayoutCache / Harfbuzz shaping

- fix also breakText() the same way

- also clean some old comment

- Warning: depends also on a CL from Skia for having getBaseGlyphCount() "const"

Change-Id: I3d1fc87f070884876c679b33541f810fbfb5df3f
2012-01-23 13:34:08 -08:00
Glenn Kasten
0a204ed0f5 Use audio_format_t consistently, continued
Was int or uint32_t.

When AudioFlinger::format can't determine the correct format,
return INVALID rather than DEFAULT.

Init mFormat to INVALID rather than DEFAULT in the constructor.
Subclass constructors will set mFormat to the correct value.

Change-Id: I9b62640aa107d24d2d27925f5563d0d7407d1b73
2012-01-20 14:41:34 -08:00
Jeff Brown
1bf599a01e Merge "Initialize SQLite as part of the android runtime." 2012-01-20 14:07:59 -08:00
Jeff Brown
4b57553e69 Initialize SQLite as part of the android runtime.
This ensures that the SQLite library is always correctly configured
and initialized before other framework or application code has
a chance to use it.  This is important because initialization has
to happen at most once so we need to get it right and prevent races.

This change makes it possible to omit the SQLite auto-initialization
workaround from the SQLite library, potentially saving a few cycles
here and there.

Change-Id: Ifbed8685ee44aa1e9c0b391e233b0257fa738e4f
2012-01-20 13:08:03 -08:00
Glenn Kasten
c79e413911 Merge "Fix typos in string constants" 2012-01-20 12:16:06 -08:00
Glenn Kasten
7524a59252 Merge "Remove dead setRingerMode(mode, mask)" 2012-01-20 10:07:06 -08:00
Jeff Brown
46deab0a69 Merge "Clean up SQLiteDebug natives." 2012-01-19 19:54:05 -08:00
Jeff Brown
b815d0f80a Merge "Remove custom SQLITE_UNCLOSED error code." 2012-01-19 19:53:38 -08:00
Jeff Brown
254fba8960 Clean up SQLiteDebug natives.
In particular, ensure that the database is initialized.

Change-Id: Ifa69a9dfa9d008af79beadbd1a25e90d0d29e66c
2012-01-19 18:13:18 -08:00
Jeff Brown
48a4789686 Remove custom SQLITE_UNCLOSED error code.
This error code was introduced at some point to help track when
a database could not be closed because a statement was not finalized.
Now that the DB wrappers have been rewritten, it is technically no longer
poossible for this to happen, so we can remove this.

Change-Id: Ibbd55debbf390af436d6533aebff9726b1ff29e7
2012-01-19 16:39:03 -08:00
Jeff Brown
3e8d7cfd1e Merge "Clean up SQLite debugging code." 2012-01-19 14:05:39 -08:00
Jeff Brown
2a293b61cb Clean up SQLite debugging code.
Deleted a bunch of dead / useless code.
Raised number of logged operations in dumpsys dbinfo to 20.

Change-Id: I88344ff57a978f200c1f0172141d91e430caa1a9
2012-01-19 14:02:22 -08:00
Glenn Kasten
24c255acc6 Fix typos in string constants
These were copy/paste errors in code that was copied from AudioTrack.

Change-Id: I64a04d6026667884ddb1fefba67a71d69c691d62
2012-01-19 08:18:22 -08:00
Glenn Kasten
00db1f52b1 Rename JNI implementation to match Java method
android_media_AudioTrack_native_write renamed to
android_media_AudioTrack_native_write_byte, since the Java method name
is called native_write_byte.

Change-Id: I85ef092cf3f5a01d275fc4ef127b4b6d190139e8
2012-01-19 07:42:11 -08:00
Glenn Kasten
92ecdd6303 Merge "Fix incorrect includes of AudioTrack.h" 2012-01-19 06:10:37 -08:00
Glenn Kasten
e119bd1442 Merge "Replace run-time stream types by compile-time" 2012-01-19 06:08:12 -08:00
Romain Guy
671d6cf460 Full support for Canvas.drawPosText
This also introduces a small optimization when rendering text.

Change-Id: Iff620ac97bf878eaac406bccc6daa07052c93890
2012-01-18 18:00:12 -08:00
Glenn Kasten
a6dafea172 Fix incorrect includes of AudioTrack.h
Remove unnecessary includes of AudioTrack.h.
Use forward declaration of class names in preference to #include when possible.

Change-Id: I12982811fa75c2c7695d8bbfa595a7aaec047dc0
2012-01-18 16:06:47 -08:00
Glenn Kasten
ee7fea9f2f Remove dead setRingerMode(mode, mask)
Change-Id: Ia4cc8be8424a40b3dcb7ebd0264fdff4e5247f7f
2012-01-18 15:10:31 -08:00
Romain Guy
fb9ffe0260 Merge "First pass at implementing Canvas.drawPosText() in GL" 2012-01-17 17:40:24 -08:00
Romain Guy
eb9a5367e8 First pass at implementing Canvas.drawPosText() in GL
Change-Id: Ia3ac347e95d57eb86c63045156c8dbc0572b03cb
2012-01-17 17:39:26 -08:00
Eric Laurent
1be4afecb7 Merge "audio framework: manage stream volume per device" 2012-01-17 17:35:03 -08:00
Romain Guy
d33f97f196 Merge "Free optimization" 2012-01-17 17:33:15 -08:00
Romain Guy
d1d4bb7070 Free optimization
Using the TextLayoutCache with the GL renderer should help...

Change-Id: I73a19be040165212839e2a40d4183e998f9dfb7f
2012-01-17 17:31:27 -08:00
Glenn Kasten
29a0909c5f Replace run-time stream types by compile-time
Use the AUDIO_STREAM_* constants defined in <system/audio.h> instead of
dynamically looking up stream types from AudioManager.

Replace a series of "if" statements by a switch.

Change-Id: I6d015bc151c9ab97a02492e84c63298b1f6f31ac
2012-01-17 15:33:20 -08:00
Eric Laurent
9bc8358dda audio framework: manage stream volume per device
Improve volume management by keeping track of volume for each type
of device independently.
Volume for each stream (MUSIC, RINGTONE, VOICE_CALL...) is now maintained
per device.

The main changes are:
- AudioService now keeps tracks of stream volumes per device:
 volume indexes are kept in a HashMap < device , index>.
 active device is queried from policy manager when a volume change request
 is received
 initalization, mute and unmute happen on all device simultaneously
- Settings: suffixes is added to volume keys to store each device
volume independently.
- AudioSystem/AudioPolicyService/AudioPolicyInterface: added a device argument
to setStreamVolumeIndex() and getStreamVolumeIndex() to address each
device independently.
- AudioPolicyManagerBase: keep track of stream volumes for each device
and apply volume according to current device selection.

Change-Id: I61ef1c45caadca04d16363bca4140e0f81901b3f
2012-01-17 15:15:04 -08:00
Romain Guy
11d06a73df Merge "Fix text encoding when drawing with drawPosText in software" 2012-01-17 14:54:45 -08:00
Romain Guy
62b6eaa7f3 Fix text encoding when drawing with drawPosText in software
Change-Id: I0cd8ee526189c38c50953a1a08b50e0b31c55d8c
2012-01-17 14:53:26 -08:00
Fabrice Di Meglio
c7c09960ff Merge "Fix bug #5870701 Thai text can be clipped when there are more glyphs generated than the initial number of code points" 2012-01-17 11:51:22 -08:00
Glenn Kasten
fb6b5bdcea Merge "Use audio_mode_t consistently" 2012-01-17 11:32:53 -08:00
Glenn Kasten
cc767191cf Fix build for SDK on Mac
Change-Id: If99541e3537edbe3636e06b1766aa31d877a2fc8
2012-01-17 08:38:51 -08:00
Glenn Kasten
3c6b9cca79 Merge "Use audio_stream_type_t consistently" 2012-01-17 07:25:36 -08:00
Glenn Kasten
a7f6562065 Merge "Add android.os.Process.setThreadScheduler" 2012-01-17 07:20:47 -08:00
Fabrice Di Meglio
03e250aefa Fix bug #5870701 Thai text can be clipped when there are more glyphs generated than the initial number of code points
- compute total advances correctly by iterating on the advances array for up to mShaperItem.num_glyphs
- update unit tests

Change-Id: I00af68bef88702215e9222ed80dbffcc81df51a7
2012-01-13 19:49:46 -08:00
Kenny Root
fcbbaf1d83 resolved conflicts for merge of e80341c8 to master
Change-Id: I5d2150e20aebb6aba10caa391268c0fdbbf281ef
2012-01-13 13:39:28 -08:00
Kenny Root
2ddf6ea6dc Merge "Fix issue with selecting proper JNI libraries" into ics-mr1 2012-01-13 13:11:02 -08:00
Glenn Kasten
bc1d77b6cb Use audio_stream_type_t consistently
At native level it was a mixture of audio_stream_type_t, int, uint32_t,
and uint8_t.  Java is still int.  Also fixed a couple of hard-coded -1
instead of AUDIO_STREAM_DEFAULT, and in startToneCommand a hard-coded 0
instead of AUDIO_STREAM_VOICE_CALL.

Change-Id: Ia33bfd70edca8c2daec9052984b369cd8eee2a83
2012-01-13 10:20:14 -08:00
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
accb114e59 Use audio_mode_t consistently
It was int or uint32_t.
Also make getMode() const.

Change-Id: Ibe45aadbf413b9158e4dd17f2b3bcc6355288d37
2012-01-12 09:52:37 -08:00