Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / test / logging / win / log_file_reader.h
blob5cc1aad6a225f42d66ae465b8e687703d6cbf425
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // A log file reader can read log files produced by Event Tracing for Windows
6 // (by way of the FileLogger class) that contain events generated from a select
7 // few supported providers; see file_logger_win.h for the list.
9 #ifndef CHROME_TEST_LOGGING_WIN_LOG_FILE_READER_H_
10 #define CHROME_TEST_LOGGING_WIN_LOG_FILE_READER_H_
12 #include <stddef.h>
13 #include <windows.h>
14 #include <wmistr.h>
15 #include <evntrace.h>
17 #include "base/logging.h"
18 #include "base/strings/string_piece.h"
20 namespace base {
21 class FilePath;
24 namespace logging_win {
26 // An interface to classes interested in taking action based on events parsed
27 // out of a log file created by the FileLogger.
28 class LogFileDelegate {
29 public:
30 virtual ~LogFileDelegate();
32 // Invoked for event types not currently handled by the parser.
33 virtual void OnUnknownEvent(const EVENT_TRACE* event) = 0;
35 // Invoked for events of known types that cannot be parsed due to unexpected
36 // data.
37 virtual void OnUnparsableEvent(const EVENT_TRACE* event) = 0;
39 // Invoked for the header at the front of all log files.
40 virtual void OnFileHeader(const EVENT_TRACE* event,
41 const TRACE_LOGFILE_HEADER* header) = 0;
43 // Invoked for simple log messages produced by LogEventProvider.
44 virtual void OnLogMessage(const EVENT_TRACE* event,
45 logging::LogSeverity severity,
46 const base::StringPiece& message) = 0;
48 // Invoked for full log messages produced by LogEventProvider.
49 virtual void OnLogMessageFull(const EVENT_TRACE* event,
50 logging::LogSeverity severity,
51 DWORD stack_depth,
52 const intptr_t* backtrace,
53 int line,
54 const base::StringPiece& file,
55 const base::StringPiece& message) = 0;
57 // Invoked for trace events produced by TraceEventETWProvider.
58 virtual void OnTraceEvent(const EVENT_TRACE* event,
59 const base::StringPiece& name,
60 char type,
61 intptr_t id,
62 const base::StringPiece& extra,
63 DWORD stack_depth,
64 const intptr_t* backtrace) = 0;
66 protected:
67 LogFileDelegate();
70 // Reads |log_file|, invoking appropriate methods on |delegate| as events are
71 // parsed. Although it is safe to call this from multiple threads, only one
72 // file may be read at a time; other threads trying to read other log files will
73 // be blocked waiting.
74 void ReadLogFile(const base::FilePath& log_file, LogFileDelegate* delegate);
76 } // namespace logging_win
78 #endif // CHROME_TEST_LOGGING_WIN_LOG_FILE_READER_H_