summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/browser/gpu/gpu_process_host.cc11
-rw-r--r--content/browser/gpu/gpu_process_host.h3
2 files changed, 11 insertions, 3 deletions
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index 51be97f..7a13cbf 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -240,8 +240,9 @@ bool GpuProcessHost::HostIsValid(GpuProcessHost* host) {
// blacklisted, and we can kill it and start over.
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess) ||
CommandLine::ForCurrentProcess()->HasSwitch(switches::kInProcessGPU) ||
- host->software_rendering() ||
- !GpuDataManagerImpl::GetInstance()->ShouldUseSoftwareRendering()) {
+ (host->valid_ &&
+ (host->software_rendering() ||
+ !GpuDataManagerImpl::GetInstance()->ShouldUseSoftwareRendering()))) {
return true;
}
@@ -307,6 +308,7 @@ GpuProcessHost* GpuProcessHost::FromID(int host_id) {
GpuProcessHost::GpuProcessHost(int host_id, GpuProcessKind kind)
: host_id_(host_id),
+ valid_(true),
in_process_(false),
software_rendering_(false),
kind_(kind),
@@ -443,7 +445,10 @@ bool GpuProcessHost::Send(IPC::Message* msg) {
return true;
}
- return process_->Send(msg);
+ bool result = process_->Send(msg);
+ if (!result)
+ valid_ = false;
+ return result;
}
bool GpuProcessHost::OnMessageReceived(const IPC::Message& message) {
diff --git a/content/browser/gpu/gpu_process_host.h b/content/browser/gpu/gpu_process_host.h
index be82a75..761c057 100644
--- a/content/browser/gpu/gpu_process_host.h
+++ b/content/browser/gpu/gpu_process_host.h
@@ -171,6 +171,9 @@ class GpuProcessHost : public content::BrowserChildProcessHostDelegate,
// Qeueud messages to send when the process launches.
std::queue<IPC::Message*> queued_messages_;
+ // Whether the GPU process is valid, set to false after Send() failed.
+ bool valid_;
+
// Whether we are running a GPU thread inside the browser process instead
// of a separate GPU process.
bool in_process_;