|
OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 /** | |
6 * This view displays options for importing/exporting the captured data. Its | |
7 * primarily usefulness is to allow users to copy-paste their data in an easy | |
8 * to read format for bug reports. | |
9 * | |
10 * - Has a button to generate a text report. | |
11 * | |
12 * - Shows how many events have been captured. | |
13 */ | |
14 cr.define('gpu', function() { | |
15 /** | |
16 * Provides information on the GPU process and underlying graphics hardware. | |
17 * @constructor | |
18 */ | |
19 function InfoView(mainBoxId) { | |
20 DivView.call(this, mainBoxId); | |
21 | |
22 this.beginRequestClientInfo(); | |
23 this.beginRequestGpuInfo(); | |
24 this.refresh(); | |
25 } | |
26 | |
27 InfoView.prototype = { | |
28 __proto__: DivView.prototype, | |
29 | |
30 /** | |
31 * This function begins a request for the ClientInfo. If it comes back | |
32 * as undefined, then we will issue the request again in 250ms. | |
33 */ | |
34 beginRequestClientInfo : function() { | |
35 browserBridge.callAsync('requestClientInfo', undefined, (function(data) { | |
36 this.clientInfo_ = data; | |
37 this.refresh(); | |
38 if (data === undefined) { // try again in 250 ms | |
39 window.setTimeout(this.beginRequestClientInfo.bind(this), 250); | |
40 } | |
41 }).bind(this)); | |
42 }, | |
43 | |
44 /** | |
45 * This function begins a request for the GpuInfo. If it comes back | |
46 * as undefined, then we will issue the request again in 250ms. | |
47 */ | |
48 beginRequestGpuInfo : function() { | |
49 browserBridge.callAsync('requestGpuInfo', undefined, (function(data) { | |
50 this.gpuInfo_ = data; | |
51 this.refresh(); | |
52 if (!data || data.progress != 'complete') { // try again in 250 ms | |
53 window.setTimeout(this.beginRequestGpuInfo.bind(this), 250); | |
54 } | |
55 }).bind(this)); | |
56 }, | |
57 | |
58 /** | |
59 * Updates the view based on its currently known data | |
60 */ | |
61 refresh: function(data) { | |
62 // Client info | |
63 if (this.clientInfo_) { | |
64 var chromeVersion = this.clientInfo_.version + | |
65 ' (' + this.clientInfo_.official + | |
66 ' ' + this.clientInfo_.cl + | |
67 ') ' + this.clientInfo_.version_mod; | |
68 this.setTable_('client-info', [ | |
69 { | |
70 description: 'Data exported', | |
71 value: (new Date()).toLocaleString() | |
72 }, | |
73 { | |
74 description: 'Chrome version', | |
75 value: chromeVersion | |
76 }]); | |
77 } else { | |
78 this.setText_('client-info', '... loading...'); | |
79 } | |
80 | |
81 // GPU info, basic | |
82 if (this.gpuInfo_) { | |
83 this.setTable_('basic-info', this.gpuInfo_.basic_info); | |
84 if (this.gpuInfo_.diagnostics) { | |
85 this.setTable_('diagnostics', this.gpuInfo_.diagnostics); | |
86 } else if (this.gpuInfo_.progress == 'partial') { | |
87 this.setText_('diagnostics', '... loading...'); | |
88 } else { | |
89 this.setText_('diagnostics', 'None'); | |
90 } | |
91 } else { | |
92 this.setText_('basic-info', '... loading ...'); | |
93 this.setText_('diagnostics', '... loading ...'); | |
94 } | |
95 }, | |
96 | |
97 setText_ : function(outputElementId,text) { | |
arv (Not doing code reviews)
2010/12/08 19:52:37
ws after comma
arv (Not doing code reviews)
2010/12/08 19:52:37
no ws before :
nduca
2010/12/09 01:59:04
Done.
| |
98 var peg = document.getElementById(outputElementId); | |
99 var textNode = peg.ownerDocument.createTextNode(text); | |
arv (Not doing code reviews)
2010/12/08 19:52:37
peg.textContent = text;
nduca
2010/12/09 01:59:04
Done.
| |
100 peg.innerHTML = ''; | |
101 peg.appendChild(textNode); | |
102 return textNode; | |
arv (Not doing code reviews)
2010/12/08 19:52:37
this return value is never used
nduca
2010/12/09 01:59:04
Done.
| |
103 }, | |
104 | |
105 setTable_: function(outputElementId,inputData) { | |
106 var template = jstGetTemplate('info-view-table-template'); | |
107 jstProcess(new JsEvalContext({value: inputData}), | |
108 template); | |
109 | |
110 var peg = document.getElementById(outputElementId); | |
111 if (!peg) | |
112 throw new Error('Node ' + outputElementId + ' not found'); | |
113 | |
114 peg.innerHTML = ''; | |
115 peg.appendChild(template); | |
116 } | |
117 }; | |
118 | |
119 return { | |
120 InfoView: InfoView | |
121 }; | |
122 }); | |
OLD | NEW |