diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 25e80d7f0..51fcce43e 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -148,7 +148,7 @@ void SurfaceFlinger::binderDied(const wp& who) setTransactionState(state, eOrientationDefault, 0); // restart the boot-animation - property_set("ctl.start", "bootanim"); + startBootAnim(); } sp SurfaceFlinger::getCblk() const @@ -201,7 +201,9 @@ void SurfaceFlinger::bootFinished() } // stop boot animation - property_set("ctl.stop", "bootanim"); + // formerly we would just kill the process, but we now ask it to exit so it + // can choose where to stop the animation. + property_set("service.bootanim.exit", "1"); } static inline uint16_t pack565(int r, int g, int b) { @@ -306,11 +308,17 @@ status_t SurfaceFlinger::readyToRun() mReadyToRunBarrier.open(); // start boot animation - property_set("ctl.start", "bootanim"); + startBootAnim(); return NO_ERROR; } +void SurfaceFlinger::startBootAnim() { + // start boot animation + property_set("service.bootanim.exit", "0"); + property_set("ctl.start", "bootanim"); +} + // ---------------------------------------------------------------------------- bool SurfaceFlinger::authenticateSurfaceTexture( diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index d9c20338e..b20973bcc 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -351,6 +351,8 @@ private: void debugFlashRegions(); void drawWormhole() const; + void startBootAnim(); + void listLayersLocked(const Vector& args, size_t& index, String8& result, char* buffer, size_t SIZE) const; void dumpStatsLocked(const Vector& args, size_t& index,