I believe it was the default from Marshmallow through Pie, but as of 10 it's default off because the powers that be decided that performance was more important. And it was actually on even without full justification, as it improves appearance and density for ragged-right text as well. One of the things we tuned is trying to avoid a final line with just one word on it - in that case, it's far more likely to insert a hyphen to avoid that. I think that's really nice in mobile, where screen real estate is at such a premium.
I’m surprised Knuth-Plass was noticeable; it’s not greedy cheap, but it’s got to be a drop in the bucket compared to rasterization. Did y’all make sure to implement the O(n) version, or did you do the O(n^2) variant?
Well, it's O(nm) where m is the number of candidate breaks on the line. The amount of time spent Knuthing and Plassing is not too bad, but where it does hurt you is that you have to measure the substrings with potential hyphenation breaks. And even if rasterization is more costly, layout hurts because often you have to do lots of it in bulk, when materializing new content, where rasterizing usually scales with the number of pixels you have to draw. And in Android that basically has to happen on the UI thread (offloading it to an async thread is theoretically possible but a major pain).
I haven't been involved in day-to-day engineering on Android in 3 years though. Maybe of the current team will feel like chiming in.
I wish browsers implemented it, but it seems almost impossible.