app_list_service.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_service.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/command_line.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/metrics/histogram.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/process_info.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace { 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)base::TimeDelta GetTimeFromOriginalProcessStart( 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const CommandLine& command_line) { 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string start_time_string = 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) command_line.GetSwitchValueASCII(switches::kOriginalProcessStartTime); 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int64 remote_start_time; 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::StringToInt64(start_time_string, &remote_start_time); 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return base::Time::Now() - base::Time::FromInternalValue(remote_start_time); 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AppListService::RegisterPrefs(PrefRegistrySimple* registry) { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterInt64Pref(prefs::kLastAppListLaunchPing, 0); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterIntegerPref(prefs::kAppListLaunchCount, 0); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterInt64Pref(prefs::kLastAppListAppLaunchPing, 0); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterIntegerPref(prefs::kAppListAppLaunchCount, 0); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref(prefs::kAppListProfile, std::string()); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterBooleanPref(prefs::kRestartWithAppList, false); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void AppListService::RecordShowTimings(const CommandLine& command_line) { 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The presence of kOriginalProcessStartTime implies that another process 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // has sent us its command line to handle, ie: we are already running. 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (command_line.HasSwitch(switches::kOriginalProcessStartTime)) { 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TimeDelta elapsed = GetTimeFromOriginalProcessStart(command_line); 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (command_line.HasSwitch(switches::kFastStart)) 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UMA_HISTOGRAM_LONG_TIMES("Startup.ShowAppListWarmStartFast", elapsed); 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch else 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UMA_HISTOGRAM_LONG_TIMES("Startup.ShowAppListWarmStart", elapsed); 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } else { 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // base::CurrentProcessInfo::CreationTime() is only defined on win/mac. 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UMA_HISTOGRAM_LONG_TIMES( 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "Startup.ShowAppListColdStart", 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Time::Now() - *base::CurrentProcessInfo::CreationTime()); 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 58