Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Unified Diff: base/trace_event/trace_log.cc

Issue 1947373002: Tracing V2 prototype [NOT FOR REVIEW] Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WORKS Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/trace_event/trace_log.h ('k') | base/trace_event/v2/append_only_proto_message.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/trace_event/trace_log.cc
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc
index 5692e835bab88905786ba53616796c3ff086914c..6c922e9c76806a38e6f1ef06f4128afa2233f509 100644
--- a/base/trace_event/trace_log.cc
+++ b/base/trace_event/trace_log.cc
@@ -41,6 +41,7 @@
#include "base/trace_event/trace_sampling_thread.h"
#include "build/build_config.h"
+
#if defined(OS_WIN)
#include "base/trace_event/trace_event_etw_export_win.h"
#endif
@@ -205,10 +206,14 @@ class TraceLog::OptionalAutoLock {
DISALLOW_COPY_AND_ASSIGN(OptionalAutoLock);
};
+bool TraceLog::use_v2 = false;
+
class TraceLog::ThreadLocalEventBuffer
: public MessageLoop::DestructionObserver,
public MemoryDumpProvider {
public:
+ v2::ZeroCopyTraceBufferWriter* v2;
+
explicit ThreadLocalEventBuffer(TraceLog* trace_log);
~ThreadLocalEventBuffer() override;
@@ -225,6 +230,8 @@ class TraceLog::ThreadLocalEventBuffer
int generation() const { return generation_; }
+ v2::ZeroCopyTraceBufferWriter v2_wri;
+
private:
// MessageLoop::DestructionObserver
void WillDestroyCurrentMessageLoop() override;
@@ -250,7 +257,8 @@ class TraceLog::ThreadLocalEventBuffer
};
TraceLog::ThreadLocalEventBuffer::ThreadLocalEventBuffer(TraceLog* trace_log)
- : trace_log_(trace_log),
+ : v2_wri(&trace_log->v2_rb, 42),
+ trace_log_(trace_log),
chunk_index_(0),
generation_(trace_log->generation()) {
// ThreadLocalEventBuffer is created only if the thread has a message loop, so
@@ -357,7 +365,8 @@ TraceLog::TraceLog()
event_callback_trace_config_(TraceConfig()),
thread_shared_chunk_index_(0),
generation_(0),
- use_worker_thread_(false) {
+ use_worker_thread_(false),
+ v2_rb(&v2_buf[0], sizeof(v2_buf)) {
// Trace is enabled or disabled on one thread while other threads are
// accessing the enabled flag. We don't care whether edge-case events are
// traced or not, so we allow races on the enabled flag to keep the trace
@@ -569,6 +578,7 @@ void TraceLog::GetKnownCategoryGroups(
}
void TraceLog::SetEnabled(const TraceConfig& trace_config, Mode mode) {
+ memset(v2_buf, 0, sizeof(v2_buf));
std::vector<EnabledStateObserver*> observer_list;
{
AutoLock lock(lock_);
@@ -1251,6 +1261,49 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
OptionalAutoLock lock(&lock_);
TraceEvent* trace_event = NULL;
+ if (TraceLog::use_v2) {
+ v2::TraceEventHandle evt = thread_local_event_buffer->v2_wri.AddEvent();
+ evt->set_thread_id(thread_id);
+ evt->set_timestamp(offset_event_timestamp.ToInternalValue());
+ evt->set_thread_timestamp(thread_now.ToInternalValue());
+ evt->set_type((::tracing::Event_Type) phase);
+ evt->set_category_id(static_cast<uint32_t>((uintptr_t)category_group_enabled));
+ evt->set_name_id(static_cast<uint32_t>((uintptr_t)name));
+ evt->set_id(id);
+ if (num_args > 0) {
+ tracing::EventArgsSimple* v2_args = evt->add_args_simple();
+
+ v2_args->set_arg_1_name_idx((uintptr_t) arg_names[0]);
+ switch(arg_types[0]) {
+ case TRACE_VALUE_TYPE_POINTER: {
+ // Super hack to test future convertable items. Assume that if a
+ // pointer was passed it was a pointer to a TraceEventHandle.
+ v2::TraceEventHandle* h = reinterpret_cast<v2::TraceEventHandle*>((uintptr_t)arg_values[0]);
+ *h = std::move(evt);
+ }
+ break;
+ case TRACE_VALUE_TYPE_BOOL:
+ v2_args->set_arg_1_bool_value(arg_values[0]); break;
+ // I am too lazy for all the cases :P
+ default:
+ v2_args->set_arg_1_int_value(arg_values[0]); break;
+ break;
+ }
+
+ if (num_args > 1) {
+ v2_args->set_arg_2_name_idx((uintptr_t) arg_names[1]);
+ switch(arg_types[1]) {
+ case TRACE_VALUE_TYPE_BOOL:
+ v2_args->set_arg_2_bool_value(arg_values[1]); break;
+ // I am too lazy for all the cases :P
+ default:
+ v2_args->set_arg_2_int_value(arg_values[1]); break;
+ break;
+ }
+ }
+ } // if num_args > 0
+ } else {
+
if (thread_local_event_buffer) {
trace_event = thread_local_event_buffer->AddTraceEvent(&handle);
} else {
@@ -1274,7 +1327,7 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
arg_values,
convertable_values,
flags);
-
+ } // else v2
#if defined(OS_ANDROID)
trace_event->SendToATrace();
#endif
« no previous file with comments | « base/trace_event/trace_log.h ('k') | base/trace_event/v2/append_only_proto_message.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698