Page MenuHomePhabricator

Black flicker between E's splash screen and desktop
Closed, ResolvedPublic

Description

EFL commit 5dd52fd09b7d introduced a flash of black between E's splash screen and the desktop when using the sw or gl drm engine.

On X the splash screen fades to black so I can't tell if the same problem exists there.

ManMower created this task.Jan 16 2018, 5:24 PM

ummm... hmm. splash. some history. this is something that existed as an external process in x11 with it's own window originally. the idea was that it could display status while e loaded modules and loaded wallpapers and whatever in the background behind it. every since we started doing compositing this kind of became moot as the window would then need to freeze if e is frozen doing i/o on setup... so it's almost a "legacy thing that just adds complexity". the init moved out of the external process into e... just as an object to show at the start and then remove later. it's rather less useful these days and to be honest, i have for a long time considered removing it just in favor of a simple fade to/from black like e is doing with shut down, suspend, resume etc. etc. ... but it does have a nice logo etc. ... so i've been on the fence.

that being said ... why is the screen black? it should fade to black over a second... what i do see is e_init_hide() is called just after we sent "e,state,done" to the splash. something is prematurely hiding the init splash. at least in wayland that's what i see:

2084576.96297 init signal send done
2084577.06566 init hide

number is timestamp in seconds. that hide is the call to e_init_hide(). _e_init_cb_signal_done_ok() is never called.

ok. it's _e_main_cb_startup_fake_end() doing it. it SHOULD call e_init_done(). e_init_hide() instantly hides... no animation. e_startup has 2 instances of e_init_done()... ok. when i fix this i see the fade in (a bit choppy though) and fade out. the fade in is choppy because the show begins the animation... and show is done before e is doing a lot of other things... i think i need to defer the show until just at the first entering of or just before render. that'll hopefully fix some stuff. for testing i switched my fade to/from black to to/from white to show if there really is a black image:

F2948669 <- mp4 video. frame step through the fade to white at the end ... and you'll see the very next frame when white is disappearing (well it's partly gone as camera vs screen will be not synced) you can see wallpaper and icons, no black. so moving to done at least solved it for me along with deferring the show till first render_pre, and i delayed the "fake end" now for 4 seconds giving e a bit more time to stutter along and do it's thing and queuing the timer using now time just before beginning main loop which should not make it time out too early.

i noticed there are some oddities in the theme where they run the same program from multiple places... if a a done is emitted before show anim is finished it'll have a bug where it tries to run the exit program twice... so i spotted a theme bug at least. i can fix that up. i noticed only after changing to white in the theme to debug .

also didn't emit the done signal to all screens too... :)

so a bevvy of bugs here. calling hide instead of done (too early), theme bug too that i think maybe some timing changes started to show off...