Ever since the .NET compiler platform became open source, I’ve been poking around the Roslyn source code. It’s not often you get to look at the internals of a product with a large code base, and not surprisingly there are some gems inside. I have a collection of the gems and each gem falls into one of three categories.
1. Ideas to borrow
2. Trivia
3. Bizarre and outstanding
Today’s gem falls into category two – trivia.
Have you ever wondered what makes for a “captive” audience? According to the PerformanceGoals class, this would be an operation using from one to ten seconds of time.
static PerformanceGoals() { // An interaction class defines how much time is expected to reach a time point, the response // time point being the most commonly used. The interaction classes correspond to human perception, // so, for example, all interactions in the Fast class are perceived as fast and roughly feel like // they have the same performance. By defining these interaction classes, we can describe // performance using adjectives that have a precise, consistent meaning. // // Name Target (ms) Upper Bound (ms) UX / Feedback // Instant <=50 100 No noticeable delay // Fast 50-100 200 Minimally noticeable delay // Typical 100-300 500 Slower, but still no feedback necessary // Responsive 300-500 1,000 Slower yet, potentially show Wait cursor // Captive >500 10,000 Long, show Progress Dialog w/Cancel // Extended >500 >10,000 Long enough for the user to switch to something else // Used for throughput scenarios like parser bytes per second. const string Throughput_100 = "Throughput_100"; Goals = new string[(int)FunctionId.Count]; Goals[(int)FunctionId.CSharp_SyntaxTree_FullParse] = Throughput_100; Goals[(int)FunctionId.VisualBasic_SyntaxTree_FullParse] = Throughput_100; }
Unlike the code in this post, the next entry in this series will feature a gem with potentially useful code – an optimized bit counter.