We present a new approach to software performance analysis that aims to extend conventional profiling with some of the predictive capabilities of a performance model. The idea is to execute programs in virtual time, which allows hypothetical time scaling of the constituent parts of an application to be explored in advance of any speculative redevelopment aimed at improving performance. Virtual time execution works via a virtual time scheduler that controls execution by wrapping the underlying (real time) system scheduler and enforcing a thread schedule that takes account of time scaling. The necessary instruments to achieve this are added automatically to the profiled program at load time. We present VEX, a generic low-level kernel for supporting such a `scheduling profiler' in this sense and JINE, a specific instrumentation framework for the Java programming language, that builds on VEX. An evaluation of the VEX/JINE framework with a wide range of standard benchmarks shows that the prediction error is less 10% on average and the execution time overheads less than a factor of two on average, for the benchmarks tested. We also illustrate various time scaling experiments, which yield results that are quite different to those predicted from conventional profiling measurements.