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