X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace.cpp;h=412c73b8061e6ecd975ecc32581250dcb7fe8440;hb=bd5e1649f9c658ddfa3090ec70fb3f741a6ded76;hp=ecdef5b48f8d93eb6ec7945442f92578efaa0c6b;hpb=2741ed8b85842cf5f08fe6dff8d4ae5626434046;p=apitrace diff --git a/retrace.cpp b/retrace.cpp index ecdef5b..412c73b 100644 --- a/retrace.cpp +++ b/retrace.cpp @@ -36,14 +36,34 @@ namespace retrace { int verbosity = 0; -void ignore(Trace::Call &call) { +static bool call_dumped = false; + + +static void dumpCall(trace::Call &call) { + if (verbosity >= 0 && !call_dumped) { + std::cout << call; + std::cout.flush(); + call_dumped = true; + } +} + + +std::ostream &warning(trace::Call &call) { + dumpCall(call); + + std::cerr << call.no << ": "; + std::cerr << "warning: "; + + return std::cerr; +} + + +void ignore(trace::Call &call) { (void)call; } -void retrace_unknown(Trace::Call &call) { - if (verbosity >= 0) { - std::cerr << call.no << ": warning: unknown call " << call.name() << "\n"; - } +void unsupported(trace::Call &call) { + warning(call) << "unsupported " << call.name() << " call\n"; } inline void Retracer::addCallback(const Entry *entry) { @@ -60,10 +80,16 @@ void Retracer::addCallbacks(const Entry *entries) { } -void Retracer::retrace(Trace::Call &call) { +void Retracer::retrace(trace::Call &call) { + call_dumped = false; + + if (verbosity >= 1) { + dumpCall(call); + } + Callback callback = 0; - Trace::Id id = call.sig->id; + trace::Id id = call.sig->id; if (id >= callbacks.size()) { callbacks.resize(id + 1); callback = 0; @@ -74,7 +100,7 @@ void Retracer::retrace(Trace::Call &call) { if (!callback) { Map::const_iterator it = map.find(call.name()); if (it == map.end()) { - callback = &retrace_unknown; + callback = &unsupported; } else { callback = it->second; }