am 53ade085: Added display initialization method

* commit '53ade0853ca003c9e917b5e7d34e1b1338d7b87d':
  Added display initialization method
This commit is contained in:
Andy McFadden 2012-08-24 09:31:42 -07:00 committed by Android Git Automerger
commit d6db17737b
2 changed files with 42 additions and 11 deletions

View File

@ -137,15 +137,8 @@ void SurfaceFlinger::binderDied(const wp<IBinder>& who)
{ {
// the window manager died on us. prepare its eulogy. // the window manager died on us. prepare its eulogy.
// reset screen orientation // restore initial conditions (default device unblank, etc)
Vector<ComposerState> state; initializeDisplays();
Vector<DisplayState> displays;
DisplayState d;
d.what = DisplayState::eOrientationChanged;
d.token = mDefaultDisplays[DisplayDevice::DISPLAY_ID_MAIN];
d.orientation = DisplayState::eOrientationDefault;
displays.add(d);
setTransactionState(state, displays, 0);
// restart the boot-animation // restart the boot-animation
startBootAnim(); startBootAnim();
@ -432,6 +425,9 @@ status_t SurfaceFlinger::readyToRun()
// We're now ready to accept clients... // We're now ready to accept clients...
mReadyToRunBarrier.open(); mReadyToRunBarrier.open();
// set initial conditions (e.g. unblank default device)
initializeDisplays();
// start boot animation // start boot animation
startBootAnim(); startBootAnim();
@ -1710,6 +1706,36 @@ status_t SurfaceFlinger::onLayerDestroyed(const wp<LayerBaseClient>& layer)
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
void SurfaceFlinger::onInitializeDisplays() {
// reset screen orientation
Vector<ComposerState> state;
Vector<DisplayState> displays;
DisplayState d;
d.what = DisplayState::eOrientationChanged;
d.token = mDefaultDisplays[DisplayDevice::DISPLAY_ID_MAIN];
d.orientation = DisplayState::eOrientationDefault;
displays.add(d);
setTransactionState(state, displays, 0);
// XXX: this should init default device to "unblank" and all other devices to "blank"
onScreenAcquired();
}
void SurfaceFlinger::initializeDisplays() {
class MessageScreenInitialized : public MessageBase {
SurfaceFlinger* flinger;
public:
MessageScreenInitialized(SurfaceFlinger* flinger) : flinger(flinger) { }
virtual bool handler() {
flinger->onInitializeDisplays();
return true;
}
};
sp<MessageBase> msg = new MessageScreenInitialized(this);
postMessageAsync(msg); // we may be called from main thread, use async message
}
void SurfaceFlinger::onScreenAcquired() { void SurfaceFlinger::onScreenAcquired() {
ALOGD("Screen about to return, flinger = %p", this); ALOGD("Screen about to return, flinger = %p", this);
sp<const DisplayDevice> hw(getDefaultDisplayDevice()); // XXX: this should be per DisplayDevice sp<const DisplayDevice> hw(getDefaultDisplayDevice()); // XXX: this should be per DisplayDevice

View File

@ -231,9 +231,11 @@ private:
void signalLayerUpdate(); void signalLayerUpdate();
void signalRefresh(); void signalRefresh();
// called on the main thread in response to screenReleased() // called on the main thread in response to initializeDisplays()
void onInitializeDisplays();
// called on the main thread in response to blank()
void onScreenReleased(); void onScreenReleased();
// called on the main thread in response to screenAcquired() // called on the main thread in response to unblank()
void onScreenAcquired(); void onScreenAcquired();
void handleMessageTransaction(); void handleMessageTransaction();
@ -321,6 +323,9 @@ private:
/* ------------------------------------------------------------------------ /* ------------------------------------------------------------------------
* Display and layer stack management * Display and layer stack management
*/ */
// called when starting, or restarting after system_server death
void initializeDisplays();
sp<const DisplayDevice> getDisplayDevice(DisplayID dpy) const { sp<const DisplayDevice> getDisplayDevice(DisplayID dpy) const {
return mDisplays.valueFor(dpy); return mDisplays.valueFor(dpy);
} }