// Copyright 2014 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 COMPONENTS_DEVICE_EVENT_LOG_DEVICE_EVENT_LOG_IMPL_H_ #define COMPONENTS_DEVICE_EVENT_LOG_DEVICE_EVENT_LOG_IMPL_H_ #include #include #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/single_thread_task_runner.h" #include "base/time/time.h" #include "components/device_event_log/device_event_log.h" namespace device_event_log { // Implementation class for DEVICE_LOG. class DEVICE_EVENT_LOG_EXPORT DeviceEventLogImpl { public: struct LogEntry { LogEntry(const char* filedesc, int file_line, LogType log_type, LogLevel log_level, const std::string& event); std::string file; int file_line; LogType log_type; LogLevel log_level; std::string event; base::Time time; int count; }; explicit DeviceEventLogImpl( scoped_refptr task_runner, size_t max_entries); ~DeviceEventLogImpl(); // Implements device_event_log::AddEntry. void AddEntry(const char* file, int file_line, LogType type, LogLevel level, const std::string& event); // Implements device_event_log::GetAsString. std::string GetAsString(StringOrder order, const std::string& format, const std::string& types, LogLevel max_level, size_t max_events); // Called from device_event_log::AddEntry if the global instance has not been // created (or has already been destroyed). Logs to LOG(ERROR) or VLOG(1). static void SendToVLogOrErrorLog(const char* file, int file_line, LogType type, LogLevel log_level, const std::string& event); private: friend class DeviceEventLogTest; typedef std::list LogEntryList; void AddLogEntry(const LogEntry& entry); void RemoveEntry(); // For testing size_t max_entries() const { return max_entries_; } void set_max_entries_for_test(size_t entries) { max_entries_ = entries; } scoped_refptr task_runner_; size_t max_entries_; LogEntryList entries_; base::WeakPtrFactory weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(DeviceEventLogImpl); }; } // namespace device_event_log #endif // COMPONENTS_DEVICE_EVENT_LOG_DEVICE_EVENT_LOG_IMPL_H_