diff options
author | Jeff Brown <jeffbrown@google.com> | 2012-08-25 13:34:32 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2012-08-25 13:41:35 -0700 |
commit | f75724b3d36d84c881d4052cfd4be766d454c98f (patch) | |
tree | 3407abe81ef9a86e920096a7d0a1d3ad5a61f083 /services/java/com/android/server/power/PowerManagerService.java | |
parent | ba94170a7a4f78d68fe228e9ee35ed82c4de09c8 (diff) | |
download | frameworks_base-f75724b3d36d84c881d4052cfd4be766d454c98f.zip frameworks_base-f75724b3d36d84c881d4052cfd4be766d454c98f.tar.gz frameworks_base-f75724b3d36d84c881d4052cfd4be766d454c98f.tar.bz2 |
Initialize screen state earlier in the boot process.
The system depends on receiving reliable vsync signals from
surface flinger during the boot process. If it doesn't get them
because the screen is off then a hang may occur.
This isn't a problem when surface flinger manages the screen
blanking itself but it is a problem for devices that still
rely on early-suspend. When early-suspend is involved, the
screen may be off without surface flinger knowing. This is a
problem because surface flinger will only synthesize fake
vsyncs when it knows the screen is off, otherwise relying
on the hardware to generate vsync signals itself. Unfortunately,
the hardware won't generate vsync signals if the screen was
turned off by early-suspend, so we have a problem.
Bug: 6975688
Change-Id: Iaf4527f716bf4ea72cc3e6fdaf060855697b02f2
Diffstat (limited to 'services/java/com/android/server/power/PowerManagerService.java')
-rw-r--r-- | services/java/com/android/server/power/PowerManagerService.java | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java index 9f2b247..dc900ca 100644 --- a/services/java/com/android/server/power/PowerManagerService.java +++ b/services/java/com/android/server/power/PowerManagerService.java @@ -296,6 +296,7 @@ public final class PowerManagerService extends IPowerManager.Stub } nativeInit(); + nativeSetPowerState(true, true); } /** @@ -305,6 +306,14 @@ public final class PowerManagerService extends IPowerManager.Stub public void init(Context context, LightsService ls, ActivityManagerService am, BatteryService bs, IBatteryStats bss, DisplayManagerService dm) { + // Forcibly turn the screen on at boot so that it is in a known power state. + // We do this in init() rather than in the constructor because setting the + // screen state requires a call into surface flinger which then needs to call back + // into the activity manager to check permissions. Unfortunately the + // activity manager is not running when the constructor is called, so we + // have to defer setting the screen state until this point. + nativeSetScreenState(true); + mContext = context; mLightsService = ls; mBatteryService = bs; |