1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_TASK_LOGGER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_TASK_LOGGER_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <deque> 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string> 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector> 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/weak_ptr.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/observer_list.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/time/time.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace sync_file_system { 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TaskLogger : public base::SupportsWeakPtr<TaskLogger> { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) struct TaskLog { 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int log_id; 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::TimeTicks start_time; 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::TimeTicks end_time; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string task_description; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string result_description; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<std::string> details; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TaskLog(); 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ~TaskLog(); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef std::deque<TaskLog*> LogList; 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) class Observer { 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnLogRecorded(const TaskLog& task_log) = 0; 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Observer() {} 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~Observer() {} 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Observer); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TaskLogger(); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ~TaskLogger(); 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RecordLog(scoped_ptr<TaskLog> log); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void ClearLog(); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void AddObserver(Observer* observer); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RemoveObserver(Observer* observer); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const LogList& GetLog() const; 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::deque<TaskLog*> log_history_; 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ObserverList<Observer> observers_; 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TaskLogger); 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace sync_file_system 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_TASK_LOGGER_H_ 69