// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This file contains the Windows-specific exporting to ETW. #ifndef BASE_TRACE_EVENT_TRACE_ETW_EXPORT_H_ #define BASE_TRACE_EVENT_TRACE_ETW_EXPORT_H_ #include "base/base_export.h" #include "base/trace_event/trace_event_impl.h" // Fwd. template struct StaticMemorySingletonTraits; namespace base { namespace trace_event { class BASE_EXPORT TraceEventETWExport { public: ~TraceEventETWExport(); // Retrieves the singleton. // Note that this may return NULL post-AtExit processing. static TraceEventETWExport* GetInstance(); // Enables/disables exporting of events to ETW. If disabled, // AddEvent and AddCustomEvent will simply return when called. static void EnableETWExport(); static void DisableETWExport(); static bool isETWExportEnabled() { return GetInstance()->ETWExportEnabled_; } // Exports an event to ETW. This is mainly used in // TraceLog::AddTraceEventWithThreadIdAndTimestamp to export internal events. static void AddEvent( char phase, const unsigned char* category_group_enabled, const char* name, unsigned long long id, int num_args, const char** arg_names, const unsigned char* arg_types, const unsigned long long* arg_values, const scoped_refptr* convertable_values); // Exports an event to ETW. This should be used when exporting an event only // to ETW. Supports three arguments to be passed to ETW. // TODO(georgesak): Allow different providers. static void AddCustomEvent(const char* name, char const* phase, const char* arg_name_1, const char* arg_value_1, const char* arg_name_2, const char* arg_value_2, const char* arg_name_3, const char* arg_value_3); void Resurrect(); private: bool ETWExportEnabled_; // Ensure only the provider can construct us. friend struct StaticMemorySingletonTraits; TraceEventETWExport(); DISALLOW_COPY_AND_ASSIGN(TraceEventETWExport); }; } // namespace trace_event } // namespace base #endif // BASE_TRACE_EVENT_TRACE_ETW_EXPORT_H_