Loading services/surfaceflinger/DisplayHardware/HWComposer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ status_t HWComposer::createWorkList(int32_t id, size_t numLayers) { if (mHwc) { DisplayData& disp(mDisplayData[id]); if (disp.capacity < numLayers) { if (disp.capacity < numLayers || disp.list == NULL) { const size_t size = sizeof(hwc_display_contents_1_t) + numLayers * sizeof(hwc_layer_1_t); free(disp.list); Loading services/surfaceflinger/SurfaceFlinger.cpp +35 −9 Original line number Diff line number Diff line Loading @@ -137,15 +137,8 @@ void SurfaceFlinger::binderDied(const wp<IBinder>& who) { // the window manager died on us. prepare its eulogy. // 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); // restore initial conditions (default device unblank, etc) initializeDisplays(); // restart the boot-animation startBootAnim(); Loading Loading @@ -451,6 +444,9 @@ status_t SurfaceFlinger::readyToRun() // We're now ready to accept clients... mReadyToRunBarrier.open(); // set initial conditions (e.g. unblank default device) initializeDisplays(); // start boot animation startBootAnim(); Loading Loading @@ -1729,6 +1725,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() { ALOGD("Screen about to return, flinger = %p", this); sp<const DisplayDevice> hw(getDefaultDisplayDevice()); // XXX: this should be per DisplayDevice Loading services/surfaceflinger/SurfaceFlinger.h +7 −2 Original line number Diff line number Diff line Loading @@ -231,9 +231,11 @@ private: void signalLayerUpdate(); 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(); // called on the main thread in response to screenAcquired() // called on the main thread in response to unblank() void onScreenAcquired(); void handleMessageTransaction(); Loading Loading @@ -321,6 +323,9 @@ private: /* ------------------------------------------------------------------------ * Display and layer stack management */ // called when starting, or restarting after system_server death void initializeDisplays(); sp<const DisplayDevice> getDisplayDevice(DisplayID dpy) const { return mDisplays.valueFor(dpy); } Loading Loading
services/surfaceflinger/DisplayHardware/HWComposer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ status_t HWComposer::createWorkList(int32_t id, size_t numLayers) { if (mHwc) { DisplayData& disp(mDisplayData[id]); if (disp.capacity < numLayers) { if (disp.capacity < numLayers || disp.list == NULL) { const size_t size = sizeof(hwc_display_contents_1_t) + numLayers * sizeof(hwc_layer_1_t); free(disp.list); Loading
services/surfaceflinger/SurfaceFlinger.cpp +35 −9 Original line number Diff line number Diff line Loading @@ -137,15 +137,8 @@ void SurfaceFlinger::binderDied(const wp<IBinder>& who) { // the window manager died on us. prepare its eulogy. // 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); // restore initial conditions (default device unblank, etc) initializeDisplays(); // restart the boot-animation startBootAnim(); Loading Loading @@ -451,6 +444,9 @@ status_t SurfaceFlinger::readyToRun() // We're now ready to accept clients... mReadyToRunBarrier.open(); // set initial conditions (e.g. unblank default device) initializeDisplays(); // start boot animation startBootAnim(); Loading Loading @@ -1729,6 +1725,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() { ALOGD("Screen about to return, flinger = %p", this); sp<const DisplayDevice> hw(getDefaultDisplayDevice()); // XXX: this should be per DisplayDevice Loading
services/surfaceflinger/SurfaceFlinger.h +7 −2 Original line number Diff line number Diff line Loading @@ -231,9 +231,11 @@ private: void signalLayerUpdate(); 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(); // called on the main thread in response to screenAcquired() // called on the main thread in response to unblank() void onScreenAcquired(); void handleMessageTransaction(); Loading Loading @@ -321,6 +323,9 @@ private: /* ------------------------------------------------------------------------ * Display and layer stack management */ // called when starting, or restarting after system_server death void initializeDisplays(); sp<const DisplayDevice> getDisplayDevice(DisplayID dpy) const { return mDisplays.valueFor(dpy); } Loading