| Index: chrome/browser/policy/logging_work_scheduler.cc
|
| diff --git a/chrome/browser/policy/logging_work_scheduler.cc b/chrome/browser/policy/logging_work_scheduler.cc
|
| deleted file mode 100644
|
| index 841df96e5a68c5003305a3305c8ec87ac54a06da..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/policy/logging_work_scheduler.cc
|
| +++ /dev/null
|
| @@ -1,190 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/policy/logging_work_scheduler.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -
|
| -using content::BrowserThread;
|
| -
|
| -namespace policy {
|
| -
|
| -// Objects of this class are used in the priority-queue of future tasks
|
| -// in EventLogger.
|
| -class EventLogger::Task {
|
| - public:
|
| - Task();
|
| - Task(int64 trigger_time,
|
| - int64 secondary_key,
|
| - linked_ptr<base::Closure> callback);
|
| - ~Task();
|
| -
|
| - // Returns true if |this| should be executed before |rhs|.
|
| - // Used for sorting by the priority queue.
|
| - bool operator< (const Task& rhs) const;
|
| -
|
| - int64 trigger_time() const;
|
| -
|
| - // Returns a copy of the callback object of this task, and resets the
|
| - // original callback object. (LoggingTaskScheduler owns a linked_ptr to
|
| - // its task's callback objects and it only allows firing new tasks if the
|
| - // previous task's callback object has been reset.)
|
| - base::Closure GetAndResetCallback();
|
| -
|
| - private:
|
| - // The virtual time when this task will trigger.
|
| - // Smaller times win.
|
| - int64 trigger_time_;
|
| - // Used for sorting tasks that have the same trigger_time.
|
| - // Bigger keys win.
|
| - int64 secondary_key_;
|
| -
|
| - linked_ptr<base::Closure> callback_;
|
| -};
|
| -
|
| -EventLogger::Task::Task() {
|
| -}
|
| -
|
| -EventLogger::Task::Task(int64 trigger_time,
|
| - int64 secondary_key,
|
| - linked_ptr<base::Closure> callback)
|
| - : trigger_time_(trigger_time),
|
| - secondary_key_(secondary_key),
|
| - callback_(callback) {
|
| -}
|
| -
|
| -EventLogger::Task::~Task() {
|
| -}
|
| -
|
| -bool EventLogger::Task::operator< (const Task& rhs) const {
|
| - if (trigger_time_ == rhs.trigger_time_) {
|
| - return secondary_key_ < rhs.secondary_key_;
|
| - } else {
|
| - return trigger_time_ > rhs.trigger_time_;
|
| - }
|
| -}
|
| -
|
| -int64 EventLogger::Task::trigger_time() const {
|
| - return trigger_time_;
|
| -}
|
| -
|
| -base::Closure EventLogger::Task::GetAndResetCallback() {
|
| - // Make a copy.
|
| - base::Closure callback = *(callback_.get());
|
| - // Reset the original callback, which is shared with LoggingTaskScheduler.
|
| - callback_->Reset();
|
| - return callback;
|
| -}
|
| -
|
| -EventLogger::EventLogger()
|
| - : step_pending_(false),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)),
|
| - current_time_(0),
|
| - task_counter_(0) {
|
| -}
|
| -
|
| -EventLogger::~EventLogger() {
|
| -}
|
| -
|
| -void EventLogger::PostDelayedWork(
|
| - linked_ptr<base::Closure> callback,
|
| - int64 delay) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - int64 trigger_time = current_time_ + delay;
|
| - task_counter_++;
|
| - scheduled_tasks_.push(Task(trigger_time, task_counter_, callback));
|
| - if (!step_pending_) {
|
| - step_pending_ = true;
|
| - MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&EventLogger::Step, weak_ptr_factory_.GetWeakPtr()));
|
| - }
|
| -}
|
| -
|
| -void EventLogger::RegisterEvent() {
|
| - events_.push_back(current_time_);
|
| -}
|
| -
|
| -void EventLogger::Swap(std::vector<int64>* events) {
|
| - std::swap(events_, *events);
|
| -}
|
| -
|
| -// static
|
| -// Counts the number of elements in a sorted integer vector that are
|
| -// >= |start| but < |start| + |length|.
|
| -int EventLogger::CountEvents(const std::vector<int64>& events,
|
| - int64 start, int64 length) {
|
| - // The first interesting event.
|
| - std::vector<int64>::const_iterator begin_it =
|
| - std::lower_bound(events.begin(), events.end(), start);
|
| - // The event after the last interesting event.
|
| - std::vector<int64>::const_iterator end_it =
|
| - std::lower_bound(begin_it, events.end(), start + length);
|
| - return end_it - begin_it;
|
| -}
|
| -
|
| -void EventLogger::Step() {
|
| - DCHECK(step_pending_);
|
| - step_pending_ = false;
|
| - if (scheduled_tasks_.empty())
|
| - return;
|
| - // Take the next scheduled task from the queue.
|
| - Task next = scheduled_tasks_.top();
|
| - scheduled_tasks_.pop();
|
| - base::Closure callback = next.GetAndResetCallback();
|
| - int64 trigger_time = next.trigger_time();
|
| - DCHECK(trigger_time >= current_time_);
|
| - // Execute the next scheduled task if it was not cancelled.
|
| - if (!callback.is_null()) {
|
| - current_time_ = trigger_time;
|
| - callback.Run(); // Note: new items may be added to scheduled_tasks_ here.
|
| - }
|
| - // Trigger calling this method if there are remaining tasks.
|
| - if (!step_pending_ && !scheduled_tasks_.empty()) {
|
| - step_pending_ = true;
|
| - MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&EventLogger::Step, weak_ptr_factory_.GetWeakPtr()));
|
| - }
|
| -}
|
| -
|
| -DummyWorkScheduler::DummyWorkScheduler() {
|
| -}
|
| -
|
| -DummyWorkScheduler::~DummyWorkScheduler() {
|
| - CancelDelayedWork();
|
| -}
|
| -
|
| -void DummyWorkScheduler::PostDelayedWork(
|
| - const base::Closure& callback, int64 delay) {
|
| - DelayedWorkScheduler::PostDelayedWork(callback, 0);
|
| -}
|
| -
|
| -LoggingWorkScheduler::LoggingWorkScheduler(EventLogger* logger)
|
| - : logger_(logger) {
|
| -}
|
| -
|
| -LoggingWorkScheduler::~LoggingWorkScheduler() {
|
| - if (callback_.get())
|
| - callback_->Reset();
|
| -}
|
| -
|
| -void LoggingWorkScheduler::PostDelayedWork(
|
| - const base::Closure& callback, int64 delay) {
|
| - DCHECK(!callback_.get() || callback_->is_null());
|
| - callback_.reset(new base::Closure(callback));
|
| - logger_->PostDelayedWork(callback_, delay);
|
| -}
|
| -
|
| -void LoggingWorkScheduler::CancelDelayedWork() {
|
| - if (!callback_.get()) return;
|
| - callback_->Reset(); // Erase the callback to the delayed work.
|
| - callback_.reset(NULL); // Erase the pointer to the callback.
|
| -}
|
| -
|
| -} // namespace policy
|
|
|