// Copyright 2015 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 "ash/metrics/task_switch_metrics_recorder.h" #include "ash/metrics/task_switch_time_tracker.h" namespace ash { namespace { const char kAshTaskSwitchHistogramName[] = "Ash.TimeBetweenTaskSwitches"; const char kDesktopHistogramName[] = "Ash.Desktop.TimeBetweenNavigateToTaskSwitches"; const char kShelfHistogramName[] = "Ash.Shelf.TimeBetweenNavigateToTaskSwitches"; const char kTabStripHistogramName[] = "Ash.Tab.TimeBetweenSwitchToExistingTabUserActions"; const char kAcceleratorWindowCycleHistogramName[] = "Ash.WindowCycleController.TimeBetweenTaskSwitches"; const char kAppListHistogramName[] = "Ash.AppList.TimeBetweenTaskSwitches"; const char kOverviewModeHistogramName[] = "Ash.WindowSelector.TimeBetweenActiveWindowChanges"; // Returns the histogram name for the given |task_switch_source|. const char* GetHistogramName( TaskSwitchMetricsRecorder::TaskSwitchSource task_switch_source) { switch (task_switch_source) { case TaskSwitchMetricsRecorder::ANY: return kAshTaskSwitchHistogramName; case TaskSwitchMetricsRecorder::APP_LIST: return kAppListHistogramName; case TaskSwitchMetricsRecorder::DESKTOP: return kDesktopHistogramName; case TaskSwitchMetricsRecorder::OVERVIEW_MODE: return kOverviewModeHistogramName; case TaskSwitchMetricsRecorder::SHELF: return kShelfHistogramName; case TaskSwitchMetricsRecorder::TAB_STRIP: return kTabStripHistogramName; case TaskSwitchMetricsRecorder::WINDOW_CYCLE_CONTROLLER: return kAcceleratorWindowCycleHistogramName; } NOTREACHED(); return nullptr; } } // namespace TaskSwitchMetricsRecorder::TaskSwitchMetricsRecorder() { } TaskSwitchMetricsRecorder::~TaskSwitchMetricsRecorder() { } void TaskSwitchMetricsRecorder::OnTaskSwitch( TaskSwitchSource task_switch_source) { DCHECK_NE(task_switch_source, ANY); if (task_switch_source != ANY) { OnTaskSwitchInternal(task_switch_source); OnTaskSwitchInternal(ANY); } } void TaskSwitchMetricsRecorder::OnTaskSwitchInternal( TaskSwitchSource task_switch_source) { TaskSwitchTimeTracker* task_switch_time_tracker = FindTaskSwitchTimeTracker(task_switch_source); if (!task_switch_time_tracker) AddTaskSwitchTimeTracker(task_switch_source); task_switch_time_tracker = FindTaskSwitchTimeTracker(task_switch_source); CHECK(task_switch_time_tracker); task_switch_time_tracker->OnTaskSwitch(); } TaskSwitchTimeTracker* TaskSwitchMetricsRecorder::FindTaskSwitchTimeTracker( TaskSwitchSource task_switch_source) { return histogram_map_.get(task_switch_source); } void TaskSwitchMetricsRecorder::AddTaskSwitchTimeTracker( TaskSwitchSource task_switch_source) { CHECK(histogram_map_.find(task_switch_source) == histogram_map_.end()); const char* histogram_name = GetHistogramName(task_switch_source); DCHECK(histogram_name); histogram_map_.add( task_switch_source, make_scoped_ptr(new TaskSwitchTimeTracker(histogram_name))); } } // namespace ash