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 Log(logging::LogSeverity severity, const std::string& what); 44 45 // Sets the history size. The existing history is cleared. 46 // Can be called from any thread as long as the object is alive. 47 void SetHistorySize(size_t history_size); 48 49 // Gets the list of latest events (the oldest event comes first). 50 // Can be called from any thread as long as the object is alive. 51 std::vector<Event> GetHistory(); 52 53 private: 54 std::deque<Event> history_; // guarded by lock_. 55 size_t history_size_; // guarded by lock_. 56 int next_event_id_; // guarded by lock_. 57 base::Lock lock_; 58 59 DISALLOW_COPY_AND_ASSIGN(EventLogger); 60 }; 61 62 } // namespace drive 63 64 #endif // CHROME_BROWSER_DRIVE_EVENT_LOGGER_H_ 65