742 Commits

Author SHA1 Message Date
Jeff Sharkey
a27a3e8ad7 Introduce FileRotator.
Utility that rotates files over time, similar to logrotate. There is
a single "active" file, which is periodically rotated into historical
files, and eventually deleted entirely. Files are stored under a
specific directory with a well-known prefix.

Bug: 5386531
Change-Id: I29f821a881247e50ce0f6f73b20bbd020db39e43
2012-01-13 15:27:28 -08:00
Jeff Brown
986f00faf4 Merge "Rewrite SQLite database wrappers." 2012-01-12 15:03:26 -08:00
Jeff Brown
156936975d Merge "Fix indentation and whitespace." 2012-01-12 14:59:30 -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
3f11f302c7 Fix indentation and whitespace.
Change-Id: Iccb954fb77f21b230eecb3f06328e11b14611f17
2012-01-12 14:37:58 -08:00
Jeff Brown
5a05c23f3d Clean up database tests a little bit.
Change-Id: Ib05c699bf59187cb51627b5f352c2a15ad2c28bb
2012-01-12 14:37:57 -08:00
Xia Wang
4acb784630 am 87badc20: am 4ac4ab4e: Merge "Remove sleep from test acitivity to avoid ANR when key event is injected bug#: 5737922" into ics-mr1
* commit '87badc20c7d5462ee27f13adf50acaf6a3232884':
  Remove sleep from test acitivity to avoid ANR when key event is injected bug#: 5737922
2012-01-11 17:57:16 -08:00
Ying Wang
24162fc52c Build all test apks as raw resource in FrameworksCoreTests.
Bug: 5848975
Change-Id: I395013ded1c29e0914f72e03d0abd60bb4a7973a
2012-01-10 15:12:10 -08:00
Fabrice Di Meglio
4c1e00a8c2 Add textDirection="locale"
- also fix and update unit tests
- see bug #5242821

Change-Id: I29e029bab8ade336a430f9a2a5073caaf11b8dda
2012-01-06 11:29:18 -08:00
Jesse Wilson
52cd299eef Move the frameworks/base hostname verifier into libcore. Part 2/2
Bug: http://b/5619726
Change-Id: I165eb3befcef104ff56ffb466c87c60b632f3194
2011-12-27 19:00:56 -05:00
Xia Wang
8017794091 Remove sleep from test acitivity to avoid ANR when key event is injected
bug#: 5737922

Change-Id: I7871713c5000d122e63127b30d0151b8f5a29bcf
2011-12-19 17:20:04 -08:00
Irfan Sheriff
cdc077c9dd Fix configured network status
For a connected network, keep status as CURRENT. For a network,
that is disconnected it should be ENABLED. A disabled network
will have the status as DISABLED

Also, add a unit test to ensure there is only one CURRENT network
that is connected

Change-Id: Iaa4a7124a0c372a8f6df3d846ae8c15d9b29cf13
2011-12-12 16:47:02 -08:00
Xia Wang
1fd291144c am 96f660f4: am e63d67ef: Merge "Add extra 2 minute for wifi to shutdown" into ics-mr1
* commit '96f660f4a8b99ff387e17474f2574e4e284ceeb8':
  Add extra 2 minute for wifi to shutdown
2011-12-05 16:32:59 -08:00
Xia Wang
e63d67eff7 Merge "Add extra 2 minute for wifi to shutdown" into ics-mr1 2011-12-05 15:52:34 -08:00
Xia Wang
10a3e8fae8 Add extra 2 minute for wifi to shutdown
Change-Id: I3cf2fbf5de8b96b75d5e460e4ad822a1947ff6e7
2011-12-05 12:22:47 -08:00
Svetoslav Ganov
786e54dd13 Fixing the build
Change-Id: I125956773dd364b14f8d328e625df3c852001dbf
2011-11-30 19:36:18 -08:00
Svetoslav Ganov
f3b4f3163b resolved conflicts for merge of 26f7a81f to master
Change-Id: I6bf5fd7c0de7945cef84602dbe3a7bbed587700f
2011-11-30 18:34:56 -08:00
Svetoslav Ganov
d116d7c78a Fixing memory leaks in the accessiiblity layer.
1. AccessibilityInteractionConnections were removed from the
   AccessiiblityManagerService but their DeathRecipents were
   not unregistered, thus every removed interaction connection
   was essentially leaking. Such connection is registered in
   the system for every ViewRootImpl when accessiiblity is
   enabled and inregistered when disabled.

2. Every AccessibilityEvent and AccessiilbityEventInfo obtained
   from a widnow content querying accessibility service had a
   handle to a binder proxy over which to make queries. Hoewever,
   holding a proxy to a remote binder prevents the latter from
   being garbage collected. Therefore, now the events and infos
   have a connection id insteand and the hindden singleton
   AccessiiblityInteaction client via which queries are made
   has a registry with the connections. This class looks up
   the connection given its id before making an IPC. Now the
   connection is stored in one place and when an accessibility
   service is disconnected the system sets the connection to
   null so the binder object in the system process can be GCed.
   Note that before this change a bad implemented accessibility
   service could cache events or infos causing a leak in the
   system process. This should never happen.

3. SparseArray was not clearing the reference to the last moved
   element while garbage collecting thus causing a leak.

bug:5664337

Change-Id: Id397f614b026d43bd7b57bb7f8186bca5cdfcff9
2011-11-29 18:51:30 -08:00
Xia Wang
462a9da4c3 am 4f5434f3: am e5715521: am 2d9f4620: Fix build
* commit '4f5434f3a3ce51d7d6caf463e5571bb686e2bdd1':
  Fix build
2011-11-28 16:59:20 -08:00
Xia Wang
e571552123 am 2d9f4620: Fix build
* commit '2d9f4620625405b916aa27177a6b5f82f8e5b15d':
  Fix build
2011-11-28 16:53:50 -08:00
Xia Wang
2d9f462062 Fix build
Change-Id: I465d85e4783763f311ed6ec0a09c1edde9712405
2011-11-28 16:49:06 -08:00
Xia Wang
7480255799 am 6c509ef0: am da822367: am 25261f59: Merge "Increase time between wifi stop and wifi start: set to 2 minutes http://b/issue?id=5629901" into ics-mr0
* commit '6c509ef0bad761feecfd94b66d532ae05b450317':
  Increase time between wifi stop and wifi start: set to 2 minutes http://b/issue?id=5629901
2011-11-28 16:07:13 -08:00
Xia Wang
da82236788 am 25261f59: Merge "Increase time between wifi stop and wifi start: set to 2 minutes http://b/issue?id=5629901" into ics-mr0
* commit '25261f59af0d902f239e541b735f7dc31e714b07':
  Increase time between wifi stop and wifi start: set to 2 minutes http://b/issue?id=5629901
2011-11-28 16:02:44 -08:00
Eric Rowe
866103c00d am 70a1ee38: am 500afb87: Merge "Fix SCO start stop tests." into ics-mr1
* commit '70a1ee38b24a7c8dfc789db024bdf54f277ddba3':
  Fix SCO start stop tests.
2011-11-28 14:28:35 -08:00
Eric Rowe
fca8e9d919 Fix SCO start stop tests.
Change-Id: Idf292bc244a494e2ffb11359e83c0d072907ea3b
Bug-id: http://b/5644683
2011-11-22 19:16:50 -08:00
Xia Wang
a4c2caac05 Increase time between wifi stop and wifi start: set to 2 minutes
http://b/issue?id=5629901

Change on state validation:
  - When network state is broadcast in other network information,
    the test activity will record the state change which cause false
    alarm in the test.

Change-Id: I8bd1e8c04ab97116f3a02ccc5543f34a7e651cda
2011-11-21 21:22:10 -08:00
Tsu Chiang Chuang
8f62946310 am 06e4a400: am b3f2890a: am 047c4de2: Merge "Adding mobile microbenchmark tests." into ics-mr0
* commit '06e4a40017f1af75ec58d9d942ef0c4ddad20fd2':
  Adding mobile microbenchmark tests.
2011-11-15 13:07:26 -08:00
Jeff Sharkey
5898991075 am bc03c74c: am d968670d: Merge "Conservatively trim data usage stats." into ics-mr1
* commit 'bc03c74c485669695805944a655795a6f9890956':
  Conservatively trim data usage stats.
2011-11-15 11:30:34 -08:00
Tsu Chiang Chuang
b3f2890a8a am 047c4de2: Merge "Adding mobile microbenchmark tests." into ics-mr0
* commit '047c4de2c548960fff428a92099003593cede5f8':
  Adding mobile microbenchmark tests.
2011-11-15 11:10:44 -08:00
Jeff Sharkey
d968670d83 Merge "Conservatively trim data usage stats." into ics-mr1 2011-11-14 23:37:17 -08:00
Jeff Sharkey
7ee8658453 Conservatively trim data usage stats.
Instead of trusting NTP time alone, use the most-conservative of
system clock and NTP.

Bug: 5584564
Change-Id: I5dd87fc009959b1cf0a7d660e385a0b1a8be238b
2011-11-14 20:11:38 -08:00
Tsu Chiang Chuang
d5897dc798 fix for build breakage.
Change-Id: Ie324e46a79923813edd2e5e0c34ede79e6ee3eea
2011-11-14 15:46:16 -08:00
Tsu Chiang Chuang
212efacb84 Adding mobile microbenchmark tests.
Change-Id: Ifcd67b0265045778965aeff8e213c3929da02c3d
2011-11-10 10:21:39 -08:00
Tsu Chiang Chuang
287353a78e Adding mobile microbenchmark tests.
Change-Id: Ifcd67b0265045778965aeff8e213c3929da02c3d
2011-11-10 10:13:14 -08:00
Tsu Chiang Chuang
7746a8ff36 Merge "Adding mobile microbenchmark tests." 2011-11-10 08:16:04 -08:00
Jeff Sharkey
c592a57f3f am 489b4312: am 4c48d2ff: Merge "Make operation counts monotonically increase." into ics-mr1
* commit '489b431273500db81d35ed43440915187c238f92':
  Make operation counts monotonically increase.
2011-11-09 21:51:38 +00:00
Jeff Sharkey
4abb1b8ef6 Make operation counts monotonically increase.
Bug: 5585704
Change-Id: I5247a68acdb209a4ef0f5aac18944595c295e6ca
2011-11-08 17:35:28 -08:00
Tsu Chiang Chuang
70c78ee30e Adding mobile microbenchmark tests.
Change-Id: Ifcd67b0265045778965aeff8e213c3929da02c3d
2011-11-07 17:49:22 -08:00
Jeff Sharkey
4d81191dd3 am 808ee95d: Merge "Correct proc file reader, optimizations." into ics-mr1
* commit '808ee95dd4244da6ae767d3ddd003ed7b48937d0':
  Correct proc file reader, optimizations.
2011-11-03 07:36:03 +00:00
Jeff Sharkey
163e6443f2 Correct proc file reader, optimizations.
Moved away from BufferedReader, which only reads the first 8KB of
some proc files because it aggresively fills its buffer.  Optimized
proc parsing, now double the speed.  Tests to cover.

Log when NetworkStats counters roll backwards when subtracting, and
optimizations around findIndex().  When system removes UID, also
remove from last stats snapshot to avoid xt counters from rolling
backwards.

Bug: 5472949, 5458380
Change-Id: I07c08fe5233156fac2b84450f6291868bf9bfaf2
2011-11-02 15:14:11 -07:00
Jesse Wilson
0f28af209a Interpret '+' as a space char in the URL query params.
This changes Uri.decode() to use libcore's implementation
of the same behavior.

Bug: http://code.google.com/p/android/issues/detail?id=21064
Change-Id: If81005492b12d3aaecc745471e0a28679544a391
2011-10-28 18:31:52 -04:00
Svetoslav Ganov
021078554b Adding APIs to enable reporting virtual view hierarchies to accessibility serivces.
Added an interface that is the contract for a client to expose a virtual
view hierarchy to accessibility services. Clients impement this interface
and set it in the View that is the root of the virtual sub-tree. Adding
this finctionality via compostion as opposed to inheritance enables apps
to maintain backwards compatibility by setting the accessibility virtual
hierarchy provider on the View only if the API version is high enough.

bug:5382859

Change-Id: I7e3927b71a5517943c6cb071be2e87fba23132bf
2011-10-21 11:45:44 -07:00
Steve Block
136b1637f8 Fix use of WebView.loadData() to avoid passing invalid encoding
No change in behavior, as invalid encodings have always been ignored.

Bug: 5125738
Change-Id: I23f21ca65a6b14501c74dc2189a55643f1e33c33
2011-10-17 15:11:33 +01:00
Jeff Brown
c755ae3b58 Use MatrixCursor instead of ArrayListCursor.
ArrayListCursor is deprecated, and a duplicate private copy of it
is doubly so.

Delete some tests that are duplicated in the CTS package.

Change-Id: Ib5837b12e39dadba57595906ad621b1feb0d2c0d
2011-10-13 14:24:28 -07:00
Jeff Sharkey
1059c3c30a Move battery stats to xt_qtaguid for data stats.
Replace TrafficStats calls by reading values from xt_qtaguid kernel
module. To keep BatteryStatsImpl changes lightweight, cache recently
parsed stats. Tracks mobile ifaces from ConnectivityService.

Refactor xt_qtaguid parsing into factory outside of NMS. Add stats
grouping based on UID, and total based on limiting filters like iface
prefix and UID.

Bug: 4902271
Change-Id: I533f116c434b77f93355bf95b839e7478528505b
2011-10-09 13:49:08 -07:00
Jeff Brown
270928bd4a Merge changes Idbfeb3cc,I03e8e2e7,Iff9eed78
* changes:
  Fix regression in CursorWindow.getString() Bug: 5332296
  Clean up CursorWindow lifetime. Bug: 5332296
  Fix regression in CursorWindow.copyStingToBuffer. Bug: 5332296
2011-10-07 15:08:24 -07:00
Jeff Brown
7ce745248d Clean up CursorWindow lifetime.
Bug: 5332296

Removed dead code in SQLiteCursor related to the use of a background
query thread.  This code could result in CursorWindows being modified
concurrently or used after free.  This code is broken, unused and
is just in the way.

Added comments to explain how CursorWindow ownership is
supposed to work for AbstractWindowedCursors.  (There are still cases
where cursor windows get dropped on the floor without being closed.
Those will be taken care of in a subsequent patch.)

Cleaned up SQLiteQuery.fillWindow to eliminate duplicate code and
remove bits that were only needed for background loading, like
returning -1.

Change-Id: I03e8e2e73ff0c11df76d63f57df4c5ada06ae1cb
2011-10-07 13:31:00 -07:00
Svetoslav Ganov
b6eca6e669 Accessibility test automation API not working.
1. Due to a previous change that disabled accessibility if not enabled
   and installed serivces are present the automation APIs stopped working
   since they use fake automation service that is not installed.

2. Added clean up of death recipients when binders die.

bug:5374662
bug:5239044

Change-Id: I1f3c8cd1d1c79753a4a64e2b8b2963025abb2939
2011-10-06 14:16:03 -07:00
Jeff Sharkey
905b5891d2 Track xtables summary, move tether stats, time.
Begin tracking xtables summary of data usage to compare with values
reported from /proc/net/dev.  Roll tethering directly into UID stats
to trigger UID stats persisting when crossing threshold.

Include xtables summary and authoritative time in samples.

Bug: 5373561, 5397882, 5381980
Change-Id: Ib7945522caadfbe0864fdf391582dc820f4f371e
2011-10-03 17:21:05 -07:00