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

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

Issue 10907098: Revert 155218 - Move gpu blacklist to content side. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 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/ui/webui/gpu_internals_ui.cc ('k') | chrome/chrome_browser.gypi » ('j') | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/debug/trace_event.h" 12 #include "base/debug/trace_event.h"
13 #include "base/file_util.h" 13 #include "base/file_util.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/string_number_conversions.h" 15 #include "base/string_number_conversions.h"
16 #include "base/stringprintf.h" 16 #include "base/stringprintf.h"
17 #include "base/utf_string_conversions.h" 17 #include "base/utf_string_conversions.h"
18 #include "chrome/browser/gpu_blacklist.h"
19 #include "chrome/browser/gpu_util.h"
18 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/chrome_select_file_policy.h" 21 #include "chrome/browser/ui/chrome_select_file_policy.h"
20 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" 22 #include "chrome/browser/ui/webui/chrome_url_data_manager.h"
21 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" 23 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h"
22 #include "chrome/common/chrome_version_info.h" 24 #include "chrome/common/chrome_version_info.h"
23 #include "chrome/common/url_constants.h" 25 #include "chrome/common/url_constants.h"
24 #include "content/public/browser/browser_thread.h" 26 #include "content/public/browser/browser_thread.h"
25 #include "content/public/browser/gpu_data_manager.h" 27 #include "content/public/browser/gpu_data_manager.h"
26 #include "content/public/browser/gpu_data_manager_observer.h" 28 #include "content/public/browser/gpu_data_manager_observer.h"
27 #include "content/public/browser/render_view_host.h" 29 #include "content/public/browser/render_view_host.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 return source; 63 return source;
62 } 64 }
63 65
64 // This class receives javascript messages from the renderer. 66 // This class receives javascript messages from the renderer.
65 // Note that the WebUI infrastructure runs on the UI thread, therefore all of 67 // Note that the WebUI infrastructure runs on the UI thread, therefore all of
66 // this class's methods are expected to run on the UI thread. 68 // this class's methods are expected to run on the UI thread.
67 class TracingMessageHandler 69 class TracingMessageHandler
68 : public WebUIMessageHandler, 70 : public WebUIMessageHandler,
69 public ui::SelectFileDialog::Listener, 71 public ui::SelectFileDialog::Listener,
70 public base::SupportsWeakPtr<TracingMessageHandler>, 72 public base::SupportsWeakPtr<TracingMessageHandler>,
71 public content::TraceSubscriber { 73 public content::TraceSubscriber,
74 public content::GpuDataManagerObserver {
72 public: 75 public:
73 TracingMessageHandler(); 76 TracingMessageHandler();
74 virtual ~TracingMessageHandler(); 77 virtual ~TracingMessageHandler();
75 78
76 // WebUIMessageHandler implementation. 79 // WebUIMessageHandler implementation.
77 virtual void RegisterMessages(); 80 virtual void RegisterMessages();
78 81
79 // SelectFileDialog::Listener implementation 82 // SelectFileDialog::Listener implementation
80 virtual void FileSelected(const FilePath& path, int index, void* params); 83 virtual void FileSelected(const FilePath& path, int index, void* params);
81 virtual void FileSelectionCanceled(void* params); 84 virtual void FileSelectionCanceled(void* params);
82 85
83 // TraceSubscriber implementation. 86 // TraceSubscriber implementation.
84 virtual void OnEndTracingComplete(); 87 virtual void OnEndTracingComplete();
85 virtual void OnTraceDataCollected( 88 virtual void OnTraceDataCollected(
86 const scoped_refptr<base::RefCountedString>& trace_fragment); 89 const scoped_refptr<base::RefCountedString>& trace_fragment);
87 virtual void OnTraceBufferPercentFullReply(float percent_full); 90 virtual void OnTraceBufferPercentFullReply(float percent_full);
88 91
92 // GpuDataManagerObserver implementation.
93 virtual void OnGpuInfoUpdate() OVERRIDE;
94 virtual void OnVideoMemoryUsageStatsUpdate(
95 const content::GPUVideoMemoryUsageStats& video_memory) OVERRIDE {}
96
89 // Messages. 97 // Messages.
90 void OnTracingControllerInitialized(const ListValue* list); 98 void OnTracingControllerInitialized(const ListValue* list);
91 void OnBeginTracing(const ListValue* list); 99 void OnBeginTracing(const ListValue* list);
92 void OnEndTracingAsync(const ListValue* list); 100 void OnEndTracingAsync(const ListValue* list);
93 void OnBeginRequestBufferPercentFull(const ListValue* list); 101 void OnBeginRequestBufferPercentFull(const ListValue* list);
94 void OnLoadTraceFile(const ListValue* list); 102 void OnLoadTraceFile(const ListValue* list);
95 void OnSaveTraceFile(const ListValue* list); 103 void OnSaveTraceFile(const ListValue* list);
96 104
97 // Callbacks. 105 // Callbacks.
98 void LoadTraceFileComplete(string16* file_contents); 106 void LoadTraceFileComplete(string16* file_contents);
99 void SaveTraceFileComplete(); 107 void SaveTraceFileComplete();
100 108
101 private: 109 private:
102 // The file dialog to select a file for loading or saving traces. 110 // The file dialog to select a file for loading or saving traces.
103 scoped_refptr<ui::SelectFileDialog> select_trace_file_dialog_; 111 scoped_refptr<ui::SelectFileDialog> select_trace_file_dialog_;
104 112
105 // The type of the file dialog as the same one is used for loading or saving 113 // The type of the file dialog as the same one is used for loading or saving
106 // traces. 114 // traces.
107 ui::SelectFileDialog::Type select_trace_file_dialog_type_; 115 ui::SelectFileDialog::Type select_trace_file_dialog_type_;
108 116
109 // The trace data that is to be written to the file on saving. 117 // The trace data that is to be written to the file on saving.
110 scoped_ptr<std::string> trace_data_to_save_; 118 scoped_ptr<std::string> trace_data_to_save_;
111 119
112 // True while tracing is active. 120 // True while tracing is active.
113 bool trace_enabled_; 121 bool trace_enabled_;
114 122
115 // True while system tracing is active. 123 // True while system tracing is active.
116 bool system_trace_in_progress_; 124 bool system_trace_in_progress_;
117 125
126 // True if observing the GpuDataManager (re-attaching as observer would
127 // DCHECK).
128 bool observing_;
129
118 void OnEndSystemTracingAck( 130 void OnEndSystemTracingAck(
119 const scoped_refptr<base::RefCountedString>& events_str_ptr); 131 const scoped_refptr<base::RefCountedString>& events_str_ptr);
120 132
121 DISALLOW_COPY_AND_ASSIGN(TracingMessageHandler); 133 DISALLOW_COPY_AND_ASSIGN(TracingMessageHandler);
122 }; 134 };
123 135
124 // A proxy passed to the Read and Write tasks used when loading or saving trace 136 // A proxy passed to the Read and Write tasks used when loading or saving trace
125 // data. 137 // data.
126 class TaskProxy : public base::RefCountedThreadSafe<TaskProxy> { 138 class TaskProxy : public base::RefCountedThreadSafe<TaskProxy> {
127 public: 139 public:
(...skipping 22 matching lines...) Expand all
150 162
151 //////////////////////////////////////////////////////////////////////////////// 163 ////////////////////////////////////////////////////////////////////////////////
152 // 164 //
153 // TracingMessageHandler 165 // TracingMessageHandler
154 // 166 //
155 //////////////////////////////////////////////////////////////////////////////// 167 ////////////////////////////////////////////////////////////////////////////////
156 168
157 TracingMessageHandler::TracingMessageHandler() 169 TracingMessageHandler::TracingMessageHandler()
158 : select_trace_file_dialog_type_(ui::SelectFileDialog::SELECT_NONE), 170 : select_trace_file_dialog_type_(ui::SelectFileDialog::SELECT_NONE),
159 trace_enabled_(false), 171 trace_enabled_(false),
160 system_trace_in_progress_(false) { 172 system_trace_in_progress_(false),
173 observing_(false) {
161 } 174 }
162 175
163 TracingMessageHandler::~TracingMessageHandler() { 176 TracingMessageHandler::~TracingMessageHandler() {
177 GpuDataManager::GetInstance()->RemoveObserver(this);
178
164 if (select_trace_file_dialog_) 179 if (select_trace_file_dialog_)
165 select_trace_file_dialog_->ListenerDestroyed(); 180 select_trace_file_dialog_->ListenerDestroyed();
166 181
167 // If we are the current subscriber, this will result in ending tracing. 182 // If we are the current subscriber, this will result in ending tracing.
168 TraceController::GetInstance()->CancelSubscriber(this); 183 TraceController::GetInstance()->CancelSubscriber(this);
169 184
170 // Shutdown any system tracing too. 185 // Shutdown any system tracing too.
171 if (system_trace_in_progress_) { 186 if (system_trace_in_progress_) {
172 #if defined(OS_CHROMEOS) 187 #if defined(OS_CHROMEOS)
173 chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()-> 188 chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()->
(...skipping 23 matching lines...) Expand all
197 base::Unretained(this))); 212 base::Unretained(this)));
198 web_ui()->RegisterMessageCallback("saveTraceFile", 213 web_ui()->RegisterMessageCallback("saveTraceFile",
199 base::Bind(&TracingMessageHandler::OnSaveTraceFile, 214 base::Bind(&TracingMessageHandler::OnSaveTraceFile,
200 base::Unretained(this))); 215 base::Unretained(this)));
201 } 216 }
202 217
203 void TracingMessageHandler::OnTracingControllerInitialized( 218 void TracingMessageHandler::OnTracingControllerInitialized(
204 const ListValue* args) { 219 const ListValue* args) {
205 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 220 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
206 221
222 // Watch for changes in GPUInfo
223 if (!observing_)
224 GpuDataManager::GetInstance()->AddObserver(this);
225 observing_ = true;
226
227 // Tell GpuDataManager it should have full GpuInfo. If the
228 // Gpu process has not run yet, this will trigger its launch.
229 GpuDataManager::GetInstance()->RequestCompleteGpuInfoIfNeeded();
230
231 // Run callback immediately in case the info is ready and no update in the
232 // future.
233 OnGpuInfoUpdate();
234
207 // Send the client info to the tracingController 235 // Send the client info to the tracingController
208 { 236 {
209 scoped_ptr<DictionaryValue> dict(new DictionaryValue()); 237 scoped_ptr<DictionaryValue> dict(new DictionaryValue());
210 chrome::VersionInfo version_info; 238 chrome::VersionInfo version_info;
211 239
212 if (!version_info.is_valid()) { 240 if (!version_info.is_valid()) {
213 DLOG(ERROR) << "Unable to create chrome::VersionInfo"; 241 DLOG(ERROR) << "Unable to create chrome::VersionInfo";
214 } else { 242 } else {
215 // We have everything we need to send the right values. 243 // We have everything we need to send the right values.
216 dict->SetString("version", version_info.Version()); 244 dict->SetString("version", version_info.Version());
217 dict->SetString("cl", version_info.LastChange()); 245 dict->SetString("cl", version_info.LastChange());
218 dict->SetString("version_mod", 246 dict->SetString("version_mod",
219 chrome::VersionInfo::GetVersionStringModifier()); 247 chrome::VersionInfo::GetVersionStringModifier());
220 dict->SetString("official", 248 dict->SetString("official",
221 l10n_util::GetStringUTF16( 249 l10n_util::GetStringUTF16(
222 version_info.IsOfficialBuild() ? 250 version_info.IsOfficialBuild() ?
223 IDS_ABOUT_VERSION_OFFICIAL : 251 IDS_ABOUT_VERSION_OFFICIAL :
224 IDS_ABOUT_VERSION_UNOFFICIAL)); 252 IDS_ABOUT_VERSION_UNOFFICIAL));
225 253
226 dict->SetString("command_line", 254 dict->SetString("command_line",
227 CommandLine::ForCurrentProcess()->GetCommandLineString()); 255 CommandLine::ForCurrentProcess()->GetCommandLineString());
228 } 256 }
229 257
230 dict->SetString("blacklist_version", 258 dict->SetString("blacklist_version",
231 GpuDataManager::GetInstance()->GetBlacklistVersion()); 259 GpuBlacklist::GetInstance()->GetVersion());
232 web_ui()->CallJavascriptFunction("tracingController.onClientInfoUpdate", 260 web_ui()->CallJavascriptFunction("tracingController.onClientInfoUpdate",
233 *dict); 261 *dict);
234 } 262 }
235 } 263 }
236 264
237 void TracingMessageHandler::OnBeginRequestBufferPercentFull( 265 void TracingMessageHandler::OnBeginRequestBufferPercentFull(
238 const ListValue* list) { 266 const ListValue* list) {
239 TraceController::GetInstance()->GetTraceBufferPercentFullAsync(this); 267 TraceController::GetInstance()->GetTraceBufferPercentFullAsync(this);
240 } 268 }
241 269
270 void TracingMessageHandler::OnGpuInfoUpdate() {
271 // Get GPU Info.
272 scoped_ptr<base::DictionaryValue> gpu_info_val(
273 gpu_util::GpuInfoAsDictionaryValue());
274
275 // Add in blacklisting features
276 Value* feature_status = gpu_util::GetFeatureStatus();
277 if (feature_status)
278 gpu_info_val->Set("featureStatus", feature_status);
279
280 // Send GPU Info to javascript.
281 web_ui()->CallJavascriptFunction("tracingController.onGpuInfoUpdate",
282 *(gpu_info_val.get()));
283 }
284
242 // A callback used for asynchronously reading a file to a string. Calls the 285 // A callback used for asynchronously reading a file to a string. Calls the
243 // TaskProxy callback when reading is complete. 286 // TaskProxy callback when reading is complete.
244 void ReadTraceFileCallback(TaskProxy* proxy, const FilePath& path) { 287 void ReadTraceFileCallback(TaskProxy* proxy, const FilePath& path) {
245 std::string file_contents; 288 std::string file_contents;
246 if (!file_util::ReadFileToString(path, &file_contents)) 289 if (!file_util::ReadFileToString(path, &file_contents))
247 return; 290 return;
248 291
249 // We need to escape the file contents, because it will go into a javascript 292 // We need to escape the file contents, because it will go into a javascript
250 // quoted string in TracingMessageHandler::LoadTraceFileComplete. We need to 293 // quoted string in TracingMessageHandler::LoadTraceFileComplete. We need to
251 // escape control characters (to have well-formed javascript statements), as 294 // escape control characters (to have well-formed javascript statements), as
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 // 548 //
506 //////////////////////////////////////////////////////////////////////////////// 549 ////////////////////////////////////////////////////////////////////////////////
507 550
508 TracingUI::TracingUI(content::WebUI* web_ui) : WebUIController(web_ui) { 551 TracingUI::TracingUI(content::WebUI* web_ui) : WebUIController(web_ui) {
509 web_ui->AddMessageHandler(new TracingMessageHandler()); 552 web_ui->AddMessageHandler(new TracingMessageHandler());
510 553
511 // Set up the chrome://tracing/ source. 554 // Set up the chrome://tracing/ source.
512 Profile* profile = Profile::FromWebUI(web_ui); 555 Profile* profile = Profile::FromWebUI(web_ui);
513 ChromeURLDataManager::AddDataSource(profile, CreateTracingHTMLSource()); 556 ChromeURLDataManager::AddDataSource(profile, CreateTracingHTMLSource());
514 } 557 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/gpu_internals_ui.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698