[PATCH] glretrace: Add optional parameter to allow looping N last frames
Jon Ashburn
jon at lunarg.com
Mon Aug 11 14:35:33 PDT 2014
---
common/trace_option.cpp | 8 ++++++++
common/trace_option.hpp | 3 ++-
retrace/retrace_main.cpp | 14 ++++++++++----
3 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/common/trace_option.cpp b/common/trace_option.cpp
index 5c4563f..edaa8e8 100644
--- a/common/trace_option.cpp
+++ b/common/trace_option.cpp
@@ -28,6 +28,7 @@
#include <string.h>
#include <iostream>
+#include <stdlib.h>
namespace trace {
@@ -50,4 +51,11 @@ boolOption(const char *option, bool default_) {
return default_;
}
+int
+intOption(const char *option, int default_) {
+ if (!option) {
+ return default_;
+ }
+ return atoi(option);
+}
} /* namespace trace */
diff --git a/common/trace_option.hpp b/common/trace_option.hpp
index e22a422..0397c97 100644
--- a/common/trace_option.hpp
+++ b/common/trace_option.hpp
@@ -31,7 +31,8 @@ namespace trace {
bool
boolOption(const char *option, bool default_ = true);
-
+int
+intOption(const char *option, int default_ = 0);
} /* namespace trace */
#endif /* _TRACE_CALLSET_HPP_ */
diff --git a/retrace/retrace_main.cpp b/retrace/retrace_main.cpp
index 746fc56..dda1c2f 100644
--- a/retrace/retrace_main.cpp
+++ b/retrace/retrace_main.cpp
@@ -46,6 +46,7 @@
static bool waitOnFinish = false;
static bool loopOnFinish = false;
+static bool loopContinuos = false;
static const char *snapshotPrefix = NULL;
static enum {
@@ -90,7 +91,7 @@ bool singleThread = false;
unsigned frameNo = 0;
unsigned callNo = 0;
-
+unsigned loopIter = 1;
void
frameComplete(trace::Call &call) {
@@ -342,9 +343,11 @@ public:
/* Restart last frame if looping is requested. */
if (loopOnFinish) {
- if (!call) {
+ if (!call && (loopIter > 0 || loopContinuos)) {
parser.setBookmark(lastFrameStart);
call = parser.parse_call();
+ if (!loopContinuos)
+ loopIter--;
} else if (callEndsFrame) {
lastFrameStart = frameStart;
}
@@ -584,7 +587,7 @@ usage(const char *argv0) {
" -v, --verbose increase output verbosity\n"
" -D, --dump-state=CALL dump state at specific call no\n"
" -w, --wait waitOnFinish on final frame\n"
- " --loop continuously loop, replaying final frame.\n"
+ " --loop[=N] loop N times (N=0 continuously) replaying final frame.\n"
" --singlethread use a single thread to replay command stream\n";
}
@@ -630,7 +633,7 @@ longOptions[] = {
{"snapshot-interval", required_argument, 0, SNAPSHOT_INTERVAL_OPT},
{"verbose", no_argument, 0, 'v'},
{"wait", no_argument, 0, 'w'},
- {"loop", no_argument, 0, LOOP_OPT},
+ {"loop", optional_argument, 0, LOOP_OPT},
{"singlethread", no_argument, 0, SINGLETHREAD_OPT},
{0, 0, 0, 0}
};
@@ -751,6 +754,9 @@ int main(int argc, char **argv)
waitOnFinish = true;
break;
case LOOP_OPT:
+ loopIter = trace::intOption(optarg);
+ if (loopIter == 0)
+ loopContinuos = true;
loopOnFinish = true;
break;
case PGPU_OPT:
--
1.8.1.2
More information about the apitrace
mailing list