ppy / osu

rhythm is just a *click* away!
https://osu.ppy.sh
MIT License
15.37k stars 2.28k forks source link

Quickly pressing ESC twice in song select exits the game #3050

Closed Morilli closed 5 years ago

Morilli commented 6 years ago

↑ It's pretty cool to be able to exit the game like that, but I don't think this is intended. Correct me if I'm wrong though. I can make a video if needed.

Rekkonnect commented 6 years ago

Even if unintended in my opinion it should be an actual feature. Sometimes the outro, even if it looks good, just gets boring in the sense of wasting time. Thus, the player may want to instantly close the game, which happens through this way.

Morilli commented 6 years ago

The outro is still playing. It basically behaves as if alt + f4 was pressed.

peppy commented 6 years ago

It is not intended and should not happen. Please stop with these nonsense replies and suggestions. If the original issue exists it should be fixed.

Morilli commented 6 years ago

Doing this will now sometimes throw the following error:

12.09.2018 19:00:33: Unhandled exception has been allowed with 0 more allowable exceptions .
12.09.2018 19:00:33: An unhandled error has occurred.
12.09.2018 19:00:33: System.InvalidOperationException: Attempting to access a TextureWithRefCount's underlying texture after all references are lost.
12.09.2018 19:00:33: at osu.Framework.Graphics.Textures.TextureWithRefCount.get_TextureGL()
12.09.2018 19:00:33: at osu.Framework.Graphics.Sprites.SpriteDrawNode.Draw(Action`1 vertexAction)
12.09.2018 19:00:33: at osu.Framework.Graphics.Containers.CompositeDrawNode.Draw(Action`1 vertexAction)
12.09.2018 19:00:33: at osu.Framework.Graphics.Containers.BufferedContainerDrawNode.drawChildren(Action`1 vertexAction, Vector2 frameBufferSize)
12.09.2018 19:00:33: at osu.Framework.Graphics.Containers.BufferedContainerDrawNode.Draw(Action`1 vertexAction)
12.09.2018 19:00:33: at osu.Framework.Graphics.Containers.CompositeDrawNode.Draw(Action`1 vertexAction)
12.09.2018 19:00:33: at osu.Framework.Platform.GameHost.DrawFrame()
12.09.2018 19:00:33: at osu.Framework.Threading.GameThread.ProcessFrame()
12.09.2018 19:00:33: at osu.Framework.Threading.GameThread.runWork()
Gabixel commented 6 years ago

I don't think that's the error related to that particular situation, because I get the same error sometimes when I exit the songs list (without pressing ESC twice). But I don't have enough information about it: I don't know exactly how it happens.

Gabixel commented 6 years ago

I tried to reproduce your issue, and it even happens to me. But I think the problem is the background changing of the main menu when you exit the list (because when is changing, I get so much lag at that moment), and it seems like to spam the ESC key until the Exit state. I have this theory because something similar happened to me:

When the song was changing (and the background colour too), I pressed enter to send a message in chat at the same time, and it started to spam it like 40 times until the lag stops.

That said, I have some logs that can be useful (the results of my reprodution of this issue): runtime.log (the runtime is to show you every change)

12/09/2018 22:10:33: Screen changed → PlaySongSelect
12/09/2018 22:10:35: updating selection with beatmap:64 ruleset:0
12/09/2018 22:10:35: working beatmap updated to Jason Derulo - In My Head (DiamondCrash) [Easy]
12/09/2018 22:10:38: Screen changed ← MainMenu (0,0) 1.488x728
12/09/2018 22:10:39: ButtonSystem's state changed from EnteringMode to Exit
12/09/2018 22:10:39: Screen changed ← Intro (0,0) 1.488x728
12/09/2018 22:10:41: Screen changed ← Disclaimer (0,0) 1.488x768
12/09/2018 22:10:41: Screen changed ← Loader (0,0) 1.488x768
12/09/2018 22:10:41: Screen changed ←

performance-gamethread.input.log

12/09/2018 22:10:33: | Slow frame on thread "GameThread.Input"
12/09/2018 22:10:33: |
12/09/2018 22:10:33: | * Thread time  : 1.217.157ms
12/09/2018 22:10:33: | * Frame length : 60ms (allowable: 45ms)
12/09/2018 22:10:33: |
12/09/2018 22:10:33: | Call stack was not recorded.
12/09/2018 22:10:33: 
12/09/2018 22:10:34: | Slow frame on thread "GameThread.Input"
12/09/2018 22:10:34: |
12/09/2018 22:10:34: | * Thread time  : 1.218.578ms
12/09/2018 22:10:34: | * Frame length : 48ms (allowable: 36ms)
12/09/2018 22:10:34: |
12/09/2018 22:10:34: | Call stack was not recorded.
12/09/2018 22:10:34: 
12/09/2018 22:10:35: | Slow frame on thread "GameThread.Input"
12/09/2018 22:10:35: |
12/09/2018 22:10:35: | * Thread time  : 1.218.981ms
12/09/2018 22:10:35: | * Frame length : 165ms (allowable: 141ms)
12/09/2018 22:10:35: |
12/09/2018 22:10:35: | Call stack was not recorded.
12/09/2018 22:10:35: 
12/09/2018 22:10:36: | Slow frame on thread "GameThread.Input"
12/09/2018 22:10:36: |
12/09/2018 22:10:36: | * Thread time  : 1.219.636ms
12/09/2018 22:10:36: | * Frame length : 251ms (allowable: 247ms)
12/09/2018 22:10:36: |
12/09/2018 22:10:36: | Call stack was not recorded.
12/09/2018 22:10:36: 
12/09/2018 22:10:39: | Slow frame on thread "GameThread.Input"
12/09/2018 22:10:39: |
12/09/2018 22:10:39: | * Thread time  : 1.223.326ms
12/09/2018 22:10:39: | * Frame length : 546ms (allowable: 237ms)
12/09/2018 22:10:39: |
12/09/2018 22:10:39: | Call stack was not recorded.
12/09/2018 22:10:39: 
12/09/2018 22:10:41: | Slow frame on thread "GameThread.Input"
12/09/2018 22:10:41: |
12/09/2018 22:10:41: | * Thread time  : 1.224.989ms
12/09/2018 22:10:41: | * Frame length : 192ms (allowable: 104ms)
12/09/2018 22:10:41: |
12/09/2018 22:10:41: | Call stack was not recorded.
12/09/2018 22:10:41: 

performance-gamethread.update.log (is a bit long, I linked it in pastebin.com)

can be the draw one useful too?

peppy commented 6 years ago

Seems to be caused in cases where after-action input blocking is not instant (one frame or schedule delayed).

Update frame lags/blocks while input thread is handling events, causing two down events (or potentially clicks) to fire on the next update frame.

Probably needs to be fixed on a per case basis where this comes up, and care needs to be given to future usage of input events.

Gabixel commented 5 years ago

I discovered that it also happens in multiplayer: https://streamable.com/kd1d6 (And not only if you spam the ESC key but even if you press the Home button, followed by pressing ESC quickly)