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

Unified 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gpu_process_host_ui_shim.cc
===================================================================
--- chrome/browser/gpu_process_host_ui_shim.cc (revision 75345)
+++ chrome/browser/gpu_process_host_ui_shim.cc (working copy)
@@ -17,6 +17,7 @@
#include "chrome/common/child_process_logging.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/gpu_messages.h"
+#include "chrome/gpu/gpu_info_collector.h"
#include "grit/browser_resources.h"
#include "ui/base/resource/resource_bundle.h"
@@ -187,6 +188,13 @@
DCHECK(CalledOnValidThread());
linked_ptr<EstablishChannelCallback> wrapped_callback(callback);
+ // If GPU features are already blacklisted, no need to establish the channel.
+ if (EnsureInitialized() && gpu_feature_flags_.flags() != 0) {
+ EstablishChannelError(
+ wrapped_callback.release(), IPC::ChannelHandle(), GPUInfo());
+ return;
+ }
+
if (Send(new GpuMsg_EstablishChannel(renderer_id))) {
channel_requests_.push(wrapped_callback);
} else {
@@ -259,6 +267,9 @@
void GpuProcessHostUIShim::CollectGraphicsInfoAsynchronously(
GPUInfo::Level level) {
DCHECK(CalledOnValidThread());
+ // If GPU is already blacklisted, no more info will be collected.
+ if (gpu_feature_flags_.flags() != 0)
+ return;
Send(new GpuMsg_CollectGraphicsInfo(level));
}
@@ -296,6 +307,8 @@
OnDestroyCommandBuffer)
IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected,
OnGraphicsInfoCollected)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_PreliminaryGraphicsInfoCollected,
+ OnPreliminaryGraphicsInfoCollected)
IPC_MESSAGE_HANDLER(GpuHostMsg_OnLogMessage,
OnLogMessage)
IPC_MESSAGE_HANDLER(GpuHostMsg_SynchronizeReply,
@@ -418,13 +431,47 @@
void GpuProcessHostUIShim::OnGraphicsInfoCollected(const GPUInfo& gpu_info) {
gpu_info_ = gpu_info;
- child_process_logging::SetGpuInfo(gpu_info);
+ if (gpu_feature_flags_.flags() != 0)
+ gpu_info_.SetLevel(GPUInfo::kComplete);
+ child_process_logging::SetGpuInfo(gpu_info_);
// Used only in testing.
if (gpu_info_collected_callback_.get())
gpu_info_collected_callback_->Run();
}
+void GpuProcessHostUIShim::OnPreliminaryGraphicsInfoCollected(
+ const GPUInfo& gpu_info, IPC::Message* reply_msg) {
+ bool blacklisted = false;
+ const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
+ if (!browser_command_line.HasSwitch(switches::kIgnoreGpuBlacklist) &&
+ browser_command_line.GetSwitchValueASCII(
+ switches::kUseGL) != gfx::kGLImplementationOSMesaName) {
+ gpu_feature_flags_ = gpu_blacklist_->DetermineGpuFeatureFlags(
+ GpuBlacklist::kOsAny, NULL, gpu_info);
+ if (gpu_feature_flags_.flags() != 0) {
+ blacklisted = true;
+ gpu_feature_flags_set_ = true;
+ gpu_info_ = gpu_info;
+ gpu_info_.SetLevel(GPUInfo::kComplete);
+ child_process_logging::SetGpuInfo(gpu_info_);
+ uint32 max_entry_id = gpu_blacklist_->max_entry_id();
+ std::vector<uint32> flag_entries;
+ gpu_blacklist_->GetGpuFeatureFlagEntries(
+ GpuFeatureFlags::kGpuFeatureAll, flag_entries);
+ DCHECK_GT(flag_entries.size(), 0u);
+ for (size_t i = 0; i < flag_entries.size(); ++i) {
+ UMA_HISTOGRAM_ENUMERATION("GPU.BlacklistTestResultsPerEntry",
+ flag_entries[i], max_entry_id + 1);
+ }
+ }
+ }
+
+ GpuHostMsg_PreliminaryGraphicsInfoCollected::WriteReplyParams(
+ reply_msg, blacklisted);
+ Send(reply_msg);
+}
+
void GpuProcessHostUIShim::OnLogMessage(int level,
const std::string& header,
const std::string& message) {
« 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