| Index: statsreport/metrics.cc
|
| diff --git a/statsreport/metrics.cc b/statsreport/metrics.cc
|
| deleted file mode 100644
|
| index 6cf6a972b0e5b0b74a5e3732f37f81d608cf75d5..0000000000000000000000000000000000000000
|
| --- a/statsreport/metrics.cc
|
| +++ /dev/null
|
| @@ -1,238 +0,0 @@
|
| -// Copyright 2006-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.
|
| -// ========================================================================
|
| -//
|
| -// Implements metrics and metrics collections
|
| -#include "omaha/statsreport/metrics.h"
|
| -#include "omaha/base/synchronized.h"
|
| -
|
| -namespace stats_report {
|
| -// Make sure global stats collection is placed in zeroed storage so as to avoid
|
| -// initialization order snafus.
|
| -MetricCollectionBase g_global_metric_storage = { 0, 0 };
|
| -MetricCollection &g_global_metrics =
|
| - *static_cast<MetricCollection*>(&g_global_metric_storage);
|
| -
|
| -#pragma warning(push)
|
| -// C4640: construction of local static object is not thread-safe.
|
| -// C4073: initializers put in library initialization area.
|
| -#pragma warning(disable : 4640 4073)
|
| -
|
| -// Serialize all metric manipulation and access under this lock.
|
| -//
|
| -// Initializes g_lock before other global objects of user defined types.
|
| -// It assumes the program is single threaded while executing CRT startup and
|
| -// exit code.
|
| -#pragma init_seg(lib)
|
| -omaha::LLock g_lock;
|
| -#pragma warning(pop)
|
| -
|
| -class MetricBase::ObjectLock {
|
| -public:
|
| - ObjectLock(const MetricBase *metric) : metric_(metric) {
|
| - metric_->Lock();
|
| - }
|
| -
|
| - ~ObjectLock() {
|
| - metric_->Unlock();
|
| - }
|
| -
|
| -private:
|
| - MetricBase const *const metric_;
|
| - DISALLOW_EVIL_CONSTRUCTORS(MetricBase::ObjectLock);
|
| -};
|
| -
|
| -void MetricBase::Lock() const {
|
| - g_lock.Lock();
|
| -}
|
| -
|
| -void MetricBase::Unlock() const {
|
| - g_lock.Unlock();
|
| -}
|
| -
|
| -MetricBase::MetricBase(const char *name,
|
| - MetricType type,
|
| - MetricCollectionBase *coll)
|
| - : name_(name), type_(type), next_(coll->first_), coll_(coll) {
|
| - DCHECK_NE(static_cast<MetricCollectionBase*>(NULL), coll_);
|
| - DCHECK_EQ(false, coll_->initialized_);
|
| - coll->first_ = this;
|
| -}
|
| -
|
| -MetricBase::MetricBase(const char *name, MetricType type)
|
| - : name_(name), type_(type), next_(NULL), coll_(NULL) {
|
| -}
|
| -
|
| -MetricBase::~MetricBase() {
|
| - if (coll_) {
|
| - DCHECK_EQ(this, coll_->first_);
|
| - DCHECK(!coll_->initialized_)
|
| - << "Metric destructor called without call to Uninitialize().";
|
| -
|
| - coll_->first_ = next_;
|
| - } else {
|
| - DCHECK(NULL == next_);
|
| - }
|
| -}
|
| -
|
| -void IntegerMetricBase::Set(int64 value) {
|
| - ObjectLock lock(this);
|
| - value_ = value;
|
| -}
|
| -
|
| -int64 IntegerMetricBase::value() const {
|
| - ObjectLock lock(this);
|
| - int64 ret = value_;
|
| - return ret;
|
| -}
|
| -
|
| -void IntegerMetricBase::Increment() {
|
| - ObjectLock lock(this);
|
| - ++value_;
|
| -}
|
| -
|
| -void IntegerMetricBase::Decrement() {
|
| - ObjectLock lock(this);
|
| - --value_;
|
| -}
|
| -
|
| -void IntegerMetricBase::Add(int64 value){
|
| - ObjectLock lock(this);
|
| - value_ += value;
|
| -}
|
| -
|
| -void IntegerMetricBase::Subtract(int64 value) {
|
| - ObjectLock lock(this);
|
| - if (value_ < value)
|
| - value_ = 0;
|
| - else
|
| - value_ -= value;
|
| -}
|
| -
|
| -int64 CountMetric::Reset() {
|
| - ObjectLock lock(this);
|
| - int64 ret = value_;
|
| - value_ = 0;
|
| - return ret;
|
| -}
|
| -
|
| -TimingMetric::TimingData TimingMetric::Reset() {
|
| - ObjectLock lock(this);
|
| - TimingData ret = data_;
|
| - Clear();
|
| - return ret;
|
| -}
|
| -
|
| -uint32 TimingMetric::count() const {
|
| - ObjectLock lock(this);
|
| - uint32 ret = data_.count;
|
| - return ret;
|
| -}
|
| -
|
| -int64 TimingMetric::sum() const {
|
| - ObjectLock lock(this);
|
| - int64 ret = data_.sum;
|
| - return ret;
|
| -}
|
| -
|
| -int64 TimingMetric::minimum() const {
|
| - ObjectLock lock(this);
|
| - int64 ret = data_.minimum;
|
| - return ret;
|
| -}
|
| -
|
| -int64 TimingMetric::maximum() const {
|
| - ObjectLock lock(this);
|
| - int64 ret = data_.maximum;
|
| - return ret;
|
| -}
|
| -
|
| -int64 TimingMetric::average() const {
|
| - ObjectLock lock(this);
|
| -
|
| - int64 ret = 0;
|
| - if (0 == data_.count) {
|
| - DCHECK_EQ(0, data_.sum);
|
| - } else {
|
| - ret = data_.sum / data_.count;
|
| - }
|
| - return ret;
|
| -}
|
| -
|
| -void TimingMetric::AddSample(int64 time_ms) {
|
| - ObjectLock lock(this);
|
| - if (0 == data_.count) {
|
| - data_.minimum = time_ms;
|
| - data_.maximum = time_ms;
|
| - } else {
|
| - if (data_.minimum > time_ms)
|
| - data_.minimum = time_ms;
|
| - if (data_.maximum < time_ms)
|
| - data_.maximum = time_ms;
|
| - }
|
| - data_.count++;
|
| - data_.sum += time_ms;
|
| -}
|
| -
|
| -void TimingMetric::AddSamples(int64 count, int64 total_time_ms) {
|
| - if (0 == count)
|
| - return;
|
| -
|
| - int64 time_ms = total_time_ms / count;
|
| -
|
| - ObjectLock lock(this);
|
| - if (0 == data_.count) {
|
| - data_.minimum = time_ms;
|
| - data_.maximum = time_ms;
|
| - } else {
|
| - if (data_.minimum > time_ms)
|
| - data_.minimum = time_ms;
|
| - if (data_.maximum < time_ms)
|
| - data_.maximum = time_ms;
|
| - }
|
| -
|
| - // TODO(omaha): truncation from 64 to 32 may occur here.
|
| - DCHECK_LE(count, kuint32max);
|
| - data_.count += static_cast<uint32>(count);
|
| - data_.sum += total_time_ms;
|
| -}
|
| -
|
| -void TimingMetric::Clear() {
|
| - memset(&data_, 0, sizeof(data_));
|
| -}
|
| -
|
| -void BoolMetric::Set(bool value) {
|
| - ObjectLock lock(this);
|
| - value_ = value ? kBoolTrue : kBoolFalse;
|
| -}
|
| -
|
| -BoolMetric::TristateBoolValue BoolMetric::Reset() {
|
| - ObjectLock lock(this);
|
| - TristateBoolValue ret = value_;
|
| - value_ = kBoolUnset;
|
| - return ret;
|
| -}
|
| -
|
| -void MetricCollection::Initialize() {
|
| - DCHECK(!initialized());
|
| - initialized_ = true;
|
| -}
|
| -
|
| -void MetricCollection::Uninitialize() {
|
| - DCHECK(initialized());
|
| - initialized_ = false;
|
| -}
|
| -
|
| -
|
| -} // namespace stats_report
|
|
|