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 17 namespace content { 18 19 // A class used to query power information and notify the observers. 20 class 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