| Index: content/browser/devtools/devtools_power_handler.cc
|
| diff --git a/content/browser/devtools/devtools_power_handler.cc b/content/browser/devtools/devtools_power_handler.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9bf68f45a7311267ed162bd5165be40251269e93
|
| --- /dev/null
|
| +++ b/content/browser/devtools/devtools_power_handler.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright 2014 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 "content/browser/devtools/devtools_power_handler.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/values.h"
|
| +#include "content/browser/devtools/devtools_protocol_constants.h"
|
| +#include "content/browser/power_profiler/power_profiler_service.h"
|
| +
|
| +namespace content {
|
| +
|
| +static inline base::Time convertMonotonicTimeToWallTime(
|
| + const base::TimeTicks& tick) {
|
| + return base::Time::UnixEpoch() + (tick - base::TimeTicks::UnixEpoch());
|
| +}
|
| +
|
| +DevToolsPowerHandler::DevToolsPowerHandler() {
|
| + RegisterCommandHandler(devtools::Power::start::kName,
|
| + base::Bind(&DevToolsPowerHandler::OnStart,
|
| + base::Unretained(this)));
|
| + RegisterCommandHandler(devtools::Power::end::kName,
|
| + base::Bind(&DevToolsPowerHandler::OnEnd,
|
| + base::Unretained(this)));
|
| +}
|
| +
|
| +DevToolsPowerHandler::~DevToolsPowerHandler() {
|
| +}
|
| +
|
| +void DevToolsPowerHandler::OnPowerEvent(const PowerEventVector& events) {
|
| + base::DictionaryValue* params = new base::DictionaryValue();
|
| + base::ListValue* event_list = new base::ListValue();
|
| +
|
| + std::vector<PowerEvent>::const_iterator iter;
|
| + for (iter = events.begin(); iter != events.end(); ++iter) {
|
| + base::DictionaryValue* event_body = new base::DictionaryValue();
|
| +
|
| + DCHECK(iter->type < PowerEvent::ID_COUNT);
|
| + event_body->SetString("type", kPowerTypeNames[iter->type]);
|
| + event_body->SetDouble("timestamp",
|
| + convertMonotonicTimeToWallTime(iter->time).ToDoubleT() * 1000.0);
|
| + event_body->SetDouble("value", iter->value);
|
| + event_list->Append(event_body);
|
| + }
|
| +
|
| + params->Set(devtools::Power::dataAvailable::kParamValue, event_list);
|
| + SendNotification(devtools::Power::dataAvailable::kName, params);
|
| +}
|
| +
|
| +scoped_refptr<DevToolsProtocol::Response>
|
| +DevToolsPowerHandler::OnStart(
|
| + scoped_refptr<DevToolsProtocol::Command> command) {
|
| + if (PowerProfilerService::GetInstance()->IsAvailable()) {
|
| + PowerProfilerService::GetInstance()->AddObserver(this);
|
| + return command->SuccessResponse(NULL);
|
| + }
|
| +
|
| + return command->InternalErrorResponse("Power profiler service unavailable");
|
| +}
|
| +
|
| +scoped_refptr<DevToolsProtocol::Response>
|
| +DevToolsPowerHandler::OnEnd(scoped_refptr<DevToolsProtocol::Command> command) {
|
| + if (PowerProfilerService::GetInstance()->IsAvailable()) {
|
| + PowerProfilerService::GetInstance()->RemoveObserver(this);
|
| + return command->SuccessResponse(NULL);
|
| + }
|
| +
|
| + return command->InternalErrorResponse("Power profiler service unavailable");
|
| +}
|
| +
|
| +} // namespace content
|
|
|