20548 Commits

Author SHA1 Message Date
Jeff Brown
4a06c8008b Simplify Choreographer API.
Removed the listeners and schedule animation / draw methods.
Instead all requests are posted as one-shot callbacks, which is a
better match for how clients actually use the Choreographer.

Bug: 5721047
Change-Id: I113180b2713a300e4444d0d987f52b8157b7ac15
2012-02-15 15:06:01 -08:00
Jeff Brown
fef3d62b16 Merge "Add support for posting Runnables to the Choreographer." 2012-02-14 19:41:32 -08:00
Jeff Brown
472ea60685 Merge "Add a barrier mechanism to the MessageQueue." 2012-02-14 19:41:22 -08:00
Jeff Brown
968588573c Add support for posting Runnables to the Choreographer.
Also clean up the Choreographer so that it doesn't directly extend
Handler and so that it doesn't schedule animation or drawing unless
there are listeners or callbacks attached.

Bug: 5721047
Change-Id: I35350c8d41d4fa3f8c8c7bc43edd82e581b55a68
2012-02-14 19:36:12 -08:00
Jeff Brown
e799cb78b4 Add a barrier mechanism to the MessageQueue.
The synchronization barrier enables selectively blocking
execution of synchronous messages until the barrier is released.
Asynchronous messages may continue running in the meantime.

The barrier is intended to be used to implement more sophisticated
scheduling policies related to view hierarchy traversals.  While
traversals are pending, most messages posted to the message queue
must be held up.  This is to satisfy the invariant that traversals
will occur before subsequently posted messages are handled.

The exception to this rule are "asynchronous" messages that represent
external events or interrupts that come from other components such
as VSYNC pulses, input events or sensor events.  Because these messages
are typically delivered at arbitrary times, they are independent of
traversals or other typical synchronization boundaries.

Messages can now be flagged as asynchronous to indicate that they
are weakly ordered.

Bug: 5721047
Change-Id: I1446dcfbc896f33b48355adc28967ace8c8c9b9b
2012-02-14 19:27:15 -08:00
Svetoslav Ganov
b36a0ac970 Incorrect behavior of View clear focus v2.0.
The framework tries to have a focused view all the time. For
that purpose when a view's focus is cleared the focus is given
to the first focusable found from the top. The implementation
of this behavior was causing the following issues:

1. If the fist focusable View tries to clear its focus it
   was getting focus but the onFocusChange callbacks were not
   properly invoked. Specifically, the onFocusChange for
   gaining focus was called first and then the same
   callback for clearing focus. Note that the callback
   for clearing focus is called when the View is already
   focused.

2. If not the first focusable View tries to clear focus,
   the focus is given to another one but the callback
   for getting focus was called before the one for clearing,
   so client code may be mislead that there is more than
   one focused view at a time.

3. (Nit) The implementaion of clearFocus and unFocus in ViewGroup
   was calling the super implementaion when there is a
   focused child. Since there could be only one focused View,
   having a focused child means that the group is not focused
   and the call to the super implementation is not needed.

4. Added unit tests that verify the correct behavior, i.e.
   the focus of the first focused view cannot be cleared
   which means that no focus change callbacks are invoked.
   The callbacks should be called in expected order.
   Now the view focus clear precedes the view focus gain
   callback. However, in between is invoked the global
   focus change callback with the correct values. We may
   want to call that one after the View callbacks. If
   needed we can revisit this.

Change-Id: I8cfb141c948141703093cf6fa2037be60861cee0
2012-02-14 17:50:51 -08:00
Chris Craik
d658c024ea Merge "disable webkit paint pausing" 2012-02-14 15:56:08 -08:00
Amith Yamasani
dd29f8c4e3 Merge "Revert "Incorrect behavior of View clear focus."" 2012-02-14 15:52:17 -08:00
Gilles Debunne
626c316975 Display list invalidated on hint text change
Bug 5993119

Change-Id: I750e73cb5c26e2aaa2a88a80cf35c4d471c30403
2012-02-14 15:46:43 -08:00
Amith Yamasani
73eb97f628 Revert "Incorrect behavior of View clear focus."
This reverts commit c6fd88e213703a581fe4680259981f09ae0444f2
2012-02-14 15:45:15 -08:00
Chris Craik
644b7d95f0 disable webkit paint pausing
Temporary measure for investigating potentially related bug:5964385

Change-Id: I6eb0ba25991bdf7eab506b51a9eae71e9ddd436b
2012-02-14 15:29:39 -08:00
Fabrice Di Meglio
d7c845c39a Merge "Make textDirection API public" 2012-02-14 14:45:51 -08:00
Gilles Debunne
43db1d9c47 Merge "Minor typo fixes" 2012-02-14 14:41:15 -08:00
Teng-Hui Zhu
728f1ed5e3 Merge "Update the scale while updating the drawGL functor" 2012-02-14 12:51:19 -08:00
Teng-Hui Zhu
7e2346d51a Update the scale while updating the drawGL functor
bug:6008955

webkit change:
https://android-git.corp.google.com/g/#/c/165734/

Change-Id: I5ba7998a6b8f33b44582b0158ba966054aaad2a8
2012-02-14 11:29:52 -08:00
Chet Haase
bcca79acb1 Refactor animation code in new Draw() method into its own method.
Ongoing cleanup of View drawing code, continuation of drawChild() refactoring.

Change-Id: I6d7383bb858d39ced6917d559defe7713e53de38
2012-02-14 09:16:39 -08:00
Chet Haase
4212d3fc73 Merge "Refactor ViewGroup.drawChild() into View.draw()" 2012-02-14 06:20:16 -08:00
Jeff Brown
a9daa164a5 Merge "Fix possible races in vsync infrastructure." 2012-02-13 20:38:24 -08:00
Jeff Brown
58aedbc9be Fix possible races in vsync infrastructure.
Applications sometimes crashed on exit due to the display event
receiver pipe apparently being closed while still a member of the
Looper's epoll fd set.

This patch fixes a few different possible races related to
the display event receiver lifecycle.

1. The receiver used to play a little dance with the Looper,
registering and unregistering its callback after each vsync
request.  This code was a holdover from a time before the
surface flinger supported one-shot vsync requests, so we can
get rid of it and make things a lot simpler.

2. When the Choreographer is being accessed from outside the UI
thread, it needs to take great care that it does not touch
the display event receiver.  Bad things could happen if the receiver
is handling a vsync event on the Looper and the receiver is
disposed concurrently.

3. It was possible for the Choreographer to attempt to dispose
the receiver while handling a vsync message.  Now we defer disposing
the receiver for a little while, which is also nice because we
may be able to avoid disposing the receiver altogether if we find
that we need it again a little while later.

Bug: 5974105
Change-Id: I77a158f51b0b689af34d07aee4245b969e6260d6
2012-02-13 20:34:38 -08:00
Gilles Debunne
07ba2a2131 Minor typo fixes
Change-Id: I8cd9500cc50b7a484bf387e6a6a0c9b4ffb175a4
2012-02-13 18:13:44 -08:00
Romain Guy
ccdc6a6acc Merge "New debugging tool in adb shell dumpsys gfxinfo" 2012-02-13 18:03:44 -08:00
Romain Guy
a676ad7e34 New debugging tool in adb shell dumpsys gfxinfo
This tool lets you visualize the time it took, in ms, to:
- Build display lists ("Draw" phase)
- Process display lists ("Process" phase)
- Swap GL buffers ("Execute" phase)

To use this tool:
- adb shell setprop hwui.profile true
- adb shell dumpsys gfxinfo <process name>
- Copy the profile data and paste it in a spreadsheet
- Generate a graph (stacked graph) and enjoy

Change-Id: I7840c0ea0f153550425aa798e3ada2f357688cf5
2012-02-13 17:47:10 -08:00
Fabrice Di Meglio
e7beae3f4c Make textDirection API public
Change-Id: I2d5a0e3a990b9a5b78a3bbc8df7f655702743e4b
2012-02-13 17:21:05 -08:00
Philip Milne
94355ed44a Merge "New hooks to allow layouts to improve their performance by doing more caching" 2012-02-13 17:05:01 -08:00
Chet Haase
64a48c1d3d Refactor ViewGroup.drawChild() into View.draw()
Some of the ongoing and upcoming jank work involves having
Views optimize their rendering. For example, it would be more
efficient for native display lists to be able to redraw themselves with
updated transform/alpha properties than it would be to do it the
way we do now, which causes view hierarchy invalidation and display
list recreation.

In order to do this, we need to push more intelligence for view
rendering into the Views themselves, rather than the complicated
mechanism we have now of ViewGroup handling some View properties
(transforms and alpha) and the Views handling the rest of their
rendering.

The first step toward this is to take the current drawChild() method
and push it into a new, package-private method in View that does the
same thing.

Future checkins will refactor the code further, simplifying it and
eventually optimizing around view property changes.

Change-Id: Id44b94536fc3ff80b474db7ef06862f4f51eedce
2012-02-13 17:02:39 -08:00
Philip Milne
d7dd89095f New hooks to allow layouts to improve their performance by doing more caching
This change allows layouts to be notified of changes to LayoutParameters that have occurred
between layout operations.

If an assignment is made to the fields of LayoutParams instances that are already in use,
cachced data may become inconsistent with the new values. For complex layouts, like
GridLayout, in which the layout parameters define the structure of the layout, caching
could have caused  ArrayOutOfBoundsException to be raised without this change. This case is
rare in normal code as initialisation is typically performed once. Its nevertheless possible
and much more likely in environments like design tools where layout parametrs may be being
edited on the fly.

Prevent errors as follows (belt and braces):

1. Change javadoc to request that changes to the fields of LayoutParams be accompanied with
a call to View.setLayoutParams(). (This calls requestLayout() which was what the previous
javadoc advised.) Provide a (for now, private) hook for layouts with caches to receive notification
of such calls so they can invalidate any relevant internal state.

2. For GridLayout, we cannot clone layout parameters as traditional Java grids do without retaining
two complete copies because of the public getLayoutParameters() method on View. Retaining two
copies is wasteful on constrainted devices. Instead, we keep just one copy and compute a hashCode
for the critical fields of a GridLayout's layoutParams. The hashChode is checked it prior to all
layout operations; clearing the cache and logging a warning when changes are detected, so that
developers can fix their code to provide the call to setLayoutParams() as above.

Change-Id: I819ea65ec0ab82202e2f94fd5cd3ae2723c1a9a0
2012-02-13 16:55:57 -08:00
Mangesh Ghiware
7850783b73 Merge "Fix regression in default zoom setting" 2012-02-13 16:47:10 -08:00
Mangesh Ghiware
8d3836c11e Fix regression in default zoom setting
Bug: 6000309
Change-Id: I4255c847c0e7d2a5ab654014f6f4b5d32b5fdf67
2012-02-13 16:20:22 -08:00
Fabrice Di Meglio
7a29d84f01 Merge "Fix bug #5904777 GridLayout should be RTL aware" 2012-02-13 14:01:28 -08:00
Fabrice Di Meglio
47d248eb43 Fix bug #5904777 GridLayout should be RTL aware
- update also DEBUG mode for taking care about RTL
- one minor issue remaining: left alignment is not properly honored in RTL

Change-Id: I9a4c8413cb1189a032649472016994642418637b
2012-02-13 13:52:47 -08:00
Jeff Brown
072ec96a49 Implement batching of input events on the consumer side.
To support this feature, the input dispatcher now allows input
events to be acknowledged out-of-order.  As a result, the
consumer can choose to defer handling an input event from one
device (because it is building a big batch) while continuing
to handle input events from other devices.

The InputEventReceiver now sends a notification when a batch
is pending.  The ViewRoot handles this notification by scheduling
a draw on the next sync.  When the draw happens, the InputEventReceiver
is instructed to consume all pending batched input events, the
input event queue is fully processed (as much as possible),
and then the ViewRoot performs traversals as usual.

With these changes in place, the input dispatch latency is
consistently less than one frame as long as the application itself
isn't stalled.  Input events are delivered to the application
as soon as possible and are handled as soon as possible.  In practice,
it is no longer possible for an application to build up a huge
backlog of touch events.

This is part of a series of changes to improve input system pipelining.

Bug: 5963420

Change-Id: I42c01117eca78f12d66d49a736c1c122346ccd1d
2012-02-13 10:28:41 -08:00
Jeff Brown
d4762334f1 Merge "Process input events immediately when received." 2012-02-13 10:26:40 -08:00
Marc Blank
5a1f6fb407 Merge "Use &#39; for apostrophe in HTML encoding" 2012-02-13 10:20:38 -08:00
Marc Blank
f4832da16a Use &#39; for apostrophe in HTML encoding
* We were using &apos; which is not correct

Change-Id: I4872da7d5e19f18ecd570dbcaac295020d66681c
2012-02-13 10:11:50 -08:00
Mike Lockwood
efeba018bd EthernetDataTracker: Don't run DHCP or set network available until link is up
Previously we were starting DHCP as soon as the interface was added,
which is at boot on devices with builtin ethernet.

Signed-off-by: Mike Lockwood <lockwood@google.com>
2012-02-10 14:44:08 -08:00
Mike Lockwood
ce952c8e13 AudioManager: Add support for master mute
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 14:44:05 -08:00
Mike Lockwood
4767690f09 AudioManager: transparently convert volume settings for other streams to master volume if config_useMasterVolume is set.
This allows Music2 and other media apps to control master volume without changing their code

Bug: 5567694

Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 14:44:04 -08:00
Doug Zongker
d60ae7f668 store the hw addr in the extraInfo field of ethernet NetworkInfos 2012-02-10 14:44:03 -08:00
Amith Yamasani
f0451db422 Merge "Multi-user - wallpaper service" 2012-02-10 14:34:52 -08:00
Amith Yamasani
37ce3a8af6 Multi-user - wallpaper service
- Allow each user to have their own wallpaper (live or static).
- Migrate old wallpaper on upgrade.
- Update SystemBackupAgent to backup/restore from primary user's
  new wallpaper directory.

Reduce dependency on Binder.getOrigCallingUser() by passing the
userId for bindService.

Change-Id: I19c8c3296d3d2efa7f28f951d4b84407489e2166
2012-02-10 14:34:07 -08:00
Dianne Hackborn
16e19ce919 Merge "Clean up and expose LongSparseArray." 2012-02-10 13:07:54 -08:00
Dianne Hackborn
9c1d2980f2 Clean up and expose LongSparseArray.
Change-Id: I15ba98d65e790ba45391cc7714f60b6e7de6ebfc
2012-02-10 13:02:11 -08:00
Mike Lockwood
c067c9c373 Add support for disabling wallpaper service
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 12:52:46 -08:00
Mike Lockwood
cba928cef7 SystemServer: Add support for disabling AudioService and MountService
Using the same convention in system_init.cpp, you can disable these
services by setting system properties:

	system_init.startaudioservice=0
	system_init.startmountservice=0

Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 12:02:04 -08:00
Mike Lockwood
11ca31729c Merge changes Id747dc81,I3a74bd36,I2395527c,I86aeb066,Ic33d5766,I7bef7390,I4b797dd8,Id3622e9e,I28087c63,Ia1c6d909,I95a766dd,I6c0236c5,Ib71287f4,I4bcbefdc,I22a7cb8d,Ie24dbeaf,I7dbc4b45,I21d524ea,Iaa5bf14e,I7db766c3,I93fcaca2,I1eb72044,I05ffbe7c,Ifdfe2ff8,Ia8f767a2
* changes:
  Fix problems dispatching media button events on headless devices
  Add headless mode for running the framework without the surface flinger
  SettingsProvider: Allow overridding default value for Setttings.Secure.DEVICE_PROVISIONED
  Load lockscreen.disabled setting on database create as well as upgrade
  SystemUI: Log an error instead of throwing an exception if navigation bar is enabled in tablet UI
  SettingsProvider: Add support for overriding lockscreen.disabled default value
  Allow overriding default STAY_ON_WHILE_PLUGGED_IN setting value in an overlay
  Disable output processing when opening serial port.
  Update aidl for new Broker API.
  aidl: All flattenable types now must also be parcelable.
  Update aidl to new APIs.
  Suport RpcData as a parcelable type.
  Modified AIDL to support authentication
  Fix disconnect from wired ethernet issues.
  Fix PresenterClass by adding a _listener field
  add presenters to aidl.
  Add SerialPort.sendBreak()
  Generate fallthrough for unhandled actions in RPC methods.
  PhoneWindowManager: Disable boot progress dialog on headless builds
  Support custom flattenable types for RPC.
  SystemServer: Don't start A2DP service if audio is not enabled
  Add RpcData as a built-in marshallable type.
  Add the full suite of RpcData types.
  Checkpoint adding @home RPC support to aidl
  ActivityManager: Make sure BOOT_COMPLETED Intent is sent when running headless
2012-02-10 11:50:10 -08:00
Mike Lockwood
1e11c6519a Merge "New Serial Manager API:" 2012-02-10 11:41:41 -08:00
Dianne Hackborn
d262744b7e Merge "Some cruft removal." 2012-02-10 11:14:39 -08:00
Dianne Hackborn
21fbd1f7da Some cruft removal.
Change-Id: If4a94bfd4a033748eb13e8f3ff25e24382746778
2012-02-10 10:54:15 -08:00
Mike Lockwood
7bef73900b SettingsProvider: Add support for overriding lockscreen.disabled default value
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 10:51:23 -08:00
Mike J. Chen
4bcbefdc5f Fix disconnect from wired ethernet issues.
When a cable was unplugged, we were telling the driver to release the
ip address so if a cable on a different network was plugged in, it would
still try to use it's old ip address on the new network, which probably
didn't work.

Also, we didn't notify ConnectivityService about the state change in
the unplug case.  Some of this was done in the interface removed case,
but we never remove the interface in Tungsten, just unplug.  So refactor
the common disconnect code into a disconnect() function that's called
by both the link status change (unplug) and interface removal (only applies
to things like USB ethernet dongles) cases.

Signed-off-by: Mike J. Chen <mjchen@google.com>
2012-02-10 10:51:22 -08:00