There is a bug where the sensor is not properly deactivated
when ann app becomes idle. This CL fixes the issue, and also
avoids calling batch() if no active clients exist.
Bug: 157934995
Test: Flash, verify sensor is disabled when app goes idle
and re-enabled when app becomes active again
Change-Id: I403b02a20dc89c5ce0630de6ddfd6242bf38ec37
This change includes two separate fixes to make waking up from idle more
robust when using a kernel idle timer:
1) Always reconfirm the refresh rate when we resync to hardware vsync.
This is because if the kernel idle timer is enabled, we may not
immediately be in the refresh rate we expect to be.
2) Ignore the refresh rate reported by the hardware vsync callbacks,
since that refresh rate may not reflect the actual refresh rate
when the kernel idle timer is in effect.
Bug: 154303580
Test: systrace
Test: libsurfaceflinger_unittest
Change-Id: I79c66faeaed262acd9c5925fe2202a9fb3f10b7b
When we still have pending transactions (e.g. we are waiting on the
other side of a deferred transaction), we need to set the transaction
flags on SurfaceFlinger, so SurfaceFlinger will continue to call
doTransaction and give us a chance to process them. However when
we set the transaction flags, we trigger a wake up! This isn't
desirable, as the frame might have not come in. If the frame did come
in we will get to INVALIDATE, and from INVALIDATE observe the
transaction flags. This means we can set the transaction flags without
scheduling a wakeup and rely on the incoming frame to eventually wake
us up. I also considered triggering the transaction processing from
onFrameAvailable but at that point we are too late in the composition
cycle.
Bug: 157685525
Test: Existing tests pass
Change-Id: Ia54bc9f48a80906fc8f21c46debc72fabadd3e07
If a transaction is posted with ISurfaceComposer::eAnimation flag,
record it with layer history. Layers with eAnimation are considered
animating and will vote for peak refresh rate.
Bug: 157695685
Test: Play 24fps video in YouTube PIP mode with setFrameRate and rotate the device - no jank
Test: Chrome playing video - no refresh rate switching
Test: Hide/Show keyboard when inputting text
Test: Running Hay Day and observing refresh rate
Change-Id: If62e11b395c44d9e5fd40b74864fefd068953413
To reduce the delta of the upcoming ANR refactor, add a basic ANR test
here. This will also help highlight the difference in behaviour from the
current code to the new code.
To cause an ANR today, the socket needs to be blocked, which means that
we need to send ~ 50 events to the unresponsive window.
These workarounds will be removed when the ANRs are refactored.
Bug: 143459140
Test: adb shell -t /data/nativetest64/inputflinger_tests/inputflinger_tests --gtest_filter="*InputDispatcherSingleWindowAnr*" --gtest_repeat=1000
--gtest_break_on_failure
Change-Id: I0a1b28c2785d03d8870691641e0f7c6b1ca3b85e
Merged-In: I0a1b28c2785d03d8870691641e0f7c6b1ca3b85e
The current implementation of layer history discards all the history
if a layer is considered inactive. This leads to an issue in the scenario
that a layer is posting infrequent updates so slow, that by the time we
get the next buffer, the layer is considered inactive, and we bump the
refresh rate to Max, instead of detecting that layer as infrequent.
As a fix, we keep around the layer history even if it is inactive.
To avoid cases where detect animations too late, we clear the history
on touch event.
Bug: 156654519
Test: add a new unit test that simulates the buffer pattern
of a Netflix playback
Change-Id: Ie076891806d74dde814fbbb3b1a73c38e0b2ae34
am skip reason: Change-Id Ie7a9546550b70c8834462b06de929472196fe713 with SHA-1 888a6a41ed is in history
Change-Id: Ief69a7d420179ad03b0ab8fff2a0182bae220990
am skip reason: Change-Id Ia7e0c952fcaefd14280322d9b2269f4dba38e8da with SHA-1 01a5613bda is in history
Change-Id: Ib5a9b9cdad619b994181a05037d8b80a22cd5bea
This change allows creating an effect layers without a color fill so
we can avoid an additional sf transactions when creating effect
layers.
Fixes: 157646690
Test: go/wm-smoke
Test: atest SurfaceFlinger_test
Change-Id: I3d8a4f4820d7b8fb05daab697c25cff8def612c1
Adds a -A commandline option to indicate a much smaller set of
dumpstate output safe for ARC++ bug reports.
Implements output of system logcat, event logs, networking, and dropbox
system server crash/system app crashes only.
Bug: 142684959
Bug: 136273873
Test: atest dumpstate_test
Change-Id: I192be7ed841cee0a8847e1057209ef2b164bab07
The snapshots are no longer needed after restore is done.
We do this in keeping with the fact that apk/apex code data is
deleted immediately after the rollback is committed.
See go/rollbackmanager-snapshot-deletion for more details.
Bug: 151805360
Test: N/A. Will be added in the next CL.
Merged-In: I5a7540aa08922c4b0c617c9cb37e1bec2ff23fc1
Change-Id: I5a7540aa08922c4b0c617c9cb37e1bec2ff23fc1
While refactoring ANR logic, we discovered that an existing Q behaviour
was broken by the focus refactoring. The behaviour aims to prevent keys
from being sent to incorrect windows.
The desired behaviour is as follows: if there are any unfinished events,
then do not process key events (keep them pending), which would allow
these key events to go to a new window, if one becomes focused. The
intent is that if the user hits "Alt+Tab" to switch to another window,
and starts typing right away, we want to make sure that we have
processed the focus event for the new window prior to determining where
to send the new key events after Alt+Tab.
The behaviour is broken today because we put the focus events at the
back of the queue. So even if we process the focus event first, it would
still go to the app after the key event, which would mean that the new
window may receive it, but would drop it because that window does not
yet have focus (since we haven't sent the focused event to it).
The proposed solution is to always put the focus events in the front of
the queue. But, we still need to preserve the relative order of focus
events. To account for that, we put a new focus event always at the
front of the queue, but behind any other focus events that may be there.
Bug: 143459140
Test: added in ANR CL because this behaviour is updated there.
Change-Id: I95256bd3f57988d1990cf1f21267c8f405892e8e
Merged-In: I95256bd3f57988d1990cf1f21267c8f405892e8e
There was a possibility of accidental mouse warping between multiple
displays. InputReader has the responsibility of setting the
DisplayViewport that the pointer is associated with, but framework sets
a recommended "defaultPointerDisplayId".
TouchInputMapper uses PointerController for touchpads
(DEVICE_MODE_POINTER) and for when "showTouches" (touch spots) are
enabled. In the latter case, TouchInputMapper was setting the pointer's
DisplayViewport to the viewport that the mapper itself was associated
with. When this viewport differs from the one recommended by framework,
there is a possibility that the pointer is moved unexpectedly to the
display associated with the mapper. The possibility of this happening
depends upon the the order in which the various input mappers are
configured.
This CL removes the possibility of unexpected warping by making
TouchInputMapper always use the viewport recommended by framework.
Bug: 146385350
Test: atest inputflinger_tests
Change-Id: Id73c59bce825855bc8c829c3a5a18c141593057e
Merged-In: Id73c59bce825855bc8c829c3a5a18c141593057e
Mouse cursor metadata is stored in a parcel with a int32_t for mouse
cursor type, and two floats for mouse hotspotX/Y. Therefore move the
parcel to byte vector conversion into SurfaceComposerClient. If anyone
needs to store metadata in raw byte vector we can change the interface
later.
Bug: 130822623
Test: SurfaceFlinger can get cursor type and hotspot.
Change-Id: Ia7e0c952fcaefd14280322d9b2269f4dba38e8da
Merged-In: Ia7e0c952fcaefd14280322d9b2269f4dba38e8da
InputReader was already responsible to bind device/event and display. It
makes sense to further extend it to control the display where mouse
cursor is shown.
Bug: 146385350
Test: Mouse cursor shows up at expected display.
Test: atest inputflinger_tests
Change-Id: Ie7a9546550b70c8834462b06de929472196fe713
Merged-In: Ie7a9546550b70c8834462b06de929472196fe713
- Restructure the code in RefreshRateConfigs to be able to clear
LayerHistory frames on the first touch event. Without this change we
clear the history on every frame as long as the touch timer hasn't
expired.
- Add log prints for debugging
Test: Play 24fps video in YouTube PIP mode and rotate the device - no jank
Test: Chrome playing video - no refresh rate switching
Test: Hide/Show keyboard when inputting text
Test: Running Hay Day and observing refresh rate
Bug: 157096772
Change-Id: I7cabecd6ea27ec335e773aa22bb111fa8ec89195
This reverts commit 1adbb72759.
Reason for revert: Causing regression with b/157096772
Change-Id: Ib2009f7a4ecbd268ea69304853a91bd22674ec1e
Test: Play 24fps video in YouTube PIP mode and rotate the device - no jank
Test: Chrome playing video - no refresh rate switching
Test: Hide/Show keyboard when inputting text
Test: Running Hay Day and observing refresh rate
Bug: 157096772
Bug: 155062712
Bug: 156654519
This reverts commit eeb74561b6.
Reason for revert: Causing regression with b/157096772
Change-Id: I031219588cedf5cfcb75255430f707428ed59f72
Test: Play 24fps video in YouTube PIP mode and rotate the device - no jank
Test: Chrome playing video - no refresh rate switching
Test: Hide/Show keyboard when inputting text
Test: Running Hay Day and observing refresh rate
Bug: 157096772
Bug: 157110371
This reverts commit 39db2c9b07.
Reason for revert: Causing regression with b/157096772
Change-Id: I058d6f8efa637cb36371276761281f51b7aa3dd3
Test: Play 24fps video in YouTube PIP mode and rotate the device - no jank
Test: Chrome playing video - no refresh rate switching
Test: Hide/Show keyboard when inputting text
Test: Running Hay Day and observing refresh rate
Bug: 157096772