X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_writer_local.cpp;h=c5a5c4447b2b4213bea2603f6fd905f554c67bca;hb=66ce10aed5cd8c4b1df5b53645b92ee81b16d8e2;hp=d2ff3b5f73f2a41c5ea9c1413f98260a56941b20;hpb=9f4a7c26821ff4ed466420133cdb33fd56102738;p=apitrace diff --git a/common/trace_writer_local.cpp b/common/trace_writer_local.cpp index d2ff3b5..c5a5c44 100644 --- a/common/trace_writer_local.cpp +++ b/common/trace_writer_local.cpp @@ -36,6 +36,7 @@ #include "trace_file.hpp" #include "trace_writer_local.hpp" #include "trace_format.hpp" +#include "trace_backtrace.hpp" namespace trace { @@ -152,7 +153,7 @@ void LocalWriter::checkProcessId(void) { } } -unsigned LocalWriter::beginEnter(const FunctionSig *sig) { +unsigned LocalWriter::beginEnter(const FunctionSig *sig, bool fake) { mutex.lock(); ++acquired; @@ -171,7 +172,16 @@ unsigned LocalWriter::beginEnter(const FunctionSig *sig) { assert(this_thread_num); unsigned thread_id = this_thread_num - 1; - return Writer::beginEnter(sig, thread_id); + unsigned call_no = Writer::beginEnter(sig, thread_id); + if (!fake && backtrace_is_needed(sig->name)) { + std::vector backtrace = get_backtrace(); + beginBacktrace(backtrace.size()); + for (unsigned i = 0; i < backtrace.size(); ++i) { + writeStackFrame(&backtrace[i]); + } + endBacktrace(); + } + return call_no; } void LocalWriter::endEnter(void) {