| 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..e42debf446652fad3d408964a5c7c7f044252188
|
| --- /dev/null
|
| +++ b/content/browser/devtools/devtools_power_handler.cc
|
| @@ -0,0 +1,78 @@
|
| +// 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/json/json_reader.h"
|
| +#include "base/json/json_writer.h"
|
| +#include "base/values.h"
|
| +#include "content/browser/devtools/devtools_protocol_constants.h"
|
| +#include "content/browser/power_profiler/power_profiler_service.h"
|
| +
|
| +namespace content {
|
| +
|
| +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 PowerEvent& event) {
|
| + // Only SoC package power is provided currently.
|
| + DCHECK(event.type == PowerEvent::SOC_PACKAGE);
|
| +
|
| + std::string json_string;
|
| + base::DictionaryValue message_object;
|
| + base::DictionaryValue* params = new base::DictionaryValue();
|
| + base::ListValue* event_list = new base::ListValue();
|
| +
|
| + base::DictionaryValue* event_body = new base::DictionaryValue();
|
| + event_body->SetDouble("timestamp",
|
| + convertMonotonicTimeToWallTime(event.time).ToDoubleT() * 1000.0);
|
| + event_body->SetDouble("value", event.value);
|
| + event_list->Append(event_body);
|
| +
|
| + params->Set(devtools::Power::dataReceived::kParamValue, event_list);
|
| + message_object.Set("params", params);
|
| + message_object.SetString("method", devtools::Power::dataReceived::kName);
|
| + base::JSONWriter::Write(&message_object, &json_string);
|
| +
|
| + SendRawMessage(json_string);
|
| +}
|
| +
|
| +base::Time DevToolsPowerHandler::convertMonotonicTimeToWallTime(
|
| + const base::TimeTicks& tick) {
|
| + return base::Time::UnixEpoch() + (tick - base::TimeTicks::UnixEpoch());
|
| +}
|
| +
|
| +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
|
|
|