Implement support for monitor suspend.

This speeds up idle resume by around 2.5 seconds.

Previously, we would turn the panel off before idle suspend. Then we would
suspend and resume. On resume, the kernel would restore the "off" state, and
the Chrome monitor code would kick in to turn the panel on. This is a huge
waste of time when each panel configuration step takes more than one second.

Instead, just before suspending, we turn the backlight off and the panel on.
On resume the kernel sets the panel state to on right away, and power_manager
turns the backlight on. The Chrome monitor code still runs, but is a noop.

This change needs this power_manager change to handle the backlight part:
https://gerrit.chromium.org/gerrit/#/c/40971/

This landed as r178195, but was reverted in r178288 because it crashed in the
VM tests; unregistering suspenddelay from the destructor was assuming that the
object proxy was still around which wasn't the case. I fixed the destructor
to not unregister the suspenddelay.

BUG=chrome-os-partner:13364
TEST=By hand: reduce the idle suspend timeout, let the machine idle and
TEST=suspend, press a key to resume and see how long it takes. The time
TEST=it takes shrinks from ~4 seconds to ~1.5 second.
TBR=sky@chromium.org

Change-Id: I610995c12ed08624eb0bc91057d7c9bfa8002fbf

Review URL: https://chromiumcodereview.appspot.com/12036092

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@178754 0039d316-1c4b-4281-b951-d872f2087c98
9 files changed