libera/#commonlisp - IRC Chatlog
Search
10:01:42
hayley
Shinmera: What would you want to min/maximise with a "better" GC in Kandria? Minimising dropped frames seems like an interesting target to me, but I'd better check.
10:02:48
Shinmera
on most systems the GC is not a problem as-is, but there's been a couple reports from people that had stutters as a result of GC.
10:03:37
Shinmera
Ideally I could set a deadline for how long a pause will take and distribute it over time, but I know that's a lot to ask for :)
10:03:51
hayley
Yeah, avoiding dropped frames on this system might be too easy; pause times would give more information.
10:05:18
Shinmera
and in the debug settings you can activate an fps counter (will have to use the cheat `i am a developer` to get the debug menu)
10:05:31
Shinmera
you can also use the F10 diagnostics overlay, but that produces garbage of its own, so
10:07:32
hayley
Right. We looked at the GC pause meter there some time ago in #shirakumo. I'm trying to work out a sorta higher level target that I can measure, rather than raw pause times, based on advice that I should look at "user-observed latency". But if my desktop is too good at GCing, there's not much to observe.
10:08:43
hayley
The effect on frame time could be a compromise; it still exists even if I don't drop frames.
10:09:09
pve
Hi! If I call (change-class my-object ...) inside a method body, is it specified what happens if I call (call-next-method) if the class of my-object is relevant to the list of applicable methods for that call to the generic function in question?
10:10:21
Shinmera
pve: the type of the arguments may not change, whether you pass them explicitly to c-n-m or not.
10:11:09
phoe
pve: notes for CLHS CHANGE-CLASS "a programmer must not use change-class inside a method if any methods for that generic function access any slots, or the results are undefined."
10:11:55
Shinmera
hayley: I suppose one thing to look for would be maximum time spent (without GC) between frames. that'll give you a bound for GC time.
10:18:47
phoe
pve: in particular, the effective method may already be computed by the time you change the class, and you may be calling methods that were never intended for the object
10:20:25
phoe
kind of a farfetched example but imagine (defclass foo () ()) (defclass bar (foo) ()) (defclass baz (foo) ())
10:20:48
phoe
and then a generic function with methods defined for all three classes and also :MOST-SPECIFIC-LAST method combination
10:21:23
phoe
if the method for FOO does CHANGE-CLASS on its argument from BAR to BAZ, then the method for BAR might get called with an instance of BAZ
10:23:35
pve
but if I have a normal generic function, with an around method at the least specific level, could the very last thing I do in that method be change-class?
10:25:09
phoe
like, you should be able to C-N-M normally if you CHANGE-CLASS between sibling classes - like, if you had a GF without :MOST-SPECIFIC-LAST, you should be able to call C-N-M freely
10:25:36
phoe
and changing class from BAR to BAZ does not change the fact that the object is still a FOO because both BAR and BAZ subclass FOO