summaryrefslogtreecommitdiff
path: root/src/tracing/agent.cc
diff options
context:
space:
mode:
authorAli Ijaz Sheikh <ofrobots@google.com>2018-10-11 06:33:25 -0700
committerAnna Henningsen <anna@addaleax.net>2018-10-12 14:12:31 -0700
commitf5986a464316e2c7c2a21f5a5e9ffa7e527fd9d4 (patch)
tree469a2299ba6eb95cf2a27d9dcce886da09479f37 /src/tracing/agent.cc
parentb4e979ff84bbd366218ddba73ce7f275415b3569 (diff)
downloadandroid-node-v8-f5986a464316e2c7c2a21f5a5e9ffa7e527fd9d4.tar.gz
android-node-v8-f5986a464316e2c7c2a21f5a5e9ffa7e527fd9d4.tar.bz2
android-node-v8-f5986a464316e2c7c2a21f5a5e9ffa7e527fd9d4.zip
src: trace_event: secondary storage for metadata
Metadata trace-events should be held in secondary storage so that they can be periodically reemitted. This change establishes the secondary storage and ensures that events are reemitted on each flush. PR-URL: https://github.com/nodejs/node/pull/20900 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'src/tracing/agent.cc')
-rw-r--r--src/tracing/agent.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/tracing/agent.cc b/src/tracing/agent.cc
index fd5cb3387b..103df55da5 100644
--- a/src/tracing/agent.cc
+++ b/src/tracing/agent.cc
@@ -1,6 +1,7 @@
#include "tracing/agent.h"
#include <string>
+#include "trace_event.h"
#include "tracing/node_trace_buffer.h"
#include "debug_utils.h"
#include "env-inl.h"
@@ -207,9 +208,35 @@ void Agent::AppendTraceEvent(TraceObject* trace_event) {
}
void Agent::Flush(bool blocking) {
+ for (const auto& event : metadata_events_)
+ AppendTraceEvent(event.get());
+
for (const auto& id_writer : writers_)
id_writer.second->Flush(blocking);
}
+void TracingController::AddMetadataEvent(
+ const unsigned char* category_group_enabled,
+ const char* name,
+ int num_args,
+ const char** arg_names,
+ const unsigned char* arg_types,
+ const uint64_t* arg_values,
+ std::unique_ptr<v8::ConvertableToTraceFormat>* convertable_values,
+ unsigned int flags) {
+ std::unique_ptr<TraceObject> trace_event(new TraceObject);
+ trace_event->Initialize(
+ TRACE_EVENT_PHASE_METADATA, category_group_enabled, name,
+ node::tracing::kGlobalScope, // scope
+ node::tracing::kNoId, // id
+ node::tracing::kNoId, // bind_id
+ num_args, arg_names, arg_types, arg_values, convertable_values,
+ TRACE_EVENT_FLAG_NONE,
+ CurrentTimestampMicroseconds(),
+ CurrentCpuTimestampMicroseconds());
+ node::tracing::TraceEventHelper::GetAgent()->AddMetadataEvent(
+ std::move(trace_event));
+}
+
} // namespace tracing
} // namespace node