summaryrefslogtreecommitdiffstats
path: root/chrome/browser/resources/gpu_internals/info_view.js
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/resources/gpu_internals/info_view.js')
-rw-r--r--chrome/browser/resources/gpu_internals/info_view.js230
1 files changed, 127 insertions, 103 deletions
diff --git a/chrome/browser/resources/gpu_internals/info_view.js b/chrome/browser/resources/gpu_internals/info_view.js
index d4d5ff7..44fefe7 100644
--- a/chrome/browser/resources/gpu_internals/info_view.js
+++ b/chrome/browser/resources/gpu_internals/info_view.js
@@ -22,55 +22,25 @@ cr.define('gpu', function() {
decorate: function() {
gpu.Tab.prototype.decorate.apply(this);
- this.beginRequestClientInfo();
-
- this.logMessages_ = [];
- this.beginRequestLogMessages();
-
browserBridge.addEventListener('gpuInfoUpdate', this.refresh.bind(this));
+ browserBridge.addEventListener('logMessagesChange',
+ this.refresh.bind(this));
+ browserBridge.addEventListener('clientInfoChange',
+ this.refresh.bind(this));
this.refresh();
},
/**
- * This function begins a request for the ClientInfo. If it comes back
- * as undefined, then we will issue the request again in 250ms.
- */
- beginRequestClientInfo: function() {
- browserBridge.callAsync('requestClientInfo', undefined, (function(data) {
- this.clientInfo_ = data;
- this.refresh();
- if (data === undefined) { // try again in 250 ms
- window.setTimeout(this.beginRequestClientInfo.bind(this), 250);
- }
- }).bind(this));
- },
-
- /**
- * This function checks for new GPU_LOG messages.
- * If any are found, a refresh is triggered.
- */
- beginRequestLogMessages: function() {
- browserBridge.callAsync('requestLogMessages', undefined,
- (function(messages) {
- if (messages.length != this.logMessages_.length) {
- this.logMessages_ = messages;
- this.refresh();
- }
- // check again in 250 ms
- window.setTimeout(this.beginRequestLogMessages.bind(this), 250);
- }).bind(this));
- },
-
- /**
* Updates the view based on its currently known data
*/
refresh: function(data) {
// Client info
- if (this.clientInfo_) {
- var chromeVersion = this.clientInfo_.version +
- ' (' + this.clientInfo_.official +
- ' ' + this.clientInfo_.cl +
- ') ' + this.clientInfo_.version_mod;
+ if (browserBridge.clientInfo) {
+ var clientInfo = browserBridge.clientInfo;
+ var chromeVersion = clientInfo.version +
+ ' (' + clientInfo.official +
+ ' ' + clientInfo.cl +
+ ') ' + clientInfo.version_mod;
this.setTable_('client-info', [
{
description: 'Data exported',
@@ -82,81 +52,82 @@ cr.define('gpu', function() {
},
{
description: 'Software rendering list version',
- value: this.clientInfo_.blacklist_version
+ value: clientInfo.blacklist_version
}]);
} else {
this.setText_('client-info', '... loading...');
}
+ // Feature map
+ var featureNameMap = {
+ 'accelerated_2d_canvas': 'Canvas',
+ 'accelerated_compositing': '3D CSS',
+ 'webgl': 'WebGL',
+ 'multisampling': 'WebGL multisampling'
+ };
+
// GPU info, basic
var diagnostics = this.querySelector('.diagnostics');
- var blacklistedIndicator = this.querySelector('.blacklisted-indicator');
+ var featureStatusList = this.querySelector('.feature-status-list');
+ var problemsDiv = this.querySelector('.problems-div');
+ var problemsList = this.querySelector('.problems-list');
var gpuInfo = browserBridge.gpuInfo;
+ var i;
if (gpuInfo) {
- if (gpuInfo.blacklistingReasons) {
- blacklistedIndicator.hidden = false;
- // Not using jstemplate here because we need to manipulate
- // href on the fly
- var reasonsEl = blacklistedIndicator.querySelector(
- '.blacklisted-reasons');
- reasonsEl.textContent = '';
- for (var i = 0; i < gpuInfo.blacklistingReasons.length; i++) {
- var reason = gpuInfo.blacklistingReasons[i];
-
- var reasonEl = document.createElement('li');
-
- // Description of issue
- var desc = document.createElement('a');
- desc.textContent = reason.description;
- reasonEl.appendChild(desc);
-
- // Spacing ':' element
- if (reason.cr_bugs.length + reason.webkit_bugs.length > 0) {
- var tmp = document.createElement('span');
- tmp.textContent = ' ';
- reasonEl.appendChild(tmp);
- }
-
- var nreasons = 0;
- var j;
- // cr_bugs
- for (j = 0; j < reason.cr_bugs.length; ++j) {
- if (nreasons > 0) {
- var tmp = document.createElement('span');
- tmp.textContent = ', ';
- reasonEl.appendChild(tmp);
- }
-
- var link = document.createElement('a');
- var bugid = parseInt(reason.cr_bugs[j]);
- link.textContent = bugid;
- link.href = 'http://crbug.com/' + bugid;
- reasonEl.appendChild(link);
- nreasons++;
+ // Not using jstemplate here for blacklist status because we construct
+ // href from data, which jstemplate can't seem to do.
+ if (gpuInfo.featureStatus) {
+ // feature status list
+ featureStatusList.textContent = '';
+ for (i = 0; i < gpuInfo.featureStatus.featureStatus.length;
+ i++) {
+ var feature = gpuInfo.featureStatus.featureStatus[i];
+ var featureEl = document.createElement('li');
+
+ var nameEl = document.createElement('span');
+ nameEl.textContent = featureNameMap[feature.name] + ': ';
+ featureEl.appendChild(nameEl);
+
+ var statusEl = document.createElement('span');
+ if (feature.status == 'enabled') {
+ statusEl.textContent = 'enabled';
+ statusEl.className = 'feature-enabled';
+ } else if (feature.status == 'software') {
+ statusEl.textContent = 'software only';
+ statusEl.className = 'feature-software';
+ } else if (feature.status == 'unavailable') {
+ statusEl.textContent = 'unavailable';
+ statusEl.className = 'feature-disabled';
+ } else { // disabled
+ statusEl.textContent = 'disabled';
+ statusEl.className = 'feature-disabled';
}
+ featureEl.appendChild(statusEl);
- for (j = 0; j < reason.webkit_bugs.length; ++j) {
- if (nreasons > 0) {
- var tmp = document.createElement('span');
- tmp.textContent = ', ';
- reasonEl.appendChild(tmp);
- }
-
- var link = document.createElement('a');
- var bugid = parseInt(reason.webkit_bugs[j]);
- link.textContent = bugid;
+ featureStatusList.appendChild(featureEl);
+ }
- link.href = 'https://bugs.webkit.org/show_bug.cgi?id=' + bugid;
- reasonEl.appendChild(link);
- nreasons++;
+ // problems list
+ if (gpuInfo.featureStatus.problems.length) {
+ problemsDiv.hidden = false;
+ problemsList.textContent = '';
+ for (i = 0; i < gpuInfo.featureStatus.problems.length; i++) {
+ var problem = gpuInfo.featureStatus.problems[i];
+ var problemEl = this.createProblemEl_(problem);
+ problemsList.appendChild(problemEl);
}
-
- reasonsEl.appendChild(reasonEl);
+ } else {
+ problemsDiv.hidden = true;
}
+
} else {
- blacklistedIndicator.hidden = true;
+ featureStatusList.textContent = '';
+ problemsList.hidden = true;
}
- this.setTable_('basic-info', gpuInfo.basic_info);
+ if (gpuInfo.basic_info)
+ this.setTable_('basic-info', gpuInfo.basic_info);
+ else
+ this.setTable_('basic-info', []);
if (gpuInfo.diagnostics) {
diagnostics.hidden = false;
@@ -165,16 +136,69 @@ cr.define('gpu', function() {
diagnostics.hidden = true;
}
} else {
- blacklistedIndicator.hidden = true;
this.setText_('basic-info', '... loading ...');
diagnostics.hidden = true;
+ featureStatusList.textContent = '';
+ problemsDiv.hidden = true;
}
// Log messages
- if (!browserBridge.debugMode) {
- jstProcess(new JsEvalContext({values: this.logMessages_}),
- document.getElementById('log-messages'));
+ jstProcess(new JsEvalContext({values: browserBridge.logMessages}),
+ document.getElementById('log-messages'));
+ },
+
+ createProblemEl_: function(problem) {
+ var problemEl;
+ problemEl = document.createElement('li');
+
+ // Description of issue
+ var desc = document.createElement('a');
+ desc.textContent = problem.description;
+ problemEl.appendChild(desc);
+
+ // Spacing ':' element
+ if (problem.crBugs.length + problem.webkitBugs.length > 0) {
+ var tmp = document.createElement('span');
+ tmp.textContent = ': ';
+ problemEl.appendChild(tmp);
+ }
+
+ var nbugs = 0;
+ var j;
+
+ // crBugs
+ for (j = 0; j < problem.crBugs.length; ++j) {
+ if (nbugs > 0) {
+ var tmp = document.createElement('span');
+ tmp.textContent = ', ';
+ problemEl.appendChild(tmp);
+ }
+
+ var link = document.createElement('a');
+ var bugid = parseInt(problem.crBugs[j]);
+ link.textContent = bugid;
+ link.href = 'http://crbug.com/' + bugid;
+ problemEl.appendChild(link);
+ nbugs++;
+ }
+
+ for (j = 0; j < problem.webkitBugs.length; ++j) {
+ if (nbugs > 0) {
+ var tmp = document.createElement('span');
+ tmp.textContent = ', ';
+ problemEl.appendChild(tmp);
+ }
+
+ var link = document.createElement('a');
+ var bugid = parseInt(problem.webkitBugs[j]);
+ link.textContent = bugid;
+
+ link.href = 'https://bugs.webkit.org/show_bug.cgi?id=' + bugid;
+ problemEl.appendChild(link);
+ nbugs++;
}
+
+ return problemEl;
},
setText_: function(outputElementId, text) {