Alright, the fact that `echo mem > /sys/power/state` is fast means that the delay issue is not in the "suspend" path and we also know that it's not even in the detection path (/proc/acpi/button/lid/LID0/state). So the delay must be somewhere between the detection of the event and the delivery of the proper suspend action, that should be driven by systemd, more exactly systemd-logind.
At this point I think it would interesting to take a look at journalctl, more exactly the timestamps and messages around a line like "systemd-logind[...]: Lid closed.". This should give us an idea how fast systemd detected the event and how fast it processed it.
Alright, the fact that `echo mem > /sys/power/state` is fast means that the delay issue is not in the "suspend" path and we also know that it's not even in the detection path (/proc/ acpi/button/ lid/LID0/ state). So the delay must be somewhere between the detection of the event and the delivery of the proper suspend action, that should be driven by systemd, more exactly systemd-logind.
At this point I think it would interesting to take a look at journalctl, more exactly the timestamps and messages around a line like "systemd- logind[ ...]: Lid closed.". This should give us an idea how fast systemd detected the event and how fast it processed it.