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