summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvivek.vg@samsung.com <vivek.vg@samsung.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-26 08:10:46 +0000
committervivek.vg@samsung.com <vivek.vg@samsung.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-26 08:10:46 +0000
commit31c017222fa340a24202b3c94c5f290a8ccb3b16 (patch)
treeda22afc478e9ad6d1fd370f48290c3b8e6a4f3d4
parentcf4e1ef34b15da65086f6101cdea2528118ec5e4 (diff)
downloadchromium_src-31c017222fa340a24202b3c94c5f290a8ccb3b16.zip
chromium_src-31c017222fa340a24202b3c94c5f290a8ccb3b16.tar.gz
chromium_src-31c017222fa340a24202b3c94c5f290a8ccb3b16.tar.bz2
[Chromium] [PowerProfiler] Support accuracy level attribute for power data provider.
Adding support for providing accuracy level of the power data provider. BUG=384299 Review URL: https://codereview.chromium.org/332943005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@279956 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/browser/devtools/devtools_power_handler.cc18
-rw-r--r--content/browser/devtools/devtools_power_handler.h2
-rw-r--r--content/browser/power_profiler/power_data_provider.h9
-rw-r--r--content/browser/power_profiler/power_data_provider_ia_win.h1
-rw-r--r--content/browser/power_profiler/power_profiler_service.cc15
-rw-r--r--content/browser/power_profiler/power_profiler_service.h3
-rw-r--r--content/browser/power_profiler/power_profiler_service_unittest.cc2
7 files changed, 48 insertions, 2 deletions
diff --git a/content/browser/devtools/devtools_power_handler.cc b/content/browser/devtools/devtools_power_handler.cc
index 8915c03..d71482f 100644
--- a/content/browser/devtools/devtools_power_handler.cc
+++ b/content/browser/devtools/devtools_power_handler.cc
@@ -21,6 +21,11 @@ DevToolsPowerHandler::DevToolsPowerHandler() {
RegisterCommandHandler(devtools::Power::canProfilePower::kName,
base::Bind(&DevToolsPowerHandler::OnCanProfilePower,
base::Unretained(this)));
+ // TODO(vivekg): Replace hardcoded "Power.getAccuracyLevel" with
+ // devtools::Power::getAccuracyLevel::kName once crrev.com/336713005 lands
+ RegisterCommandHandler("Power.getAccuracyLevel" ,
+ base::Bind(&DevToolsPowerHandler::OnGetAccuracyLevel,
+ base::Unretained(this)));
}
DevToolsPowerHandler::~DevToolsPowerHandler() {
@@ -80,6 +85,19 @@ DevToolsPowerHandler::OnCanProfilePower(
return command->SuccessResponse(result);
}
+scoped_refptr<DevToolsProtocol::Response>
+DevToolsPowerHandler::OnGetAccuracyLevel(
+ scoped_refptr<DevToolsProtocol::Command> command) {
+ if (PowerProfilerService::GetInstance()->IsAvailable()) {
+ base::DictionaryValue* result = new base::DictionaryValue();
+ result->SetString(
+ devtools::kResult,
+ PowerProfilerService::GetInstance()->GetAccuracyLevel());
+ return command->SuccessResponse(result);
+ }
+ return command->InternalErrorResponse("Power profiler service unavailable");
+}
+
void DevToolsPowerHandler::OnClientDetached() {
PowerProfilerService::GetInstance()->RemoveObserver(this);
}
diff --git a/content/browser/devtools/devtools_power_handler.h b/content/browser/devtools/devtools_power_handler.h
index 6042eab..25498bf 100644
--- a/content/browser/devtools/devtools_power_handler.h
+++ b/content/browser/devtools/devtools_power_handler.h
@@ -31,6 +31,8 @@ class DevToolsPowerHandler
scoped_refptr<DevToolsProtocol::Command> command);
scoped_refptr<DevToolsProtocol::Response> OnCanProfilePower(
scoped_refptr<DevToolsProtocol::Command> command);
+ scoped_refptr<DevToolsProtocol::Response> OnGetAccuracyLevel(
+ scoped_refptr<DevToolsProtocol::Command> command);
DISALLOW_COPY_AND_ASSIGN(DevToolsPowerHandler);
};
diff --git a/content/browser/power_profiler/power_data_provider.h b/content/browser/power_profiler/power_data_provider.h
index 85f67e7..897bc9b 100644
--- a/content/browser/power_profiler/power_data_provider.h
+++ b/content/browser/power_profiler/power_data_provider.h
@@ -21,6 +21,12 @@ typedef std::vector<PowerEvent> PowerEventVector;
// A class used to get power usage.
class PowerDataProvider {
public:
+ enum AccuracyLevel {
+ High,
+ Moderate,
+ Low
+ };
+
static scoped_ptr<PowerDataProvider> Create();
PowerDataProvider() {}
@@ -31,6 +37,9 @@ class PowerDataProvider {
// Returns sampling rate at which the provider can operate.
virtual base::TimeDelta GetSamplingRate() = 0;
+
+ // Returns accuracy level of the provider.
+ virtual AccuracyLevel GetAccuracyLevel() = 0;
};
} // namespace content
diff --git a/content/browser/power_profiler/power_data_provider_ia_win.h b/content/browser/power_profiler/power_data_provider_ia_win.h
index 2c7e489..925ca16 100644
--- a/content/browser/power_profiler/power_data_provider_ia_win.h
+++ b/content/browser/power_profiler/power_data_provider_ia_win.h
@@ -20,6 +20,7 @@ class PowerDataProviderIA : public PowerDataProvider {
bool Initialize();
virtual PowerEventVector GetData() OVERRIDE;
virtual base::TimeDelta GetSamplingRate() OVERRIDE;
+ virtual AccuracyLevel GetAccuracyLevel() OVERRIDE { return High; }
private:
CIntelPowerGadgetLib energy_lib_;
diff --git a/content/browser/power_profiler/power_profiler_service.cc b/content/browser/power_profiler/power_profiler_service.cc
index 026b42ab..84ddb1b 100644
--- a/content/browser/power_profiler/power_profiler_service.cc
+++ b/content/browser/power_profiler/power_profiler_service.cc
@@ -42,10 +42,23 @@ PowerProfilerService::PowerProfilerService(
PowerProfilerService::~PowerProfilerService() {
}
-bool PowerProfilerService::IsAvailable() {
+bool PowerProfilerService::IsAvailable() const {
return status_ != UNINITIALIZED;
}
+std::string PowerProfilerService::GetAccuracyLevel() const {
+ DCHECK(IsAvailable());
+ switch (data_provider_->GetAccuracyLevel()) {
+ case PowerDataProvider::High:
+ return "High";
+ case PowerDataProvider::Moderate:
+ return "Moderate";
+ case PowerDataProvider::Low:
+ return "Low";
+ }
+ return "";
+}
+
PowerProfilerService* PowerProfilerService::GetInstance() {
return Singleton<PowerProfilerService>::get();
}
diff --git a/content/browser/power_profiler/power_profiler_service.h b/content/browser/power_profiler/power_profiler_service.h
index 35f2f65..4daae28f 100644
--- a/content/browser/power_profiler/power_profiler_service.h
+++ b/content/browser/power_profiler/power_profiler_service.h
@@ -25,7 +25,8 @@ class CONTENT_EXPORT PowerProfilerService {
void AddObserver(PowerProfilerObserver* observer);
void RemoveObserver(PowerProfilerObserver* observer);
- bool IsAvailable();
+ bool IsAvailable() const;
+ std::string GetAccuracyLevel() const;
virtual ~PowerProfilerService();
diff --git a/content/browser/power_profiler/power_profiler_service_unittest.cc b/content/browser/power_profiler/power_profiler_service_unittest.cc
index f7f77dc..f0451f3 100644
--- a/content/browser/power_profiler/power_profiler_service_unittest.cc
+++ b/content/browser/power_profiler/power_profiler_service_unittest.cc
@@ -40,6 +40,8 @@ class TestPowerDataProvider : public PowerDataProvider {
return base::TimeDelta::FromMilliseconds(kDefaultSamplePeriodMs);
}
+ virtual AccuracyLevel GetAccuracyLevel() OVERRIDE { return High; }
+
private:
int num_events_to_send_;
DISALLOW_COPY_AND_ASSIGN(TestPowerDataProvider);