| Index: core/scheduler.cc
|
| diff --git a/core/scheduler.cc b/core/scheduler.cc
|
| deleted file mode 100644
|
| index d2363e7f6de2cad9d323abbb346e00cd5cb9b0a5..0000000000000000000000000000000000000000
|
| --- a/core/scheduler.cc
|
| +++ /dev/null
|
| @@ -1,129 +0,0 @@
|
| -// Copyright 2007-2009 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -
|
| -#include "omaha/core/scheduler.h"
|
| -#include <algorithm>
|
| -#include "omaha/base/debug.h"
|
| -#include "omaha/base/error.h"
|
| -#include "omaha/base/highres_timer-win32.h"
|
| -#include "omaha/base/logging.h"
|
| -#include "omaha/base/queue_timer.h"
|
| -#include "omaha/common/config_manager.h"
|
| -#include "omaha/core/core.h"
|
| -#include "omaha/core/core_metrics.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -Scheduler::Scheduler(const Core& core)
|
| - : core_(core) {
|
| - CORE_LOG(L1, (_T("[Scheduler::Scheduler]")));
|
| -}
|
| -
|
| -Scheduler::~Scheduler() {
|
| - CORE_LOG(L1, (_T("[Scheduler::~Scheduler]")));
|
| -
|
| - if (update_timer_.get()) {
|
| - update_timer_.reset(NULL);
|
| - }
|
| -
|
| - if (code_red_timer_.get()) {
|
| - code_red_timer_.reset(NULL);
|
| - }
|
| -
|
| - if (timer_queue_) {
|
| - // The destructor blocks on deleting the timer queue and it waits for
|
| - // all timer callbacks to complete.
|
| - ::DeleteTimerQueueEx(timer_queue_, INVALID_HANDLE_VALUE);
|
| - }
|
| -}
|
| -
|
| -HRESULT Scheduler::Initialize() {
|
| - CORE_LOG(L1, (_T("[Scheduler::Initialize]")));
|
| -
|
| - timer_queue_ = ::CreateTimerQueue();
|
| - if (!timer_queue_) {
|
| - return HRESULTFromLastError();
|
| - }
|
| -
|
| - cr_debug_timer_.reset(new HighresTimer);
|
| -
|
| - update_timer_.reset(new QueueTimer(timer_queue_,
|
| - &Scheduler::TimerCallback,
|
| - this));
|
| - code_red_timer_.reset(new QueueTimer(timer_queue_,
|
| - &Scheduler::TimerCallback,
|
| - this));
|
| -
|
| - ConfigManager* config_manager = ConfigManager::Instance();
|
| - int cr_timer_interval_ms = config_manager->GetCodeRedTimerIntervalMs();
|
| - VERIFY1(SUCCEEDED(ScheduleCodeRedTimer(cr_timer_interval_ms)));
|
| -
|
| - int au_timer_interval_ms = config_manager->GetUpdateWorkerStartUpDelayMs();
|
| - VERIFY1(SUCCEEDED(ScheduleUpdateTimer(au_timer_interval_ms)));
|
| -
|
| - return S_OK;
|
| -}
|
| -
|
| -void Scheduler::TimerCallback(QueueTimer* timer) {
|
| - ASSERT1(timer);
|
| - Scheduler* scheduler = static_cast<Scheduler*>(timer->ctx());
|
| - ASSERT1(scheduler);
|
| - scheduler->HandleCallback(timer);
|
| -}
|
| -
|
| -// First, do the useful work and then reschedule the timer. Otherwise, it is
|
| -// possible that timer notifications overlap, and the timer can't be further
|
| -// rescheduled: http://b/1228095
|
| -void Scheduler::HandleCallback(QueueTimer* timer) {
|
| - ConfigManager* config_manager = ConfigManager::Instance();
|
| - if (update_timer_.get() == timer) {
|
| - core_.StartUpdateWorker();
|
| - int au_timer_interval_ms = config_manager->GetAutoUpdateTimerIntervalMs();
|
| - VERIFY1(SUCCEEDED(ScheduleUpdateTimer(au_timer_interval_ms)));
|
| - } else if (code_red_timer_.get() == timer) {
|
| - core_.StartCodeRed();
|
| - int actual_time_ms = static_cast<int>(cr_debug_timer_->GetElapsedMs());
|
| - metric_core_cr_actual_timer_interval_ms = actual_time_ms;
|
| - CORE_LOG(L3, (_T("[code red actual period][%d ms]"), actual_time_ms));
|
| - int cr_timer_interval_ms = config_manager->GetCodeRedTimerIntervalMs();
|
| - VERIFY1(SUCCEEDED(ScheduleCodeRedTimer(cr_timer_interval_ms)));
|
| - } else {
|
| - ASSERT1(false);
|
| - }
|
| -
|
| - // Since core is a long lived process, aggregate its metrics once in a while.
|
| - core_.AggregateMetrics();
|
| -}
|
| -
|
| -HRESULT Scheduler::ScheduleUpdateTimer(int interval_ms) {
|
| - HRESULT hr = update_timer_->Start(interval_ms, 0, WT_EXECUTEONLYONCE);
|
| - if (FAILED(hr)) {
|
| - CORE_LOG(LE, (_T("[can't start update queue timer][0x%08x]"), hr));
|
| - }
|
| - return hr;
|
| -}
|
| -
|
| -HRESULT Scheduler::ScheduleCodeRedTimer(int interval_ms) {
|
| - metric_core_cr_expected_timer_interval_ms = interval_ms;
|
| - cr_debug_timer_->Start();
|
| - HRESULT hr = code_red_timer_->Start(interval_ms, 0, WT_EXECUTEONLYONCE);
|
| - if (FAILED(hr)) {
|
| - CORE_LOG(LE, (_T("[can't start Code Red queue timer][0x%08x]"), hr));
|
| - }
|
| - return hr;
|
| -}
|
| -
|
| -} // namespace omaha
|
| -
|
|
|