diff --git a/vm/agent_components.cpp b/vm/agent_components.cpp index 5372cba8c3..fb2766bdc6 100644 --- a/vm/agent_components.cpp +++ b/vm/agent_components.cpp @@ -246,12 +246,12 @@ namespace agent { } }; - class ThreadInfo : public DynamicVariable { + class ThreadBacktrace : public DynamicVariable { SharedState& shared_; VM* state_; public: - ThreadInfo(STATE, SharedState& ss, const char* name) + ThreadBacktrace(STATE, SharedState& ss, const char* name) : DynamicVariable(name) , shared_(ss) , state_(state) @@ -289,6 +289,29 @@ namespace agent { } }; + class ThreadCount : public DynamicVariable { + SharedState& shared_; + VM* state_; + + public: + ThreadCount(STATE, SharedState& ss, const char* name) + : DynamicVariable(name) + , shared_(ss) + , state_(state) + {} + + virtual void read(Output& output) { + shared_.interrupts.set_timer(); + GlobalLock::LockGuard guard(shared_.global_lock()); + + output.ok("value"); + + std::list* thrs = shared_.threads(); + + output.e().write_integer(thrs->size()); + } + }; + template class ReadInteger : public DynamicVariable { T* ptr_; @@ -352,7 +375,9 @@ namespace agent { jit->add(new ReadInteger("methods", &ss.stats.jitted_methods)); jit->add(new ReadInteger("time", &ss.stats.jit_time_spent)); - system_->add(new ThreadInfo(state, ss, "threads")); + Tree* threads = system_->get_tree("threads"); + threads->add(new ThreadBacktrace(state, ss, "backtrace")); + threads->add(new ThreadCount(state, ss, "count")); } void VariableAccess::read_path(Output& output, const char* ipath) {