It's particularly difficult to get an S in Garen top. That is because you are rated, not against the other players in your match, but against the other Garen top on your server.
Riot shows you the metrics are used for the grading, in your Stats tab. (NOT Advanced Stats for the game; your PROFILE STATS tab.)
Go to your PROFILE in the client, and go to STATS. All of those variables are what they are considering, and they show you that they are measuring you against other players of your MMR, your server, playing your champion, in that specific role. It's 13 measurements, that are averaged together, to produce your grade.
COMBAT: KDA Ratio, Kill Participation, Utility Score, Damage Per Death, Damage Share
INCOME: Damage Per Gold, Early Gold Advantage, Early CS Advantage, CS Per Minute
MAP CONTROL: Objective Control Ratio, Vision Score Per Hour, Roam Dominance Score, Kill Conversion Ratio
It seems that the score in each of these categories is considered equally. People notice improvements when they focus on CS or Vision, because these are much easier to control, and excellence in these areas will excuse underperformance in other areas.
It is said that Vision is %20 of your grade. This is an oversimplification, however, it's amazing that when you tell this to people, they start warding, and they start getting Ses.
Riot's grading is NOT consistent with good game play. For example, in the long match, you would need to farm past 400 CS to still earn an S, in most cases, and this is ridiculous. (60m match, you have full build, but you won't get the S if you don't farm. You might lose the game, however...)
The grading on op.gg is more consistent with habits and practices that win games. The only thing that really matters is winning. Don't get distracted.