| Index: chrome/browser/extensions/extension_metrics_module.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_metrics_module.cc (revision 0)
|
| +++ chrome/browser/extensions/extension_metrics_module.cc (revision 0)
|
| @@ -0,0 +1,153 @@
|
| +// Copyright (c) 2010 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/extensions/extension_metrics_module.h"
|
| +
|
| +#include "base/histogram.h"
|
| +#include "chrome/common/extensions/extension.h"
|
| +#include "chrome/browser/metrics/user_metrics.h"
|
| +
|
| +namespace {
|
| +
|
| +// Build the full name of a metrics for the given extension. Each metric
|
| +// is made up of the unique name within the extension followed by the
|
| +// extension's id. This keeps the metrics from one extension unique from
|
| +// other extensions, as well as those metrics from chrome itself.
|
| +std::string BuildMetricName(const std::string& name,
|
| + const Extension* extension) {
|
| + std::string full_name(name);
|
| + full_name += extension->id();
|
| + return full_name;
|
| +}
|
| +
|
| +} // anonymous namespace
|
| +
|
| +// These extension function classes are enabled only if the
|
| +// enable-metrics-extension-api command line switch is used. Refer to
|
| +// extension_function_dispatcher.cc to see how they are enabled.
|
| +
|
| +bool MetricsRecordUserActionFunction::RunImpl() {
|
| + std::string name;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_STRING));
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetAsString(&name));
|
| +
|
| + name = BuildMetricName(name, GetExtension());
|
| + UserMetrics::RecordComputedAction(name, profile());
|
| + return true;
|
| +}
|
| +
|
| +bool MetricsHistogramHelperFunction::GetNameAndSample(std::string* name,
|
| + int* sample) {
|
| + EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_LIST));
|
| + const ListValue* args = args_as_list();
|
| +
|
| + EXTENSION_FUNCTION_VALIDATE(args->GetString(0, name));
|
| + EXTENSION_FUNCTION_VALIDATE(args->GetInteger(1, sample));
|
| + return true;
|
| +}
|
| +
|
| +bool MetricsHistogramHelperFunction::RecordValue(const std::string& name,
|
| + Histogram::ClassType type,
|
| + int min,
|
| + int max,
|
| + size_t buckets,
|
| + int sample) {
|
| + std::string full_name = BuildMetricName(name, GetExtension());
|
| + scoped_refptr<Histogram> counter;
|
| + if (type == Histogram::LINEAR_HISTOGRAM) {
|
| + counter = LinearHistogram::FactoryGet(full_name,
|
| + min,
|
| + max,
|
| + buckets,
|
| + Histogram::kUmaTargetedHistogramFlag);
|
| + } else {
|
| + counter = Histogram::FactoryGet(full_name,
|
| + min,
|
| + max,
|
| + buckets,
|
| + Histogram::kUmaTargetedHistogramFlag);
|
| + }
|
| +
|
| + counter->Add(sample);
|
| + return true;
|
| +}
|
| +
|
| +bool MetricsRecordValueFunction::RunImpl() {
|
| + EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_LIST));
|
| + const ListValue* args = args_as_list();
|
| +
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(args->GetInteger(1, &sample));
|
| +
|
| + // Get the histogram parameters from the metric type object.
|
| + DictionaryValue* metric_type;
|
| + EXTENSION_FUNCTION_VALIDATE(args->GetDictionary(0, &metric_type));
|
| +
|
| + std::string name;
|
| + std::string type;
|
| + int min;
|
| + int max;
|
| + int buckets;
|
| + EXTENSION_FUNCTION_VALIDATE(metric_type->GetString(L"metricName", &name));
|
| + EXTENSION_FUNCTION_VALIDATE(metric_type->GetString(L"type", &type));
|
| + EXTENSION_FUNCTION_VALIDATE(metric_type->GetInteger(L"min", &min));
|
| + EXTENSION_FUNCTION_VALIDATE(metric_type->GetInteger(L"max", &max));
|
| + EXTENSION_FUNCTION_VALIDATE(metric_type->GetInteger(L"buckets", &buckets));
|
| +
|
| + Histogram::ClassType histogram_type(type == "histogram-linear" ?
|
| + Histogram::LINEAR_HISTOGRAM : Histogram::HISTOGRAM);
|
| + return RecordValue(name, histogram_type, min, max, buckets, sample);
|
| +}
|
| +
|
| +bool MetricsRecordPercentageFunction::RunImpl() {
|
| + std::string name;
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(GetNameAndSample(&name, &sample));
|
| + return RecordValue(name, Histogram::LINEAR_HISTOGRAM, 1, 101, 102, sample);
|
| +}
|
| +
|
| +bool MetricsRecordCountFunction::RunImpl() {
|
| + std::string name;
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(GetNameAndSample(&name, &sample));
|
| + return RecordValue(name, Histogram::HISTOGRAM, 1, 1000000, 50, sample);
|
| +}
|
| +
|
| +bool MetricsRecordSmallCountFunction::RunImpl() {
|
| + std::string name;
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(GetNameAndSample(&name, &sample));
|
| + return RecordValue(name, Histogram::HISTOGRAM, 1, 100, 50, sample);
|
| +}
|
| +
|
| +bool MetricsRecordMediumCountFunction::RunImpl() {
|
| + std::string name;
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(GetNameAndSample(&name, &sample));
|
| + return RecordValue(name, Histogram::HISTOGRAM, 1, 10000, 50, sample);
|
| +}
|
| +
|
| +bool MetricsRecordTimeFunction::RunImpl() {
|
| + std::string name;
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(GetNameAndSample(&name, &sample));
|
| + static const int kTenSecMs = 10 * 1000;
|
| + return RecordValue(name, Histogram::HISTOGRAM, 1, kTenSecMs, 50, sample);
|
| +}
|
| +
|
| +bool MetricsRecordMediumTimeFunction::RunImpl() {
|
| + std::string name;
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(GetNameAndSample(&name, &sample));
|
| + static const int kThreeMinMs = 3 * 60 * 1000;
|
| + return RecordValue(name, Histogram::HISTOGRAM, 1, kThreeMinMs, 50, sample);
|
| +}
|
| +
|
| +bool MetricsRecordLongTimeFunction::RunImpl() {
|
| + std::string name;
|
| + int sample;
|
| + EXTENSION_FUNCTION_VALIDATE(GetNameAndSample(&name, &sample));
|
| + static const int kOneHourMs = 60 * 60 * 1000;
|
| + return RecordValue(name, Histogram::HISTOGRAM, 1, kOneHourMs, 50, sample);
|
| +}
|
|
|
| Property changes on: chrome\browser\extensions\extension_metrics_module.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|