X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=include%2FSupport%2FSlowOperationInformer.h;h=67edf7df42b53998e5c53f7e824992e00556e9ff;hp=f27a05571b4aafc5fff49e37b4c086696cc99a01;hb=ed543731fb385b55750d0c514d130a810339d739;hpb=a2e9363617a77b7ada49759676d464bdf373cc69 diff --git a/include/Support/SlowOperationInformer.h b/include/Support/SlowOperationInformer.h index f27a05571b4..67edf7df42b 100644 --- a/include/Support/SlowOperationInformer.h +++ b/include/Support/SlowOperationInformer.h @@ -8,14 +8,13 @@ //===----------------------------------------------------------------------===// // // This file defines a simple object which can be used to let the user know what -// is going on when a slow operation is happening,l and gives them the ability -// to cancel it. Potentially slow operations can stack allocate one of these +// is going on when a slow operation is happening, and gives them the ability to +// cancel it. Potentially slow operations can stack allocate one of these // objects, and periodically call the "progress" method to update the progress -// bar. If the operation takes more than 3 seconds to complete, the progress -// bar is automatically shown and updated every second. As such, the slow -// operation should not print stuff to the screen, and should not be confused if -// an extra line appears on the screen (ie, the cursor should be at the start of -// the line). +// bar. If the operation takes more than 1 second to complete, the progress bar +// is automatically shown and updated. As such, the slow operation should not +// print stuff to the screen, and should not be confused if an extra line +// appears on the screen (ie, the cursor should be at the start of the line). // // If the user presses CTRL-C during the operation, the next invocation of the // progress method with throw an std::string object indicating that the @@ -23,9 +22,9 @@ // the progress method. // // Because SlowOperationInformers fiddle around with signals, they cannot be -// nested. The SIGINT signal handler is restored after the -// SlowOperationInformer is destroyed, but the SIGALRM handlers is set back to -// the default. +// nested, and interact poorly with threads. The SIGALRM handler is set back to +// SIGDFL, but the SIGINT signal handler is restored when the +// SlowOperationInformer is destroyed. // //===----------------------------------------------------------------------===// @@ -33,6 +32,7 @@ #define SUPPORT_SLOW_OPERATION_INFORMER_H #include +#include namespace llvm { class SlowOperationInformer { @@ -50,6 +50,15 @@ namespace llvm { /// along the operation is, given in 1/10ths of a percent (in other words, /// Amount should range from 0 to 1000). void progress(unsigned Amount); + + /// progress - Same as the method above, but this performs the division for + /// you, and helps you avoid overflow if you are dealing with largish + /// numbers. + void progress(unsigned Current, unsigned Maximum) { + assert(Maximum != 0 && + "Shouldn't be doing work if there is nothing to do!"); + progress(Current*1000ULL/Maximum); + } }; } // end namespace llvm