1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CHROME_BROWSER_METRICS_CHROMEOS_METRICS_PROVIDER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_METRICS_CHROMEOS_METRICS_PROVIDER_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/weak_ptr.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/metrics/perf_provider_chromeos.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/metrics/metrics_provider.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace device { 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class BluetoothAdapter; 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace metrics { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ChromeUserMetricsExtension; 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PrefRegistrySimple; 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PrefService; 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Performs ChromeOS specific metrics logging. 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ChromeOSMetricsProvider : public metrics::MetricsProvider { 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ChromeOSMetricsProvider(); 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~ChromeOSMetricsProvider(); 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static void RegisterPrefs(PrefRegistrySimple* registry); 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Records a crash. 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static void LogCrash(const std::string& crash_type); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Loads hardware class information. When this task is complete, |callback| 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // is run. 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void InitTaskGetHardwareClass(const base::Closure& callback); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // metrics::MetricsProvider: 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnDidCreateMetricsLog() OVERRIDE; 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void ProvideSystemProfileMetrics( 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) metrics::SystemProfileProto* system_profile_proto) OVERRIDE; 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void ProvideStabilityMetrics( 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) metrics::SystemProfileProto* system_profile_proto) OVERRIDE; 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void ProvideGeneralMetrics( 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) metrics::ChromeUserMetricsExtension* uma_proto) OVERRIDE; 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Called on the FILE thread to load hardware class information. 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void InitTaskGetHardwareClassOnFileThread(); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Update the number of users logged into a multi-profile session. 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If the number of users change while the log is open, the call invalidates 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the user count value. 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UpdateMultiProfileUserCount( 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) metrics::SystemProfileProto* system_profile_proto); 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Sets the Bluetooth Adapter instance used for the WriteBluetoothProto() 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // call. 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetBluetoothAdapter(scoped_refptr<device::BluetoothAdapter> adapter); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Writes info about paired Bluetooth devices on this system. 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void WriteBluetoothProto(metrics::SystemProfileProto* system_profile_proto); 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) metrics::PerfProvider perf_provider_; 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Bluetooth Adapter instance for collecting information about paired devices. 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<device::BluetoothAdapter> adapter_; 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Whether the user count was registered at the last log initialization. 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool registered_user_count_at_log_initialization_; 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The user count at the time that a log was last initialized. Contains a 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // valid value only if |registered_user_count_at_log_initialization_| is 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // true. 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint64 user_count_at_log_initialization_; 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Hardware class (e.g., hardware qualification ID). This class identifies 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the configured system components such as CPU, WiFi adapter, etc. 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string hardware_class_; 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::WeakPtrFactory<ChromeOSMetricsProvider> weak_ptr_factory_; 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ChromeOSMetricsProvider); 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CHROME_BROWSER_METRICS_CHROMEOS_METRICS_PROVIDER_H_ 87