nexus 4 client lock up observed
Bug #1352883 reported by
Kevin DuBois
This bug affects 2 people
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
High
|
Kevin DuBois | ||
0.6 |
Fix Released
|
High
|
Kevin DuBois | ||
0.7 |
Invalid
|
Undecided
|
Unassigned | ||
mir (Ubuntu) |
Fix Released
|
High
|
Unassigned |
Bug Description
I was playing with the demo shell extensively working on a branch and observed a client drop to 10 self-reported fps for about 1s and then jump back to 60fps. What was probably happening was a fence was getting stuck, eventually timing out, and continuing on. The fps drop was probably just the framedropping algorithm kicking in.
Related branches
lp://staging/~kdub/mir/fix-1352883
- Alan Griffiths: Approve
- Daniel van Vugt: Approve
- PS Jenkins bot (community): Approve (continuous-integration)
-
Diff: 256 lines (+210/-3)3 files modifiedsrc/platform/graphics/android/hwc_device.cpp (+19/-3)
src/platform/graphics/android/hwc_device.h (+1/-0)
tests/unit-tests/graphics/android/test_hwc_device.cpp (+190/-0)
lp://staging/mir/0.6
- PS Jenkins bot (community): Needs Fixing (continuous-integration)
- Kevin DuBois (community): Needs Information
- Alberto Aguirre (community): Approve
-
Diff: 1037 lines (+536/-184)19 files modifiedCMakeLists.txt (+1/-1)
debian/changelog (+11/-0)
debian/control (+4/-4)
include/test/mir_test_framework/using_stub_client_platform.h (+11/-3)
src/client/api_impl.h (+0/-27)
src/client/api_impl_types.h (+0/-32)
src/client/mir_connection_api.cpp (+73/-66)
src/client/mir_connection_api.h (+59/-0)
src/platform/graphics/android/hwc_device.cpp (+19/-3)
src/platform/graphics/android/hwc_device.h (+1/-0)
src/platform/graphics/android/hwc_logger.h (+5/-0)
src/platform/graphics/android/hwc_loggers.cpp (+36/-0)
src/platform/graphics/android/hwc_loggers.h (+8/-0)
src/platform/graphics/android/real_hwc_wrapper.cpp (+4/-0)
tests/mir_test_framework/server_runner.cpp (+1/-1)
tests/mir_test_framework/using_stub_client_platform.cpp (+37/-35)
tests/unit-tests/graphics/android/test_hwc_device.cpp (+190/-0)
tests/unit-tests/graphics/android/test_hwc_logger.cpp (+40/-0)
tests/unit-tests/graphics/android/test_hwc_wrapper.cpp (+36/-12)
Changed in mir: | |
status: | New → In Progress |
Changed in mir: | |
importance: | Undecided → High |
tags: | removed: nexus4 |
Changed in mir: | |
milestone: | none → 0.7.0 |
Changed in mir: | |
milestone: | 0.8.0 → none |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
So what is happening is:
hwc::commit ({layer1, layer2}) {layer2, layer1}).
and then
hwc::commit(
Since both layer 1 and layer 2 are already onscreen, the hwc has already accepted their acquireFenceFd's and programmed them with new releaseFenceFd's after the 1st commit.
When the 2nd commit comes around, the mir code fails to recognize that the layers have already been accepted by hwc and copies the releaseFenceFd into the acquireFenceFd for the 2nd commit. Since the 2nd commit is the precipitating event that signals the releaseFenceFd's from the 1st commit, the second commit hangs (pausing the renderloop).
The reason why this is intermittent is that the fences will time out after a device-specific time interval, at which point the timeout unblocks the renderloop and the system will continue.