Developers write software applications that are meant to be executed on multiple computing platforms and models, such as different models of smart phones, tablet computers, netbooks, personal computers, e-readers, and other devices. These various computing platforms have different hardware capabilities—such as processor speeds, memory capacities, bus speeds, display sizes, and so forth—and these various computing platforms consume different amounts of energy during operation. Testing a software application on all such devices is often impractical. Also, an application developer wanting to optimize an application in various dimensions, such as performance, portability, and energy consumption, would need physical access to the devices and, potentially, on-board or external power meters in order to measure their application's usage of power. Even with such access, it is not easy to determine an individual component's energy consumption, or how much of a component-specific energy consumption is attributable to a particular software application.
Also, an application consumes varying amounts of energy depending on operating conditions, such as signal strength, display brightness, network congestion, and so forth. It is often impractical for the developer to subject multiple devices to these various operating conditions in order to test an application's usage of energy under each scenario.