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

Side by Side Diff: chrome/browser/gpu_process_host_ui_shim.cc

Issue 6531023: Collect as much GPU information as possible without creating a GL/D3D context... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: For the records Created 9 years, 10 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/gpu_process_host_ui_shim.h ('k') | chrome/common/gpu_messages_internal.h » ('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) 2010 The Chromium Authors. All rights reserved. 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 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/gpu_process_host_ui_shim.h" 5 #include "chrome/browser/gpu_process_host_ui_shim.h"
6 6
7 #include "app/app_switches.h" 7 #include "app/app_switches.h"
8 #include "app/gfx/gl/gl_implementation.h" 8 #include "app/gfx/gl/gl_implementation.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "chrome/browser/browser_thread.h" 11 #include "chrome/browser/browser_thread.h"
12 #include "chrome/browser/gpu_blacklist.h" 12 #include "chrome/browser/gpu_blacklist.h"
13 #include "chrome/browser/gpu_process_host.h" 13 #include "chrome/browser/gpu_process_host.h"
14 #include "chrome/browser/renderer_host/render_process_host.h" 14 #include "chrome/browser/renderer_host/render_process_host.h"
15 #include "chrome/browser/renderer_host/render_view_host.h" 15 #include "chrome/browser/renderer_host/render_view_host.h"
16 #include "chrome/browser/renderer_host/render_widget_host_view.h" 16 #include "chrome/browser/renderer_host/render_widget_host_view.h"
17 #include "chrome/common/child_process_logging.h" 17 #include "chrome/common/child_process_logging.h"
18 #include "chrome/common/chrome_switches.h" 18 #include "chrome/common/chrome_switches.h"
19 #include "chrome/common/gpu_messages.h" 19 #include "chrome/common/gpu_messages.h"
20 #include "chrome/gpu/gpu_info_collector.h"
20 #include "grit/browser_resources.h" 21 #include "grit/browser_resources.h"
21 #include "ui/base/resource/resource_bundle.h" 22 #include "ui/base/resource/resource_bundle.h"
22 23
23 #if defined(OS_LINUX) 24 #if defined(OS_LINUX)
24 // These two #includes need to come after gpu_messages.h. 25 // These two #includes need to come after gpu_messages.h.
25 #include <gdk/gdkwindow.h> // NOLINT 26 #include <gdk/gdkwindow.h> // NOLINT
26 #include <gdk/gdkx.h> // NOLINT 27 #include <gdk/gdkx.h> // NOLINT
27 #include "ui/base/x/x11_util.h" 28 #include "ui/base/x/x11_util.h"
28 #include "ui/gfx/gtk_native_view_id_manager.h" 29 #include "ui/gfx/gtk_native_view_id_manager.h"
29 #include "ui/gfx/size.h" 30 #include "ui/gfx/size.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 return OnControlMessageReceived(message); 181 return OnControlMessageReceived(message);
181 182
182 return router_.RouteMessage(message); 183 return router_.RouteMessage(message);
183 } 184 }
184 185
185 void GpuProcessHostUIShim::EstablishGpuChannel( 186 void GpuProcessHostUIShim::EstablishGpuChannel(
186 int renderer_id, EstablishChannelCallback *callback) { 187 int renderer_id, EstablishChannelCallback *callback) {
187 DCHECK(CalledOnValidThread()); 188 DCHECK(CalledOnValidThread());
188 linked_ptr<EstablishChannelCallback> wrapped_callback(callback); 189 linked_ptr<EstablishChannelCallback> wrapped_callback(callback);
189 190
191 // If GPU features are already blacklisted, no need to establish the channel.
192 if (EnsureInitialized() && gpu_feature_flags_.flags() != 0) {
193 EstablishChannelError(
194 wrapped_callback.release(), IPC::ChannelHandle(), GPUInfo());
195 return;
196 }
197
190 if (Send(new GpuMsg_EstablishChannel(renderer_id))) { 198 if (Send(new GpuMsg_EstablishChannel(renderer_id))) {
191 channel_requests_.push(wrapped_callback); 199 channel_requests_.push(wrapped_callback);
192 } else { 200 } else {
193 EstablishChannelError( 201 EstablishChannelError(
194 wrapped_callback.release(), IPC::ChannelHandle(), GPUInfo()); 202 wrapped_callback.release(), IPC::ChannelHandle(), GPUInfo());
195 } 203 }
196 } 204 }
197 205
198 void GpuProcessHostUIShim::Synchronize(SynchronizeCallback* callback) { 206 void GpuProcessHostUIShim::Synchronize(SynchronizeCallback* callback) {
199 DCHECK(CalledOnValidThread()); 207 DCHECK(CalledOnValidThread());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 window, render_view_id, renderer_id, init_params))) { 260 window, render_view_id, renderer_id, init_params))) {
253 create_command_buffer_requests_.push(wrapped_callback); 261 create_command_buffer_requests_.push(wrapped_callback);
254 } else { 262 } else {
255 CreateCommandBufferError(wrapped_callback.release(), MSG_ROUTING_NONE); 263 CreateCommandBufferError(wrapped_callback.release(), MSG_ROUTING_NONE);
256 } 264 }
257 } 265 }
258 266
259 void GpuProcessHostUIShim::CollectGraphicsInfoAsynchronously( 267 void GpuProcessHostUIShim::CollectGraphicsInfoAsynchronously(
260 GPUInfo::Level level) { 268 GPUInfo::Level level) {
261 DCHECK(CalledOnValidThread()); 269 DCHECK(CalledOnValidThread());
270 // If GPU is already blacklisted, no more info will be collected.
271 if (gpu_feature_flags_.flags() != 0)
272 return;
262 Send(new GpuMsg_CollectGraphicsInfo(level)); 273 Send(new GpuMsg_CollectGraphicsInfo(level));
263 } 274 }
264 275
265 void GpuProcessHostUIShim::SendAboutGpuCrash() { 276 void GpuProcessHostUIShim::SendAboutGpuCrash() {
266 DCHECK(CalledOnValidThread()); 277 DCHECK(CalledOnValidThread());
267 Send(new GpuMsg_Crash()); 278 Send(new GpuMsg_Crash());
268 } 279 }
269 280
270 void GpuProcessHostUIShim::SendAboutGpuHang() { 281 void GpuProcessHostUIShim::SendAboutGpuHang() {
271 DCHECK(CalledOnValidThread()); 282 DCHECK(CalledOnValidThread());
(...skipping 17 matching lines...) Expand all
289 300
290 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message) 301 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message)
291 IPC_MESSAGE_HANDLER(GpuHostMsg_ChannelEstablished, 302 IPC_MESSAGE_HANDLER(GpuHostMsg_ChannelEstablished,
292 OnChannelEstablished) 303 OnChannelEstablished)
293 IPC_MESSAGE_HANDLER(GpuHostMsg_CommandBufferCreated, 304 IPC_MESSAGE_HANDLER(GpuHostMsg_CommandBufferCreated,
294 OnCommandBufferCreated) 305 OnCommandBufferCreated)
295 IPC_MESSAGE_HANDLER(GpuHostMsg_DestroyCommandBuffer, 306 IPC_MESSAGE_HANDLER(GpuHostMsg_DestroyCommandBuffer,
296 OnDestroyCommandBuffer) 307 OnDestroyCommandBuffer)
297 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected, 308 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected,
298 OnGraphicsInfoCollected) 309 OnGraphicsInfoCollected)
310 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_PreliminaryGraphicsInfoCollected,
311 OnPreliminaryGraphicsInfoCollected)
299 IPC_MESSAGE_HANDLER(GpuHostMsg_OnLogMessage, 312 IPC_MESSAGE_HANDLER(GpuHostMsg_OnLogMessage,
300 OnLogMessage) 313 OnLogMessage)
301 IPC_MESSAGE_HANDLER(GpuHostMsg_SynchronizeReply, 314 IPC_MESSAGE_HANDLER(GpuHostMsg_SynchronizeReply,
302 OnSynchronizeReply) 315 OnSynchronizeReply)
303 #if defined(OS_LINUX) 316 #if defined(OS_LINUX)
304 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID) 317 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID)
305 #elif defined(OS_MACOSX) 318 #elif defined(OS_MACOSX)
306 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, 319 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface,
307 OnAcceleratedSurfaceSetIOSurface) 320 OnAcceleratedSurfaceSetIOSurface)
308 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, 321 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 view->DestroyFakePluginWindowHandle(window); 424 view->DestroyFakePluginWindowHandle(window);
412 #elif defined(OS_WIN) 425 #elif defined(OS_WIN)
413 view->ShowCompositorHostWindow(false); 426 view->ShowCompositorHostWindow(false);
414 #endif 427 #endif
415 } 428 }
416 #endif // defined(OS_MACOSX) || defined(OS_WIN) 429 #endif // defined(OS_MACOSX) || defined(OS_WIN)
417 } 430 }
418 431
419 void GpuProcessHostUIShim::OnGraphicsInfoCollected(const GPUInfo& gpu_info) { 432 void GpuProcessHostUIShim::OnGraphicsInfoCollected(const GPUInfo& gpu_info) {
420 gpu_info_ = gpu_info; 433 gpu_info_ = gpu_info;
421 child_process_logging::SetGpuInfo(gpu_info); 434 if (gpu_feature_flags_.flags() != 0)
435 gpu_info_.SetLevel(GPUInfo::kComplete);
436 child_process_logging::SetGpuInfo(gpu_info_);
422 437
423 // Used only in testing. 438 // Used only in testing.
424 if (gpu_info_collected_callback_.get()) 439 if (gpu_info_collected_callback_.get())
425 gpu_info_collected_callback_->Run(); 440 gpu_info_collected_callback_->Run();
426 } 441 }
427 442
443 void GpuProcessHostUIShim::OnPreliminaryGraphicsInfoCollected(
444 const GPUInfo& gpu_info, IPC::Message* reply_msg) {
445 bool blacklisted = false;
446 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
447 if (!browser_command_line.HasSwitch(switches::kIgnoreGpuBlacklist) &&
448 browser_command_line.GetSwitchValueASCII(
449 switches::kUseGL) != gfx::kGLImplementationOSMesaName) {
450 gpu_feature_flags_ = gpu_blacklist_->DetermineGpuFeatureFlags(
451 GpuBlacklist::kOsAny, NULL, gpu_info);
452 if (gpu_feature_flags_.flags() != 0) {
453 blacklisted = true;
454 gpu_feature_flags_set_ = true;
455 gpu_info_ = gpu_info;
456 gpu_info_.SetLevel(GPUInfo::kComplete);
457 child_process_logging::SetGpuInfo(gpu_info_);
458 uint32 max_entry_id = gpu_blacklist_->max_entry_id();
459 std::vector<uint32> flag_entries;
460 gpu_blacklist_->GetGpuFeatureFlagEntries(
461 GpuFeatureFlags::kGpuFeatureAll, flag_entries);
462 DCHECK_GT(flag_entries.size(), 0u);
463 for (size_t i = 0; i < flag_entries.size(); ++i) {
464 UMA_HISTOGRAM_ENUMERATION("GPU.BlacklistTestResultsPerEntry",
465 flag_entries[i], max_entry_id + 1);
466 }
467 }
468 }
469
470 GpuHostMsg_PreliminaryGraphicsInfoCollected::WriteReplyParams(
471 reply_msg, blacklisted);
472 Send(reply_msg);
473 }
474
428 void GpuProcessHostUIShim::OnLogMessage(int level, 475 void GpuProcessHostUIShim::OnLogMessage(int level,
429 const std::string& header, 476 const std::string& header,
430 const std::string& message) { 477 const std::string& message) {
431 DictionaryValue* dict = new DictionaryValue(); 478 DictionaryValue* dict = new DictionaryValue();
432 dict->SetInteger("level", level); 479 dict->SetInteger("level", level);
433 dict->SetString("header", header); 480 dict->SetString("header", header);
434 dict->SetString("message", message); 481 dict->SetString("message", message);
435 log_messages_.Append(dict); 482 log_messages_.Append(dict);
436 } 483 }
437 484
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 return true; 552 return true;
506 static const base::StringPiece gpu_blacklist_json( 553 static const base::StringPiece gpu_blacklist_json(
507 ResourceBundle::GetSharedInstance().GetRawDataResource( 554 ResourceBundle::GetSharedInstance().GetRawDataResource(
508 IDR_GPU_BLACKLIST)); 555 IDR_GPU_BLACKLIST));
509 gpu_blacklist_.reset(new GpuBlacklist()); 556 gpu_blacklist_.reset(new GpuBlacklist());
510 if (gpu_blacklist_->LoadGpuBlacklist(gpu_blacklist_json.as_string(), true)) 557 if (gpu_blacklist_->LoadGpuBlacklist(gpu_blacklist_json.as_string(), true))
511 return true; 558 return true;
512 gpu_blacklist_.reset(NULL); 559 gpu_blacklist_.reset(NULL);
513 return false; 560 return false;
514 } 561 }
OLDNEW
« no previous file with comments | « chrome/browser/gpu_process_host_ui_shim.h ('k') | chrome/common/gpu_messages_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698