|  | // Copyright 2016 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. | 
|  |  | 
|  | #ifndef BASE_AUTO_OPEN_CLOSE_EVENT_H_ | 
|  | #define BASE_AUTO_OPEN_CLOSE_EVENT_H_ | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "base/memory/weak_ptr.h" | 
|  | #include "base/threading/thread_checker.h" | 
|  | #include "base/time/time.h" | 
|  | #include "base/trace_event/trace_event.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace trace_event { | 
|  |  | 
|  | // Class for tracing events that support "auto-opening" and "auto-closing". | 
|  | // "auto-opening" = if the trace event is started (call Begin() before | 
|  | // tracing is started,the trace event will be opened, with the start time | 
|  | // being the time that the trace event was actually started. | 
|  | // "auto-closing" = if the trace event is started but not ended by the time | 
|  | // tracing ends, then the trace event will be automatically closed at the | 
|  | // end of tracing. | 
|  | class BASE_EXPORT AutoOpenCloseEvent | 
|  | : public TraceLog::AsyncEnabledStateObserver { | 
|  | public: | 
|  | enum Type { | 
|  | ASYNC | 
|  | }; | 
|  |  | 
|  | // As in the rest of the tracing macros, the const char* arguments here | 
|  | // must be pointers to indefinitely lived strings (e.g. hard-coded string | 
|  | // literals are okay, but not strings created by c_str()) | 
|  | AutoOpenCloseEvent(Type type, const char* category, const char* event_name); | 
|  | ~AutoOpenCloseEvent() override; | 
|  |  | 
|  | void Begin(); | 
|  | void End(); | 
|  |  | 
|  | // AsyncEnabledStateObserver implementation | 
|  | void OnTraceLogEnabled() override; | 
|  | void OnTraceLogDisabled() override; | 
|  |  | 
|  | private: | 
|  | const char* const category_; | 
|  | const char* const event_name_; | 
|  | base::TimeTicks start_time_; | 
|  | base::ThreadChecker thread_checker_; | 
|  | WeakPtrFactory<AutoOpenCloseEvent> weak_factory_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(AutoOpenCloseEvent); | 
|  | }; | 
|  |  | 
|  | }  // namespace trace_event | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_AUTO_OPEN_CLOSE_EVENT_H_ |