1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_POWER_PROFILER_POWER_PROFILER_SERVICE_H_ 6#define CONTENT_BROWSER_POWER_PROFILER_POWER_PROFILER_SERVICE_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/singleton.h" 10#include "base/observer_list.h" 11#include "base/task_runner.h" 12#include "base/timer/timer.h" 13#include "content/browser/power_profiler/power_data_provider.h" 14#include "content/browser/power_profiler/power_profiler_observer.h" 15#include "content/common/content_export.h" 16 17namespace content { 18 19// A class used to query power information and notify the observers. 20class CONTENT_EXPORT PowerProfilerService { 21 public: 22 static PowerProfilerService* GetInstance(); 23 24 // Add and remove an observer. 25 void AddObserver(PowerProfilerObserver* observer); 26 void RemoveObserver(PowerProfilerObserver* observer); 27 28 bool IsAvailable() const; 29 std::string GetAccuracyLevel() const; 30 31 virtual ~PowerProfilerService(); 32 33 private: 34 enum Status { 35 UNINITIALIZED, 36 INITIALIZED, // Initialized, profiling has not started. 37 PROFILING 38 }; 39 40 friend struct DefaultSingletonTraits<PowerProfilerService>; 41 friend class PowerProfilerServiceTest; 42 43 PowerProfilerService(); 44 45 PowerProfilerService(scoped_ptr<PowerDataProvider> provider, 46 scoped_refptr<base::TaskRunner> task_runner, 47 const base::TimeDelta& sample_period); 48 49 void Start(); 50 void Stop(); 51 52 // Query power data from PowerDataProvider, executes on the WorkerPool thread. 53 void QueryDataOnTaskRunner(); 54 55 // Initiate the query on the UI thread, the task is delegated to 56 // QueryDataOnTaskRunner. 57 void QueryData(); 58 59 // Executes on the UI thread. 60 void Notify(const PowerEventVector&); 61 62 base::RepeatingTimer<PowerProfilerService> query_power_timer_; 63 scoped_refptr<base::TaskRunner> task_runner_; 64 65 Status status_; 66 67 // Sampling period of power data measurement. 68 base::TimeDelta sample_period_; 69 ObserverList<PowerProfilerObserver> observers_; 70 71 scoped_ptr<PowerDataProvider> data_provider_; 72 73 DISALLOW_COPY_AND_ASSIGN(PowerProfilerService); 74}; 75 76} // namespace content 77 78#endif // CONTENT_BROWSER_POWER_PROFILER_POWER_PROFILER_SERVICE_H_ 79