Blocking Display till android boot

118 views
Skip to first unread message

Kiran Kumar

unread,
Apr 7, 2017, 10:49:24 AM4/7/17
to android-porting
Hello All,

My requirement is the following,

1. Show bootloader logo, till android home screen comes up,
2. Disable bootnaimation in android,
3. Block displaying any frames to primary display till android home screen comes up.

Bootanimation is commented out in init.rc
Disabling keyguard is done in the frameworks/base/core/res/res/value
<!-- Whether to enable KeyguardService or not -->
<bool name="config_enableKeyguardService">true</bool>

To block the frames rendering to the primary display surfaceflinger is modified as below,
884void SurfaceFlinger::onMessageReceived(int32_t what) {
885    ATRACE_CALL();
886    switch (what) {
887        case MessageQueue::TRANSACTION: {
888            handleMessageTransaction();
889            break;
890        }
891        case MessageQueue::INVALIDATE: {
892            bool refreshNeeded = handleMessageTransaction();
893            refreshNeeded |= handleMessageInvalidate();
894            refreshNeeded |= mRepaintEverything;
895            if (refreshNeeded) {
896                // Signal a refresh if a transaction modified the window state,
897                // a new buffer was latched, or if HWC has requested a full
898                // repaint
899                signalRefresh();
900            }
901            break;
902        }
903        case MessageQueue::REFRESH: {
                 if (isToBeDisplayEnabled) //Condition to check when to start rendering
904                handleMessageRefresh();
                  }
905            break;
906        }
907    }
908}

I am setting the flag isTobeDisplayEnabled, in the function 
289void SurfaceFlinger::bootFinished()
290{
291    const nsecs_t now = systemTime();
292    const nsecs_t duration = now - mBootTime;
293    ALOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) );
294    mBootFinished = true;
295
296    // wait patiently for the window manager death
297    const String16 name("window");
298    sp<IBinder> window(defaultServiceManager()->getService(name));
299    if (window != 0) {
300        window->linkToDeath(static_cast<IBinder::DeathRecipient*>(this));
301    }
302
303    // stop boot animation
304    // formerly we would just kill the process, but we now ask it to exit so it
305    // can choose where to stop the animation.
306    property_set("service.bootanim.exit", "1");

          isToBeDisplayEnabled = true;
307}


But what i am seeing is when transition happens from Bootloader to android homescreen, 
there is rotated screen or there is a blank screen displayed before the android homescreen is visible. 

What may be the problem here how to correct the problems,

Reply all
Reply to author
Forward
0 new messages