| // 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_EVENT_ETW_EXPORT_WIN_H_ | 
 | #define BASE_TRACE_EVENT_TRACE_EVENT_ETW_EXPORT_WIN_H_ | 
 |  | 
 | #include "base/base_export.h" | 
 | #include "base/trace_event/trace_event_impl.h" | 
 |  | 
 | // Fwd. | 
 | template <typename Type> | 
 | 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() && 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<ConvertableToTraceFormat>* 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>; | 
 |   TraceEventETWExport(); | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(TraceEventETWExport); | 
 | }; | 
 |  | 
 | }  // namespace trace_event | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_TRACE_EVENT_TRACE_EVENT_ETW_EXPORT_WIN_H_ |