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.
OdeToCode by K. Scott Allen