1// Copyright 2014 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_SYNC_FILE_SYSTEM_TASK_LOGGER_H_ 6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_TASK_LOGGER_H_ 7 8#include <deque> 9#include <string> 10#include <vector> 11 12#include "base/memory/scoped_ptr.h" 13#include "base/memory/weak_ptr.h" 14#include "base/observer_list.h" 15#include "base/time/time.h" 16 17namespace sync_file_system { 18 19class TaskLogger : public base::SupportsWeakPtr<TaskLogger> { 20 public: 21 struct TaskLog { 22 int log_id; 23 base::TimeTicks start_time; 24 base::TimeTicks end_time; 25 std::string task_description; 26 std::string result_description; 27 std::vector<std::string> details; 28 29 TaskLog(); 30 ~TaskLog(); 31 }; 32 33 typedef std::deque<TaskLog*> LogList; 34 35 class Observer { 36 public: 37 virtual void OnLogRecorded(const TaskLog& task_log) = 0; 38 39 protected: 40 Observer() {} 41 virtual ~Observer() {} 42 43 private: 44 DISALLOW_COPY_AND_ASSIGN(Observer); 45 }; 46 47 TaskLogger(); 48 ~TaskLogger(); 49 50 void RecordLog(scoped_ptr<TaskLog> log); 51 void ClearLog(); 52 53 void AddObserver(Observer* observer); 54 void RemoveObserver(Observer* observer); 55 56 const LogList& GetLog() const; 57 58 private: 59 std::deque<TaskLog*> log_history_; 60 61 ObserverList<Observer> observers_; 62 63 DISALLOW_COPY_AND_ASSIGN(TaskLogger); 64}; 65 66} // namespace sync_file_system 67 68#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_TASK_LOGGER_H_ 69