blob: c88097b86d7b92c95ce20b62d4927c8f7b0ec921 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
// 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/protocol/power_handler.h"
#include "content/browser/power_profiler/power_profiler_service.h"
namespace content {
namespace devtools {
namespace power {
typedef DevToolsProtocolClient::Response Response;
PowerHandler::PowerHandler() : enabled_(false) {
}
PowerHandler::~PowerHandler() {
if (enabled_)
PowerProfilerService::GetInstance()->RemoveObserver(this);
}
void PowerHandler::SetClient(scoped_ptr<Client> client) {
client_.swap(client);
}
void PowerHandler::OnPowerEvent(const PowerEventVector& events) {
std::vector<scoped_refptr<PowerEvent>> event_list;
for (const auto& event : events) {
DCHECK(event.type < content::PowerEvent::ID_COUNT);
// Use internal value to be consistent with Blink's
// monotonicallyIncreasingTime.
double timestamp = event.time.ToInternalValue() /
static_cast<double>(base::Time::kMicrosecondsPerMillisecond);
event_list.push_back(PowerEvent::Create()
->set_type(kPowerTypeNames[event.type])
->set_timestamp(timestamp)
->set_value(event.value));
}
client_->DataAvailable(DataAvailableParams::Create()->set_value(event_list));
}
void PowerHandler::Detached() {
if (enabled_) {
PowerProfilerService::GetInstance()->RemoveObserver(this);
enabled_ = false;
}
}
Response PowerHandler::Start() {
if (!PowerProfilerService::GetInstance()->IsAvailable())
return Response::InternalError("Power profiler service unavailable");
if (!enabled_) {
PowerProfilerService::GetInstance()->AddObserver(this);
enabled_ = true;
}
return Response::OK();
}
Response PowerHandler::End() {
if (!PowerProfilerService::GetInstance()->IsAvailable())
return Response::InternalError("Power profiler service unavailable");
if (enabled_) {
PowerProfilerService::GetInstance()->RemoveObserver(this);
enabled_ = false;
}
return Response::OK();
}
Response PowerHandler::CanProfilePower(bool* result) {
*result = PowerProfilerService::GetInstance()->IsAvailable();
return Response::OK();
}
Response PowerHandler::GetAccuracyLevel(std::string* result) {
if (!PowerProfilerService::GetInstance()->IsAvailable())
return Response::InternalError("Power profiler service unavailable");
*result = PowerProfilerService::GetInstance()->GetAccuracyLevel();
return Response::OK();
}
} // namespace power
} // namespace devtools
} // namespace content
|