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 18namespace drive { 19 20// The default history size used by EventLogger. 21const 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. 26class 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