OLD | NEW |
---|---|
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 "content/browser/gpu/gpu_process_host.h" | 5 #include "content/browser/gpu/gpu_process_host.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/base_switches.h" | 8 #include "base/base_switches.h" |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
134 CauseForGpuLaunch cause, | 134 CauseForGpuLaunch cause, |
135 IPC::Message* message) { | 135 IPC::Message* message) { |
136 GpuProcessHost* host = GpuProcessHost::Get(kind, cause); | 136 GpuProcessHost* host = GpuProcessHost::Get(kind, cause); |
137 if (host) { | 137 if (host) { |
138 host->Send(message); | 138 host->Send(message); |
139 } else { | 139 } else { |
140 delete message; | 140 delete message; |
141 } | 141 } |
142 } | 142 } |
143 | 143 |
144 void SendGpuProcessUpdateValueStateMessage(int client_id, | |
145 unsigned int target, | |
146 const gpu::ValueState& state) { | |
147 GpuProcessHost* host = GpuProcessHost::Get( | |
148 GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED, | |
149 CAUSE_FOR_GPU_LAUNCH_NO_LAUNCH); | |
150 if (host) | |
151 host->SendUpdateValueState(client_id, target, state); | |
152 } | |
153 | |
144 // NOTE: changes to this class need to be reviewed by the security team. | 154 // NOTE: changes to this class need to be reviewed by the security team. |
145 class GpuSandboxedProcessLauncherDelegate | 155 class GpuSandboxedProcessLauncherDelegate |
146 : public SandboxedProcessLauncherDelegate { | 156 : public SandboxedProcessLauncherDelegate { |
147 public: | 157 public: |
148 GpuSandboxedProcessLauncherDelegate(base::CommandLine* cmd_line, | 158 GpuSandboxedProcessLauncherDelegate(base::CommandLine* cmd_line, |
149 ChildProcessHost* host) | 159 ChildProcessHost* host) |
150 #if defined(OS_WIN) | 160 #if defined(OS_WIN) |
151 : cmd_line_(cmd_line) {} | 161 : cmd_line_(cmd_line) {} |
152 #elif defined(OS_POSIX) | 162 #elif defined(OS_POSIX) |
153 : ipc_fd_(host->TakeClientFileDescriptor()) {} | 163 : ipc_fd_(host->TakeClientFileDescriptor()) {} |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
342 CauseForGpuLaunch cause, | 352 CauseForGpuLaunch cause, |
343 IPC::Message* message) { | 353 IPC::Message* message) { |
344 if (!BrowserThread::PostTask( | 354 if (!BrowserThread::PostTask( |
345 BrowserThread::IO, FROM_HERE, | 355 BrowserThread::IO, FROM_HERE, |
346 base::Bind( | 356 base::Bind( |
347 &SendGpuProcessMessage, kind, cause, message))) { | 357 &SendGpuProcessMessage, kind, cause, message))) { |
348 delete message; | 358 delete message; |
349 } | 359 } |
350 } | 360 } |
351 | 361 |
362 //static | |
363 void GpuProcessHost::SendUpdateValueStateOnIO(int client_id, | |
364 unsigned int target, | |
365 const gpu::ValueState& state) { | |
366 BrowserThread::PostTask( | |
367 BrowserThread::IO, FROM_HERE, | |
Tom Sepez
2014/12/04 22:08:10
nit: indentation.
orglofch
2014/12/04 23:37:10
Done.
| |
368 base::Bind(&SendGpuProcessUpdateValueStateMessage, | |
369 client_id, target, state)); | |
370 } | |
371 | |
352 GpuMainThreadFactoryFunction g_gpu_main_thread_factory = NULL; | 372 GpuMainThreadFactoryFunction g_gpu_main_thread_factory = NULL; |
353 | 373 |
354 void GpuProcessHost::RegisterGpuMainThreadFactory( | 374 void GpuProcessHost::RegisterGpuMainThreadFactory( |
355 GpuMainThreadFactoryFunction create) { | 375 GpuMainThreadFactoryFunction create) { |
356 g_gpu_main_thread_factory = create; | 376 g_gpu_main_thread_factory = create; |
357 } | 377 } |
358 | 378 |
359 // static | 379 // static |
360 GpuProcessHost* GpuProcessHost::FromID(int host_id) { | 380 GpuProcessHost* GpuProcessHost::FromID(int host_id) { |
361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 381 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
575 IPC_MESSAGE_HANDLER(GpuHostMsg_GpuMemoryUmaStats, | 595 IPC_MESSAGE_HANDLER(GpuHostMsg_GpuMemoryUmaStats, |
576 OnGpuMemoryUmaStatsReceived) | 596 OnGpuMemoryUmaStatsReceived) |
577 #if defined(OS_MACOSX) | 597 #if defined(OS_MACOSX) |
578 IPC_MESSAGE_HANDLER_GENERIC(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, | 598 IPC_MESSAGE_HANDLER_GENERIC(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, |
579 OnAcceleratedSurfaceBuffersSwapped(message)) | 599 OnAcceleratedSurfaceBuffersSwapped(message)) |
580 #endif | 600 #endif |
581 IPC_MESSAGE_HANDLER(GpuHostMsg_DestroyChannel, | 601 IPC_MESSAGE_HANDLER(GpuHostMsg_DestroyChannel, |
582 OnDestroyChannel) | 602 OnDestroyChannel) |
583 IPC_MESSAGE_HANDLER(GpuHostMsg_CacheShader, | 603 IPC_MESSAGE_HANDLER(GpuHostMsg_CacheShader, |
584 OnCacheShader) | 604 OnCacheShader) |
585 | 605 IPC_MESSAGE_HANDLER(GpuHostMsg_AddSubscription, OnAddSubscription) |
606 IPC_MESSAGE_HANDLER(GpuHostMsg_RemoveSubscription, OnRemoveSubscription) | |
586 IPC_MESSAGE_UNHANDLED(RouteOnUIThread(message)) | 607 IPC_MESSAGE_UNHANDLED(RouteOnUIThread(message)) |
587 IPC_END_MESSAGE_MAP() | 608 IPC_END_MESSAGE_MAP() |
588 | 609 |
589 return true; | 610 return true; |
590 } | 611 } |
591 | 612 |
592 void GpuProcessHost::OnChannelConnected(int32 peer_pid) { | 613 void GpuProcessHost::OnChannelConnected(int32 peer_pid) { |
593 TRACE_EVENT0("gpu", "GpuProcessHost::OnChannelConnected"); | 614 TRACE_EVENT0("gpu", "GpuProcessHost::OnChannelConnected"); |
594 | 615 |
595 while (!queued_messages_.empty()) { | 616 while (!queued_messages_.empty()) { |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1032 return shader_prefix_key_; | 1053 return shader_prefix_key_; |
1033 } | 1054 } |
1034 | 1055 |
1035 void GpuProcessHost::LoadedShader(const std::string& key, | 1056 void GpuProcessHost::LoadedShader(const std::string& key, |
1036 const std::string& data) { | 1057 const std::string& data) { |
1037 std::string prefix = GetShaderPrefixKey(); | 1058 std::string prefix = GetShaderPrefixKey(); |
1038 if (!key.compare(0, prefix.length(), prefix)) | 1059 if (!key.compare(0, prefix.length(), prefix)) |
1039 Send(new GpuMsg_LoadedShader(data)); | 1060 Send(new GpuMsg_LoadedShader(data)); |
1040 } | 1061 } |
1041 | 1062 |
1063 void GpuProcessHost::SendUpdateValueState(int client_id, | |
1064 unsigned int target, | |
1065 const gpu::ValueState& state) { | |
1066 // Only send data if a valuebuffer is subscribed to the target | |
1067 if (subscription_set_.find(target) != subscription_set_.end()) { | |
1068 Send(new GpuMsg_UpdateValueState(client_id, target, state)); | |
1069 } | |
1070 } | |
1071 | |
1042 void GpuProcessHost::CreateChannelCache(int32 client_id) { | 1072 void GpuProcessHost::CreateChannelCache(int32 client_id) { |
1043 TRACE_EVENT0("gpu", "GpuProcessHost::CreateChannelCache"); | 1073 TRACE_EVENT0("gpu", "GpuProcessHost::CreateChannelCache"); |
1044 | 1074 |
1045 scoped_refptr<ShaderDiskCache> cache = | 1075 scoped_refptr<ShaderDiskCache> cache = |
1046 ShaderCacheFactory::GetInstance()->Get(client_id); | 1076 ShaderCacheFactory::GetInstance()->Get(client_id); |
1047 if (!cache.get()) | 1077 if (!cache.get()) |
1048 return; | 1078 return; |
1049 | 1079 |
1050 cache->set_host_id(host_id_); | 1080 cache->set_host_id(host_id_); |
1051 | 1081 |
(...skipping 10 matching lines...) Expand all Loading... | |
1062 const std::string& shader) { | 1092 const std::string& shader) { |
1063 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); | 1093 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); |
1064 ClientIdToShaderCacheMap::iterator iter = | 1094 ClientIdToShaderCacheMap::iterator iter = |
1065 client_id_to_shader_cache_.find(client_id); | 1095 client_id_to_shader_cache_.find(client_id); |
1066 // If the cache doesn't exist then this is an off the record profile. | 1096 // If the cache doesn't exist then this is an off the record profile. |
1067 if (iter == client_id_to_shader_cache_.end()) | 1097 if (iter == client_id_to_shader_cache_.end()) |
1068 return; | 1098 return; |
1069 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); | 1099 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); |
1070 } | 1100 } |
1071 | 1101 |
1102 void GpuProcessHost::OnAddSubscription(unsigned int target) { | |
1103 subscription_set_.insert(target); | |
1104 } | |
1105 | |
1106 void GpuProcessHost::OnRemoveSubscription(unsigned int target) { | |
1107 subscription_set_.erase(target); | |
1108 } | |
1109 | |
1072 } // namespace content | 1110 } // namespace content |
OLD | NEW |