| Index: chrome/browser/ui/uma_browsing_activity_observer.cc
|
| ===================================================================
|
| --- chrome/browser/ui/uma_browsing_activity_observer.cc (revision 0)
|
| +++ chrome/browser/ui/uma_browsing_activity_observer.cc (revision 0)
|
| @@ -0,0 +1,88 @@
|
| +// Copyright (c) 2012 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/ui/uma_browsing_activity_observer.h"
|
| +
|
| +#include "base/metrics/histogram.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/browser_list.h"
|
| +#include "chrome/browser/ui/browser_window.h"
|
| +#include "chrome/common/chrome_notification_types.h"
|
| +#include "content/public/browser/navigation_details.h"
|
| +#include "content/public/browser/notification_service.h"
|
| +#include "content/public/browser/render_process_host.h"
|
| +
|
| +namespace chrome {
|
| +namespace {
|
| +
|
| +UMABrowsingActivityObserver* g_instance = NULL;
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +void UMABrowsingActivityObserver::Init() {
|
| + DCHECK(!g_instance);
|
| + DCHECK(BrowserList::empty()); // Must be created before any Browsers are.
|
| + g_instance = new UMABrowsingActivityObserver;
|
| +}
|
| +
|
| +UMABrowsingActivityObserver::UMABrowsingActivityObserver() {
|
| + registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
|
| + content::NotificationService::AllSources());
|
| + registrar_.Add(this, content::NOTIFICATION_APP_TERMINATING,
|
| + content::NotificationService::AllSources());
|
| +}
|
| +
|
| +UMABrowsingActivityObserver::~UMABrowsingActivityObserver() {
|
| +}
|
| +
|
| +void UMABrowsingActivityObserver::Observe(
|
| + int type,
|
| + const content::NotificationSource& source,
|
| + const content::NotificationDetails& details) {
|
| + if (type == content::NOTIFICATION_NAV_ENTRY_COMMITTED) {
|
| + const content::LoadCommittedDetails& load =
|
| + *content::Details<content::LoadCommittedDetails>(details).ptr();
|
| + if (!load.is_navigation_to_different_page())
|
| + return; // Don't log for subframes or other trivial types.
|
| +
|
| + LogRenderProcessHostCount();
|
| + LogBrowserTabCount();
|
| + } else if (type == content::NOTIFICATION_APP_TERMINATING) {
|
| + delete g_instance;
|
| + g_instance = NULL;
|
| + }
|
| +}
|
| +
|
| +void UMABrowsingActivityObserver::LogRenderProcessHostCount() const {
|
| + int hosts_count = 0;
|
| + for (content::RenderProcessHost::iterator i(
|
| + content::RenderProcessHost::AllHostsIterator());
|
| + !i.IsAtEnd(); i.Advance())
|
| + ++hosts_count;
|
| + UMA_HISTOGRAM_CUSTOM_COUNTS("MPArch.RPHCountPerLoad", hosts_count,
|
| + 1, 50, 50);
|
| +}
|
| +
|
| +void UMABrowsingActivityObserver::LogBrowserTabCount() const {
|
| + int tab_count = 0;
|
| + for (BrowserList::const_iterator browser_iterator = BrowserList::begin();
|
| + browser_iterator != BrowserList::end(); browser_iterator++) {
|
| + // Record how many tabs each window has open.
|
| + Browser* browser = (*browser_iterator);
|
| + UMA_HISTOGRAM_CUSTOM_COUNTS("Tabs.TabCountPerWindow",
|
| + browser->tab_count(), 1, 200, 50);
|
| + tab_count += browser->tab_count();
|
| +
|
| + if (browser->window()->IsActive()) {
|
| + // Record how many tabs the active window has open.
|
| + UMA_HISTOGRAM_CUSTOM_COUNTS("Tabs.TabCountActiveWindow",
|
| + browser->tab_count(), 1, 200, 50);
|
| + }
|
| + }
|
| + // Record how many tabs total are open (across all windows).
|
| + UMA_HISTOGRAM_CUSTOM_COUNTS("Tabs.TabCountPerLoad", tab_count, 1, 200, 50);
|
| +}
|
| +
|
| +} // namespace chrome
|
|
|
| Property changes on: chrome\browser\ui\uma_browsing_activity_observer.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|