summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/gpu_process_host_ui_shim.cc3
-rw-r--r--chrome/browser/resources/gpu_internals.html11
-rw-r--r--chrome/browser/resources/gpu_internals/raw_events_view.css14
-rw-r--r--chrome/browser/resources/gpu_internals/raw_events_view.html9
-rw-r--r--chrome/browser/resources/gpu_internals/raw_events_view.js76
-rw-r--r--chrome/browser/resources/gpu_internals/tracing_controller.css7
-rw-r--r--chrome/browser/resources/gpu_internals/tracing_controller.html14
-rw-r--r--chrome/browser/resources/gpu_internals/tracing_controller.js36
-rw-r--r--chrome/browser/ui/webui/gpu_internals_ui.cc55
9 files changed, 189 insertions, 36 deletions
diff --git a/chrome/browser/gpu_process_host_ui_shim.cc b/chrome/browser/gpu_process_host_ui_shim.cc
index 380a37c..bc5b9da 100644
--- a/chrome/browser/gpu_process_host_ui_shim.cc
+++ b/chrome/browser/gpu_process_host_ui_shim.cc
@@ -15,6 +15,7 @@
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
#include "content/common/gpu_messages.h"
+#include "gpu/common/gpu_trace_event.h"
#if defined(OS_LINUX)
// These two #includes need to come after gpu_messages.h.
@@ -269,6 +270,7 @@ void GpuProcessHostUIShim::EstablishGpuChannel(
int renderer_id,
EstablishChannelCallback *callback) {
DCHECK(CalledOnValidThread());
+ GPU_TRACE_EVENT0("gpu", "GpuProcessHostUIShim::EstablishGpuChannel");
linked_ptr<EstablishChannelCallback> wrapped_callback(callback);
// If GPU features are already blacklisted, no need to establish the channel.
@@ -539,4 +541,3 @@ void GpuProcessHostUIShim::OnScheduleComposite(int renderer_id,
}
#endif
-
diff --git a/chrome/browser/resources/gpu_internals.html b/chrome/browser/resources/gpu_internals.html
index 8763249..5c17de7 100644
--- a/chrome/browser/resources/gpu_internals.html
+++ b/chrome/browser/resources/gpu_internals.html
@@ -29,6 +29,7 @@ body {
<link rel="stylesheet" href="gpu_internals/timeline_view.css">
<link rel="stylesheet" href="gpu_internals/timeline.css">
<link rel="stylesheet" href="gpu_internals/tracing_controller.css">
+<link rel="stylesheet" href="gpu_internals/raw_events_view.css">
<script src="chrome://resources/js/cr.js"></script>
<script src="chrome://resources/js/cr/event_target.js"></script>
<script src="chrome://resources/js/cr/ui.js"></script>
@@ -44,6 +45,7 @@ body {
<script src="gpu_internals/timeline_track.js"></script>
<script src="gpu_internals/fast_rect_renderer.js"></script>
<script src="gpu_internals/timeline_view.js"></script>
+<script src="gpu_internals/raw_events_view.js"></script>
<script src="gpu_internals/simulated_trace_data.js"></script>
<script>
@@ -62,6 +64,12 @@ function onLoad() {
// Create the views.
cr.ui.decorate('#info-view', gpu.InfoView);
+ var rawEventsView = $('raw-events-view');
+ if (browserBridge.debugMode)
+ cr.ui.decorate('#raw-events-view', gpu.RawEventsView);
+ else
+ rawEventsView.parentNode.removeChild(rawEventsView);
+
timelineView = $('timeline-view');
if (browserBridge.debugMode)
cr.ui.decorate(timelineView, gpu.TimelineView);
@@ -100,9 +108,8 @@ document.addEventListener('DOMContentLoaded', onLoad);
<!-- Tabs -->
<div id="main-tabs">
<include src="gpu_internals/info_view.html">
+ <include src="gpu_internals/raw_events_view.html">
<include src="gpu_internals/timeline_view.html">
</div>
-
- <include src="gpu_internals/tracing_controller.html">
</body>
</html>
diff --git a/chrome/browser/resources/gpu_internals/raw_events_view.css b/chrome/browser/resources/gpu_internals/raw_events_view.css
new file mode 100644
index 0000000..c282960
--- /dev/null
+++ b/chrome/browser/resources/gpu_internals/raw_events_view.css
@@ -0,0 +1,14 @@
+/*
+Copyright (c) 2011 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.
+*/
+#raw-events-view {
+ padding: 4px;
+}
+
+#raw-events-view-data {
+ cursor: text;
+ font-family: monospace;
+ -webkit-user-select: text;
+} \ No newline at end of file
diff --git a/chrome/browser/resources/gpu_internals/raw_events_view.html b/chrome/browser/resources/gpu_internals/raw_events_view.html
new file mode 100644
index 0000000..464bba8
--- /dev/null
+++ b/chrome/browser/resources/gpu_internals/raw_events_view.html
@@ -0,0 +1,9 @@
+<!--
+Copyright (c) 2011 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.
+-->
+<div id=raw-events-view label="Raw Events">
+ <div class="raw-events-view-data">
+ </div>
+</div>
diff --git a/chrome/browser/resources/gpu_internals/raw_events_view.js b/chrome/browser/resources/gpu_internals/raw_events_view.js
new file mode 100644
index 0000000..5ff981a
--- /dev/null
+++ b/chrome/browser/resources/gpu_internals/raw_events_view.js
@@ -0,0 +1,76 @@
+// Copyright (c) 2011 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.
+
+/**
+ *
+ * @fileoverview Displays the traced data in raw format. Its primarily
+ * usefulness is to allow users to copy-paste their data in an easy to
+ * read format for bug reports.
+ *
+ */
+cr.define('gpu', function() {
+ /**
+ * Provides information on the GPU process and underlying graphics hardware.
+ * @constructor
+ * @extends {gpu.Tab}
+ */
+ var RawEventsView = cr.ui.define(gpu.Tab);
+
+ RawEventsView.prototype = {
+ __proto__: gpu.Tab.prototype,
+
+ decorate: function() {
+ tracingController.addEventListener('traceBegun', this.refresh.bind(this));
+ tracingController.addEventListener('traceEnded', this.refresh.bind(this));
+ this.addEventListener('selectedChange', this.onSelectedChange_);
+ this.refresh();
+ },
+
+ onSelectedChange_: function() {
+ if (this.selected) {
+ if (!tracingController.traceEvents.length) {
+ tracingController.beginTracing();
+ }
+ if (this.needsRefreshOnShow_) {
+ this.needsRefreshOnShow_ = false;
+ this.refresh();
+ }
+ }
+ },
+
+ /**
+ * Updates the view based on its currently known data
+ */
+ refresh: function() {
+ if (this.parentNode.selectedTab != this) {
+ this.needsRefreshOnShow_ = true;
+ }
+
+ var dataElement = this.querySelector('.raw-events-view-data');
+ if (tracingController.isTracingEnabled) {
+ var tmp = 'Still tracing. ' +
+ 'Uncheck the enable tracing button to see traced data.';
+ dataElement.textContent = tmp;
+ } else if (!tracingController.traceEvents.length) {
+ dataElement.textContent =
+ 'No trace data collected. Collect data first.';
+ } else {
+ var events = tracingController.traceEvents;
+ var text = JSON.stringify(events);
+ dataElement.textContent = text;
+
+ var selection = window.getSelection();
+ selection.removeAllRanges();
+ var range = document.createRange();
+ range.selectNodeContents(dataElement);
+ selection.addRange(range);
+ }
+ }
+
+ };
+
+ return {
+ RawEventsView: RawEventsView
+ };
+});
diff --git a/chrome/browser/resources/gpu_internals/tracing_controller.css b/chrome/browser/resources/gpu_internals/tracing_controller.css
index 331fe85..895d695 100644
--- a/chrome/browser/resources/gpu_internals/tracing_controller.css
+++ b/chrome/browser/resources/gpu_internals/tracing_controller.css
@@ -26,8 +26,7 @@ found in the LICENSE file.
border-top-right-radius: 8px;
border-top-left-radius: 8px;
background-clip: border-box;
- background: rgb(255,0,0);
- border-left: 1px solid black;
- border-top: 1px solid black;
- border-right: 1px solid black;
+ background: rgb(255, 0, 0);
+ border: 1px solid black;
+ border-bottom: 0;
}
diff --git a/chrome/browser/resources/gpu_internals/tracing_controller.html b/chrome/browser/resources/gpu_internals/tracing_controller.html
deleted file mode 100644
index 7db2635..0000000
--- a/chrome/browser/resources/gpu_internals/tracing_controller.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Copyright (c) 2011 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.
--->
-<div hidden>
- <div id="gpu-tracing-start-button-template" class="gpu-tracing-start-button">
- Record new data
- </div>
- <div id="gpu-tracing-overlay-template" class="gpu-tracing-overlay">
- <div class="gpu-tracing-status">Tracing active.</div>
- <button class="gpu-tracing-stop-button">Stop tracing</button>
- </div>
-</div>
diff --git a/chrome/browser/resources/gpu_internals/tracing_controller.js b/chrome/browser/resources/gpu_internals/tracing_controller.js
index f46e417..8d7471b 100644
--- a/chrome/browser/resources/gpu_internals/tracing_controller.js
+++ b/chrome/browser/resources/gpu_internals/tracing_controller.js
@@ -7,20 +7,29 @@
* @fileoverview State and UI for trace data collection.
*/
cr.define('gpu', function() {
+
function TracingController() {
- this.overlay_ = $('gpu-tracing-overlay-template').cloneNode(true);
- this.overlay_.removeAttribute('id');
- cr.ui.decorate(this.overlay_, gpu.Overlay);
+ this.startButton_ = document.createElement('div');
+ this.startButton_.className = 'gpu-tracing-start-button';
+ this.startButton_.textContent = 'Start tracing';
+ this.startButton_.onclick = this.beginTracing.bind(this);
+ document.body.appendChild(this.startButton_);
- this.traceEvents_ = [];
+ this.overlay_ = document.createElement('div');
+ this.overlay_.className = 'gpu-tracing-overlay';
+
+ cr.ui.decorate(this.overlay_, gpu.Overlay);
- var startButton = $('gpu-tracing-start-button-template').cloneNode(true);
- startButton.removeAttribute('id');
- document.body.appendChild(startButton);
- startButton.onclick = this.beginTracing.bind(this);
+ var statusDiv = document.createElement('div');
+ statusDiv.textContent = 'Tracing active.';
+ this.overlay_.appendChild(statusDiv);
- var stopButton = this.overlay_.querySelector('.gpu-tracing-stop-button');
+ var stopButton = document.createElement('button');
stopButton.onclick = this.endTracing.bind(this);
+ stopButton.innerText = 'Stop tracing';
+ this.overlay_.appendChild(stopButton);
+
+ this.traceEvents_ = [];
}
TracingController.prototype = {
@@ -93,17 +102,18 @@ cr.define('gpu', function() {
console.log('Finishing trace');
if (!browserBridge.debugMode) {
- chrome.send('beginToEndTracing');
+ chrome.send('endTracingAsync');
} else {
- var events = getTimelineTestData1();
+ var events = window.getTimelineTestData1 ?
+ getTimelineTestData1() : [];
this.onTraceDataCollected(events);
window.setTimeout(this.onEndTracingComplete.bind(this), 250);
}
},
+
/**
- * Called by the browser when all processes ack tracing
- * having completed.
+ * Called by the browser when all processes complete tracing.
*/
onEndTracingComplete: function() {
this.overlay_.visible = false;
diff --git a/chrome/browser/ui/webui/gpu_internals_ui.cc b/chrome/browser/ui/webui/gpu_internals_ui.cc
index 8e8bf2c..0729ef1 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(trace_enabled_);
+
+ // TODO(jbates): TracingController::OnEndTracingAsync(new
+ // Callback(this, GpuMessageHandler::OnEndTracingComplete))
+}
+
+void GpuMessageHandler::OnEndTracingComplete() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ trace_enabled_ = 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);
}
-