Index: content/browser/devtools/devtools_frontend_host.cc |
diff --git a/content/browser/devtools/devtools_frontend_host.cc b/content/browser/devtools/devtools_frontend_host.cc |
index bfa623a140ea327a4f9ae13ff57bf31dd0d0b8f6..ca272efbcbf042513e73f9f04c177a2a8f80659f 100644 |
--- a/content/browser/devtools/devtools_frontend_host.cc |
+++ b/content/browser/devtools/devtools_frontend_host.cc |
@@ -4,10 +4,14 @@ |
#include "content/browser/devtools/devtools_frontend_host.h" |
+#include "base/json/json_writer.h" |
+#include "base/memory/weak_ptr.h" |
#include "content/browser/devtools/devtools_manager_impl.h" |
+#include "content/browser/power_profiler/power_profiler_service.h" |
#include "content/browser/renderer_host/render_view_host_impl.h" |
#include "content/browser/web_contents/web_contents_impl.h" |
#include "content/common/devtools_messages.h" |
+#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/devtools_client_host.h" |
#include "content/public/browser/devtools_frontend_host_delegate.h" |
@@ -32,10 +36,15 @@ DevToolsFrontendHost::DevToolsFrontendHost( |
WebContentsImpl* web_contents, |
DevToolsFrontendHostDelegate* delegate) |
: WebContentsObserver(web_contents), |
- delegate_(delegate) { |
+ delegate_(delegate), |
+ weak_factory_(this), |
+ power_profiler_host_(new DevToolsPowerProfilerHost( |
+ weak_factory_.GetWeakPtr())) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
} |
DevToolsFrontendHost::~DevToolsFrontendHost() { |
+ power_profiler_host_->UnRegister(); |
DevToolsManager::GetInstance()->ClientHostClosing(this); |
} |
@@ -65,6 +74,12 @@ bool DevToolsFrontendHost::OnMessageReceived( |
OnDispatchOnInspectorBackend) |
IPC_MESSAGE_HANDLER(DevToolsHostMsg_DispatchOnEmbedder, |
OnDispatchOnEmbedder) |
+ IPC_MESSAGE_HANDLER(DevToolsHostMsg_PowerProfileSupported, |
+ OnPowerProfileStatus) |
+ IPC_MESSAGE_HANDLER(DevToolsHostMsg_StartPowerProfile, OnStartProfile) |
+ IPC_MESSAGE_HANDLER(DevToolsHostMsg_StopPowerProfile, OnStopProfile) |
+ IPC_MESSAGE_HANDLER(DevToolsHostMsg_SetPowerProfileResolution, |
+ OnSetResolution) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
@@ -93,4 +108,34 @@ void DevToolsFrontendHost::OnDispatchOnEmbedder( |
delegate_->DispatchOnEmbedder(message); |
} |
+void DevToolsFrontendHost::OnPowerProfileStatus() { |
+ bool is_supported = true; |
+ if (!PowerProfilerService::Get() || PowerProfilerService::UNINITIALIZED == |
+ PowerProfilerService::Get()->status()) |
+ is_supported = false; |
+ std::string json_string; |
+ base::DictionaryValue message_object; |
+ base::DictionaryValue* params = new base::DictionaryValue(); |
+ params->Set("isSupported", base::Value::CreateBooleanValue(is_supported)); |
+ message_object.Set("params", params); |
+ message_object.SetString("method", "Power.powerProfileSupported"); |
+ base::JSONWriter::Write(&message_object, &json_string); |
+ DispatchOnInspectorFrontend(json_string); |
+} |
+ |
+void DevToolsFrontendHost::OnStartProfile() { |
+ power_profiler_host_->Register(); |
+} |
+ |
+void DevToolsFrontendHost::OnStopProfile() { |
+ power_profiler_host_->UnRegister(); |
+} |
+ |
+void DevToolsFrontendHost::OnSetResolution(unsigned resolution) { |
+ assert (resolution >= 0 && |
+ resolution < static_cast<unsigned>(PowerProfilerHost::TYPE_COUNT)); |
+ power_profiler_host_->SetResolution( |
+ static_cast<PowerProfilerHost::Resolution>(resolution)); |
+} |
+ |
} // namespace content |