A computer program product comprising one or more computer-storage media having thereon computer-executable instructions that, when executed by one or more processors of a computing system, cause a computing system to perform the following: an act of constructing a hierarchical time tree representing an execution time of a program that was executed to obtain a plurality of call stack samples, wherein the hierarchical time tree includes a plurality of nodes (301, 311, 312, 321, 322, 331, 332) each node corresponding to an execution time interval, wherein each node of the plurality of nodes is either a leaf node (312, 321, 331, 332) or a non-leaf node (301, 311, 322), each non-leaf node being a parent node with one or more child nodes, and wherein the execution time intervals corresponding to the one or more child nodes, when put together, represent the same time interval as the execution time interval that corresponds to the parent node; an act of populating the hierarchical time tree with information from the plurality of call stack samples, wherein the act of populating the hierarchical time tree includes an act of populating each node of the hierarchical time tree with information from call stack samples of the plurality of call stack samples, wherein said call stack samples correspond to the execution time interval that corresponds to the respective node; and an act of using the hierarchical time tree to construct a report regarding the plurality of call stack samples without having to separately access all of the plurality of call stack samples, wherein the hierarchical time tree is constructed recursively based on a root node corresponding to an interval of the execution time of the program, wherein the computer-executable instructions further cause the computing system to perform the following, starting at the root node: if a current time interval corresponding to a current node of the plurality of nodes contains less than a predefined number of call stack samples, the current node is designated a leaf node and is populated with information from the respective call stack samples; if the current time interval contains at least the predefined number of call stack samples, the current node is designated a non-leaf node, the most frequently occurring types of call stacks corresponding to the current time interval are selected until a percentage of a total number of call stack samples in the current time interval is selected, the current time interval is divided in a number of subintervals and a new child node is created for each subinterval. an act of constructing a hierarchical time tree representing an execution time of a program that was executed to obtain a plurality of call stack samples, wherein the hierarchical time tree includes a plurality of nodes (301, 311, 312, 321, 322, 331, 332) each node corresponding to an execution time interval, wherein each node of the plurality of nodes is either a leaf node (312, 321, 331, 332) or a non-leaf node (301, 311, 322), each non-leaf node being a parent node with one or more child nodes, and wherein the execution time intervals corresponding to the one or more child nodes, when put together, represent the same time interval as the execution time interval that corresponds to the parent node; an act of populating the hierarchical time tree with information from the plurality of call stack samples, wherein the act of populating the hierarchical time tree includes an act of populating each node of the hierarchical time tree with information from call stack samples of the plurality of call stack samples, wherein said call stack samples correspond to the execution time interval that corresponds to the respective node; and an act of using the hierarchical time tree to construct a report regarding the plurality of call stack samples without having to separately access all of the plurality of call stack samples, wherein the hierarchical time tree is constructed recursively based on a root node corresponding to an interval of the execution time of the program, wherein the computer-executable instructions further cause the computing system to perform the following, starting at the root node: if a current time interval corresponding to a current node of the plurality of nodes contains less than a predefined number of call stack samples, the current node is designated a leaf node and is populated with information from the respective call stack samples; if the current time interval contains at least the predefined number of call stack samples, the current node is designated a non-leaf node, the most frequently occurring types of call stacks corresponding to the current time interval are selected until a percentage of a total number of call stack samples in the current time interval is selected, the current time interval is divided in a number of subintervals and a new child node is created for each subinterval. if a current time interval corresponding to a current node of the plurality of nodes contains less than a predefined number of call stack samples, the current node is designated a leaf node and is populated with information from the respective call stack samples; if the current time interval contains at least the predefined number of call stack samples, the current node is designated a non-leaf node, the most frequently occurring types of call stacks corresponding to the current time interval are selected until a percentage of a total number of call stack samples in the current time interval is selected, the current time interval is divided in a number of subintervals and a new child node is created for each subinterval.