There is no need to trace that SetRate() is called, we know that it will be as it's the only method with such purpose.
Sure, I'll remove that part.
create playback path with video [...] create playback path with audio [...]
quoting you from matrix:
my long term plan would be to use some stub source in tests, that would be very flexible to tweaking
So I'm not sure why moving in that direction is bad, I was kind of trying to do things properly instead of adding another hack to the pile to be be removed in the future.
Regarding thin_committed I still don't see why you need it, why existing field presentation.thin is not enough?
Well, the idea is that the rate itself only gets "committed" once the MESourceRateChanged event is received and the rate is forwarded to the clock (session_complete_rate_change), so without delaying the change to thin equivalently, there could be a point in time where GetRate returns the updated thin but the outdated rate. I suppose it probably doesn't matter much tho since as far as I can see this is racy anyway.