Index: chrome/browser/ui/webui/gpu_internals_ui.cc |
diff --git a/chrome/browser/ui/webui/gpu_internals_ui.cc b/chrome/browser/ui/webui/gpu_internals_ui.cc |
index 8e8bf2c366a08223c3f72ca9e848403167429372..fa9d592ac25ae165ae3435a0e60ef222d908d626 100644 |
--- a/chrome/browser/ui/webui/gpu_internals_ui.cc |
+++ b/chrome/browser/ui/webui/gpu_internals_ui.cc |
@@ -35,6 +35,7 @@ |
#include "chrome/common/url_constants.h" |
#include "content/browser/browser_thread.h" |
#include "content/browser/gpu_process_host.h" |
+#include "content/browser/renderer_host/render_view_host.h" |
#include "content/browser/tab_contents/tab_contents.h" |
#include "grit/browser_resources.h" |
#include "grit/generated_resources.h" |
@@ -75,6 +76,8 @@ class GpuMessageHandler |
virtual void RegisterMessages(); |
// Mesages |
+ void OnBeginTracing(const ListValue* list); |
+ void OnEndTracingAsync(const ListValue* list); |
void OnBrowserBridgeInitialized(const ListValue* list); |
void OnCallAsync(const ListValue* list); |
@@ -82,6 +85,8 @@ class GpuMessageHandler |
Value* OnRequestClientInfo(const ListValue* list); |
Value* OnRequestLogMessages(const ListValue* list); |
+ // Callbacks. |
+ void OnTraceDataCollected(const std::string& json_events); |
void OnGpuInfoUpdate(); |
// Executes the javascript function |function_name| in the renderer, passing |
@@ -95,7 +100,11 @@ class GpuMessageHandler |
// Cache the Singleton for efficiency. |
GpuDataManager* gpu_data_manager_; |
+ void OnEndTracingComplete(); |
+ |
Callback0::Type* gpu_info_update_callback_; |
+ |
+ bool trace_enabled_; |
}; |
//////////////////////////////////////////////////////////////////////////////// |
@@ -141,7 +150,9 @@ std::string GpuHTMLSource::GetMimeType(const std::string&) const { |
// |
//////////////////////////////////////////////////////////////////////////////// |
-GpuMessageHandler::GpuMessageHandler() : gpu_info_update_callback_(NULL) { |
+GpuMessageHandler::GpuMessageHandler() |
+ : gpu_info_update_callback_(NULL) |
+ , trace_enabled_(false) { |
gpu_data_manager_ = GpuDataManager::GetInstance(); |
DCHECK(gpu_data_manager_); |
} |
@@ -151,6 +162,9 @@ GpuMessageHandler::~GpuMessageHandler() { |
gpu_data_manager_->RemoveGpuInfoUpdateCallback(gpu_info_update_callback_); |
delete gpu_info_update_callback_; |
} |
+ |
+ if (trace_enabled_) |
+ OnEndTracingAsync(NULL); |
} |
WebUIMessageHandler* GpuMessageHandler::Attach(WebUI* web_ui) { |
@@ -164,6 +178,12 @@ void GpuMessageHandler::RegisterMessages() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
web_ui_->RegisterMessageCallback( |
+ "beginTracing", |
+ NewCallback(this, &GpuMessageHandler::OnBeginTracing)); |
+ web_ui_->RegisterMessageCallback( |
+ "endTracingAsync", |
+ NewCallback(this, &GpuMessageHandler::OnEndTracingAsync)); |
+ web_ui_->RegisterMessageCallback( |
"browserBridgeInitialized", |
NewCallback(this, &GpuMessageHandler::OnBrowserBridgeInitialized)); |
web_ui_->RegisterMessageCallback( |
@@ -368,6 +388,38 @@ void GpuMessageHandler::OnGpuInfoUpdate() { |
delete gpu_info_val; |
} |
+void GpuMessageHandler::OnBeginTracing(const ListValue* args) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ trace_enabled_ = true; |
+ // TODO(jbates): TracingController::BeginTracing() |
+} |
+ |
+void GpuMessageHandler::OnEndTracingAsync(const ListValue* list) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK(traceEnabled_); |
+ |
+ // TODO(jbates): TracingController::OnEndTracingAsync(new |
+ // Callback(this, GpuMessageHandler::OnEndTracingComplete)) |
+} |
+ |
+void GpuMessageHandler::OnEndTracingComplete() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ traceEnabled_ = false; |
+ web_ui_->CallJavascriptFunction("tracingController.onEndTracingComplete"); |
+} |
+ |
+void GpuMessageHandler::OnTraceDataCollected(const std::string& json_events) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ std::wstring javascript; |
+ javascript += L"tracingController.onTraceDataCollected("; |
+ javascript += UTF8ToWide(json_events); |
+ javascript += L");"; |
+ |
+ web_ui_->GetRenderViewHost()->ExecuteJavascriptInWebFrame(string16(), |
+ WideToUTF16Hack(javascript)); |
+} |
+ |
} // namespace |
@@ -385,4 +437,3 @@ GpuInternalsUI::GpuInternalsUI(TabContents* contents) : WebUI(contents) { |
// Set up the chrome://gpu/ source. |
contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); |
} |
- |