Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Side by Side Diff: chrome/browser/ui/webui/tracing_ui.cc

Issue 7497049: Quick-fixes to about:tracing following move (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More minor tweaks Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/resources/tracing/tracing_controller.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/tracing_ui.h" 5 #include "chrome/browser/ui/webui/tracing_ui.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 // SelectFileDialog::Listener implementation 57 // SelectFileDialog::Listener implementation
58 virtual void FileSelected(const FilePath& path, int index, void* params); 58 virtual void FileSelected(const FilePath& path, int index, void* params);
59 virtual void FileSelectionCanceled(void* params); 59 virtual void FileSelectionCanceled(void* params);
60 60
61 // TraceSubscriber implementation. 61 // TraceSubscriber implementation.
62 virtual void OnEndTracingComplete(); 62 virtual void OnEndTracingComplete();
63 virtual void OnTraceDataCollected(const std::string& json_events); 63 virtual void OnTraceDataCollected(const std::string& json_events);
64 virtual void OnTraceBufferPercentFullReply(float percent_full); 64 virtual void OnTraceBufferPercentFullReply(float percent_full);
65 65
66 // Messages. 66 // Messages.
67 void OnBrowserBridgeInitialized(const ListValue* list); 67 void OnTracingControllerInitialized(const ListValue* list);
68 void OnCallAsync(const ListValue* list);
69 void OnBeginTracing(const ListValue* list); 68 void OnBeginTracing(const ListValue* list);
70 void OnEndTracingAsync(const ListValue* list); 69 void OnEndTracingAsync(const ListValue* list);
71 void OnBeginRequestBufferPercentFull(const ListValue* list); 70 void OnBeginRequestBufferPercentFull(const ListValue* list);
72 void OnLoadTraceFile(const ListValue* list); 71 void OnLoadTraceFile(const ListValue* list);
73 void OnSaveTraceFile(const ListValue* list); 72 void OnSaveTraceFile(const ListValue* list);
74 73
75 // Submessages dispatched from OnCallAsync.
76 Value* OnRequestClientInfo(const ListValue* list);
77 Value* OnRequestLogMessages(const ListValue* list);
78
79 // Callbacks. 74 // Callbacks.
80 void OnGpuInfoUpdate(); 75 void OnGpuInfoUpdate();
81 76
82 // Callbacks. 77 // Callbacks.
83 void LoadTraceFileComplete(std::string* file_contents); 78 void LoadTraceFileComplete(std::string* file_contents);
84 void SaveTraceFileComplete(); 79 void SaveTraceFileComplete();
85 80
86 // Executes the javascript function |function_name| in the renderer, passing 81 // Executes the javascript function |function_name| in the renderer, passing
87 // it the argument |value|. 82 // it the argument |value|.
88 void CallJavascriptFunction(const std::wstring& function_name, 83 void CallJavascriptFunction(const std::wstring& function_name,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 WebUIMessageHandler* TracingMessageHandler::Attach(WebUI* web_ui) { 162 WebUIMessageHandler* TracingMessageHandler::Attach(WebUI* web_ui) {
168 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 163 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
169 WebUIMessageHandler* result = WebUIMessageHandler::Attach(web_ui); 164 WebUIMessageHandler* result = WebUIMessageHandler::Attach(web_ui);
170 return result; 165 return result;
171 } 166 }
172 167
173 void TracingMessageHandler::RegisterMessages() { 168 void TracingMessageHandler::RegisterMessages() {
174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
175 170
176 web_ui_->RegisterMessageCallback( 171 web_ui_->RegisterMessageCallback(
177 "browserBridgeInitialized", 172 "tracingControllerInitialized",
178 NewCallback(this, &TracingMessageHandler::OnBrowserBridgeInitialized)); 173 NewCallback(this,
179 web_ui_->RegisterMessageCallback( 174 &TracingMessageHandler::OnTracingControllerInitialized));
180 "callAsync",
181 NewCallback(this, &TracingMessageHandler::OnCallAsync));
182 web_ui_->RegisterMessageCallback( 175 web_ui_->RegisterMessageCallback(
183 "beginTracing", 176 "beginTracing",
184 NewCallback(this, &TracingMessageHandler::OnBeginTracing)); 177 NewCallback(this, &TracingMessageHandler::OnBeginTracing));
185 web_ui_->RegisterMessageCallback( 178 web_ui_->RegisterMessageCallback(
186 "endTracingAsync", 179 "endTracingAsync",
187 NewCallback(this, &TracingMessageHandler::OnEndTracingAsync)); 180 NewCallback(this, &TracingMessageHandler::OnEndTracingAsync));
188 web_ui_->RegisterMessageCallback( 181 web_ui_->RegisterMessageCallback(
189 "beginRequestBufferPercentFull", 182 "beginRequestBufferPercentFull",
190 NewCallback(this, 183 NewCallback(this,
191 &TracingMessageHandler::OnBeginRequestBufferPercentFull)); 184 &TracingMessageHandler::OnBeginRequestBufferPercentFull));
192 web_ui_->RegisterMessageCallback( 185 web_ui_->RegisterMessageCallback(
193 "loadTraceFile", 186 "loadTraceFile",
194 NewCallback(this, &TracingMessageHandler::OnLoadTraceFile)); 187 NewCallback(this, &TracingMessageHandler::OnLoadTraceFile));
195 web_ui_->RegisterMessageCallback( 188 web_ui_->RegisterMessageCallback(
196 "saveTraceFile", 189 "saveTraceFile",
197 NewCallback(this, &TracingMessageHandler::OnSaveTraceFile)); 190 NewCallback(this, &TracingMessageHandler::OnSaveTraceFile));
198 } 191 }
199 192
200 void TracingMessageHandler::OnCallAsync(const ListValue* args) { 193 void TracingMessageHandler::OnTracingControllerInitialized(
201 DCHECK_GE(args->GetSize(), static_cast<size_t>(2)); 194 const ListValue* args) {
202 // unpack args into requestId, submessage and submessageArgs
203 bool ok;
204 Value* requestId;
205 ok = args->Get(0, &requestId);
206 DCHECK(ok);
207
208 std::string submessage;
209 ok = args->GetString(1, &submessage);
210 DCHECK(ok);
211
212 ListValue* submessageArgs = new ListValue();
213 for (size_t i = 2; i < args->GetSize(); ++i) {
214 Value* arg;
215 ok = args->Get(i, &arg);
216 DCHECK(ok);
217
218 Value* argCopy = arg->DeepCopy();
219 submessageArgs->Append(argCopy);
220 }
221
222 // call the submessage handler
223 Value* ret = NULL;
224 if (submessage == "requestClientInfo") {
225 ret = OnRequestClientInfo(submessageArgs);
226 } else if (submessage == "requestLogMessages") {
227 ret = OnRequestLogMessages(submessageArgs);
228 } else { // unrecognized submessage
229 NOTREACHED();
230 delete submessageArgs;
231 return;
232 }
233 delete submessageArgs;
234
235 // call BrowserBridge.onCallAsyncReply with result
236 if (ret) {
237 web_ui_->CallJavascriptFunction("browserBridge.onCallAsyncReply",
238 *requestId,
239 *ret);
240 delete ret;
241 } else {
242 web_ui_->CallJavascriptFunction("browserBridge.onCallAsyncReply",
243 *requestId);
244 }
245 }
246
247 void TracingMessageHandler::OnBrowserBridgeInitialized(const ListValue* args) {
248 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 195 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
249 196
250 DCHECK(!gpu_info_update_callback_); 197 DCHECK(!gpu_info_update_callback_);
251 198
252 // Watch for changes in GPUInfo 199 // Watch for changes in GPUInfo
253 gpu_info_update_callback_ = 200 gpu_info_update_callback_ =
254 NewCallback(this, &TracingMessageHandler::OnGpuInfoUpdate); 201 NewCallback(this, &TracingMessageHandler::OnGpuInfoUpdate);
255 gpu_data_manager_->AddGpuInfoUpdateCallback(gpu_info_update_callback_); 202 gpu_data_manager_->AddGpuInfoUpdateCallback(gpu_info_update_callback_);
256 203
257 // Tell GpuDataManager it should have full GpuInfo. If the 204 // Tell GpuDataManager it should have full GpuInfo. If the
258 // Gpu process has not run yet, this will trigger its launch. 205 // Gpu process has not run yet, this will trigger its launch.
259 gpu_data_manager_->RequestCompleteGpuInfoIfNeeded(); 206 gpu_data_manager_->RequestCompleteGpuInfoIfNeeded();
260 207
261 // Run callback immediately in case the info is ready and no update in the 208 // Run callback immediately in case the info is ready and no update in the
262 // future. 209 // future.
263 OnGpuInfoUpdate(); 210 OnGpuInfoUpdate();
264 }
265 211
266 Value* TracingMessageHandler::OnRequestClientInfo(const ListValue* list) { 212 // Send the client info to the tracingController
267 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 213 {
214 scoped_ptr<DictionaryValue> dict(new DictionaryValue());
215 chrome::VersionInfo version_info;
268 216
269 DictionaryValue* dict = new DictionaryValue(); 217 if (!version_info.is_valid()) {
218 DLOG(ERROR) << "Unable to create chrome::VersionInfo";
219 } else {
220 // We have everything we need to send the right values.
221 dict->SetString("version", version_info.Version());
222 dict->SetString("cl", version_info.LastChange());
223 dict->SetString("version_mod",
224 chrome::VersionInfo::GetVersionStringModifier());
225 dict->SetString("official",
226 l10n_util::GetStringUTF16(
227 version_info.IsOfficialBuild() ?
228 IDS_ABOUT_VERSION_OFFICIAL :
229 IDS_ABOUT_VERSION_UNOFFICIAL));
270 230
271 chrome::VersionInfo version_info; 231 dict->SetString("command_line",
232 CommandLine::ForCurrentProcess()->GetCommandLineString());
233 }
272 234
273 if (!version_info.is_valid()) { 235 dict->SetString("blacklist_version",
274 DLOG(ERROR) << "Unable to create chrome::VersionInfo"; 236 GpuDataManager::GetInstance()->GetBlacklistVersion());
275 } else { 237 web_ui_->CallJavascriptFunction("tracingController.onClientInfoUpdate",
276 // We have everything we need to send the right values. 238 *dict);
277 dict->SetString("version", version_info.Version());
278 dict->SetString("cl", version_info.LastChange());
279 dict->SetString("version_mod",
280 chrome::VersionInfo::GetVersionStringModifier());
281 dict->SetString("official",
282 l10n_util::GetStringUTF16(
283 version_info.IsOfficialBuild() ?
284 IDS_ABOUT_VERSION_OFFICIAL :
285 IDS_ABOUT_VERSION_UNOFFICIAL));
286
287 dict->SetString("command_line",
288 CommandLine::ForCurrentProcess()->GetCommandLineString());
289 } 239 }
290
291 dict->SetString("blacklist_version",
292 GpuDataManager::GetInstance()->GetBlacklistVersion());
293
294 return dict;
295 }
296
297 Value* TracingMessageHandler::OnRequestLogMessages(const ListValue*) {
298 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
299
300 return gpu_data_manager_->log_messages().DeepCopy();
301 } 240 }
302 241
303 void TracingMessageHandler::OnBeginRequestBufferPercentFull( 242 void TracingMessageHandler::OnBeginRequestBufferPercentFull(
304 const ListValue* list) { 243 const ListValue* list) {
305 TraceController::GetInstance()->GetTraceBufferPercentFullAsync(this); 244 TraceController::GetInstance()->GetTraceBufferPercentFullAsync(this);
306 } 245 }
307 246
308 void TracingMessageHandler::OnGpuInfoUpdate() { 247 void TracingMessageHandler::OnGpuInfoUpdate() {
309 // Get GPU Info. 248 // Get GPU Info.
310 scoped_ptr<base::DictionaryValue> gpu_info_val( 249 scoped_ptr<base::DictionaryValue> gpu_info_val(
311 gpu_data_manager_->GpuInfoAsDictionaryValue()); 250 gpu_data_manager_->GpuInfoAsDictionaryValue());
312 251
313 // Add in blacklisting features 252 // Add in blacklisting features
314 Value* feature_status = gpu_data_manager_->GetFeatureStatus(); 253 Value* feature_status = gpu_data_manager_->GetFeatureStatus();
315 if (feature_status) 254 if (feature_status)
316 gpu_info_val->Set("featureStatus", feature_status); 255 gpu_info_val->Set("featureStatus", feature_status);
317 256
318 // Send GPU Info to javascript. 257 // Send GPU Info to javascript.
319 web_ui_->CallJavascriptFunction("browserBridge.onGpuInfoUpdate", 258 web_ui_->CallJavascriptFunction("tracingController.onGpuInfoUpdate",
320 *(gpu_info_val.get())); 259 *(gpu_info_val.get()));
321 } 260 }
322 261
323 // A task used for asynchronously reading a file to a string. Calls the 262 // A task used for asynchronously reading a file to a string. Calls the
324 // TaskProxy callback when reading is complete. 263 // TaskProxy callback when reading is complete.
325 class ReadTraceFileTask : public Task { 264 class ReadTraceFileTask : public Task {
326 public: 265 public:
327 ReadTraceFileTask(TaskProxy* proxy, const FilePath& path) 266 ReadTraceFileTask(TaskProxy* proxy, const FilePath& path)
328 : proxy_(proxy), 267 : proxy_(proxy),
329 path_(path) {} 268 path_(path) {}
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 // 455 //
517 //////////////////////////////////////////////////////////////////////////////// 456 ////////////////////////////////////////////////////////////////////////////////
518 457
519 TracingUI::TracingUI(TabContents* contents) : ChromeWebUI(contents) { 458 TracingUI::TracingUI(TabContents* contents) : ChromeWebUI(contents) {
520 AddMessageHandler((new TracingMessageHandler())->Attach(this)); 459 AddMessageHandler((new TracingMessageHandler())->Attach(this));
521 460
522 // Set up the chrome://tracing/ source. 461 // Set up the chrome://tracing/ source.
523 Profile::FromBrowserContext(contents->browser_context())-> 462 Profile::FromBrowserContext(contents->browser_context())->
524 GetChromeURLDataManager()->AddDataSource(CreateTracingHTMLSource()); 463 GetChromeURLDataManager()->AddDataSource(CreateTracingHTMLSource());
525 } 464 }
OLDNEW
« no previous file with comments | « chrome/browser/resources/tracing/tracing_controller.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698