diff options
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/gpu/gpu_process_host.cc | 11 | ||||
-rw-r--r-- | content/browser/gpu/gpu_process_host.h | 3 |
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_; |