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. 4 5 #ifndef CHROME_BROWSER_DRIVE_EVENT_LOGGER_H_ 6 #define CHROME_BROWSER_DRIVE_EVENT_LOGGER_H_ 7 8 #include <deque> 9 #include <string> 10 #include <vector> 11 12 #include "base/basictypes.h" 13 #include "base/compiler_specific.h" 14 #include "base/logging.h" 15 #include "base/synchronization/lock.h" 16 #include "base/time/time.h" 17 18 namespace drive { 19 20 // The default history size used by EventLogger. 21 const int kDefaultHistorySize = 1000; 22 23 // EventLogger is used to collect and expose text messages for diagnosing 24 // behaviors of Google APIs stuff. For instance, the collected messages are 25 // exposed to chrome:drive-internals. 26 class EventLogger { 27 public: 28 // Represents a single event log. 29 struct Event { 30 Event(int id, logging::LogSeverity severity, const std::string& what); 31 int id; // Monotonically increasing ID starting from 0. 32 logging::LogSeverity severity; // Severity of the event. 33 base::Time when; // When the event occurred. 34 std::string what; // What happened. 35 }; 36 37 // Creates an event logger that keeps the latest kDefaultHistorySize events. 38 EventLogger(); 39 ~EventLogger(); 40 41 // Logs a message and its severity. 42 // Can be called from any thread as long as the object is alive. 43 void LogRawString(logging::LogSeverity severity, const std::string& what); 44 45 // Logs a message with formatting. 46 // Can be called from any thread as long as the object is alive. 47 void Log(logging::LogSeverity severity, const char* format, ...) 48 PRINTF_FORMAT(3, 4); 49 50 // Sets the history size. The existing history is cleared. 51 // Can be called from any thread as long as the object is alive. 52 void SetHistorySize(size_t history_size); 53 54 // Gets the list of latest events (the oldest event comes first). 55 // Can be called from any thread as long as the object is alive. 56 std::vector<Event> GetHistory(); 57 58 private: 59 std::deque<Event> history_; // guarded by lock_. 60 size_t history_size_; // guarded by lock_. 61 int next_event_id_; // guarded by lock_. 62 base::Lock lock_; 63 64 DISALLOW_COPY_AND_ASSIGN(EventLogger); 65 }; 66 67 } // namespace drive 68 69 #endif // CHROME_BROWSER_DRIVE_EVENT_LOGGER_H_ 70