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