task_logger.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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#include "chrome/browser/sync_file_system/task_logger.h"
6
7#include "base/lazy_instance.h"
8#include "base/stl_util.h"
9#include "base/synchronization/lock.h"
10
11namespace sync_file_system {
12
13namespace {
14
15const size_t kMaxLogSize = 500;
16
17int g_next_log_id = 1;
18base::LazyInstance<base::Lock>::Leaky g_log_id_lock = LAZY_INSTANCE_INITIALIZER;
19
20int GenerateLogID() {
21  base::AutoLock lock(g_log_id_lock.Get());
22  return g_next_log_id++;
23}
24
25}  // namespace
26
27typedef TaskLogger::TaskLog TaskLog;
28
29TaskLogger::TaskLog::TaskLog() : log_id(GenerateLogID()) {}
30TaskLogger::TaskLog::~TaskLog() {}
31
32TaskLogger::TaskLogger() {}
33
34TaskLogger::~TaskLogger() {
35  ClearLog();
36}
37
38void TaskLogger::RecordLog(scoped_ptr<TaskLog> log) {
39  if (!log)
40    return;
41
42  if (log_history_.size() >= kMaxLogSize) {
43    delete log_history_.front();
44    log_history_.pop_front();
45  }
46
47  log_history_.push_back(log.release());
48
49  FOR_EACH_OBSERVER(Observer, observers_,
50                    OnLogRecorded(*log_history_.back()));
51}
52
53void TaskLogger::ClearLog() {
54  STLDeleteContainerPointers(log_history_.begin(), log_history_.end());
55  log_history_.clear();
56}
57
58void TaskLogger::AddObserver(Observer* observer) {
59  observers_.AddObserver(observer);
60}
61
62void TaskLogger::RemoveObserver(Observer* observer) {
63  observers_.RemoveObserver(observer);
64}
65
66const TaskLogger::LogList& TaskLogger::GetLog() const {
67  return log_history_;
68}
69
70}  // namespace sync_file_system
71