Increasingly, mobile computers are using dynamic voltage scaling (DVS) to increase their battery life. We analyze traces of real user workloads to determine how DVS algorithms should treat tasks triggered by user interface events. We compare different DVS algorithms and find that for a given level of performance, Lorch et al.'s PACE (Processor Acceleration to Conserve Energy) algorithm always uses the least energy and the Stepped algorithm always uses the second least. The Stepped algorithm increases speed at a constant rate, while PACE increases speed according to an energy-minimizing schedule derived from the probability distribution of a task's CPU requirement. We find that different types of user interface event (mouse movements, mouse clicks, and keystrokes) trigger tasks with significantly different CPU requirements, suggesting that DVS algorithms should use different speeds for these different types of event. For example, mouse movements require little enough CPU time that using the minimum speed available for them reduces deadlines made by only 0.2% while reducing CPU energy consumption for those events by 77.5%. We also find significant differences in CPU requirements between different categories of the same event type, e.g., between pressing the spacebar and pressing the enter key, and between events delivered to different applications. Conditioning the speed schedule on the event category, however, yields only small improvements in energy consumption: in our experiments, by an additional 1.5% for keystrokes and 0.5% for mouse clicks. Finally, we evaluate a novel heuristic for inferring when user interface tasks complete and find it is more efficient and nearly as effective as more complex approaches.