Home | History | Annotate | Download | only in sync_file_system
      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 
     17 namespace sync_file_system {
     18 
     19 class 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