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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 #endif | 65 #endif |
66 | 66 |
67 #if defined(USE_OZONE) | 67 #if defined(USE_OZONE) |
68 #include "ui/ozone/public/ozone_switches.h" | 68 #include "ui/ozone/public/ozone_switches.h" |
69 #endif | 69 #endif |
70 | 70 |
71 #if defined(USE_X11) && !defined(OS_CHROMEOS) | 71 #if defined(USE_X11) && !defined(OS_CHROMEOS) |
72 #include "ui/gfx/x/x11_switches.h" | 72 #include "ui/gfx/x/x11_switches.h" |
73 #endif | 73 #endif |
74 | 74 |
75 #if defined(OS_MACOSX) && !defined(OS_IOS) | |
76 #include "content/browser/browser_io_surface_manager_mac.h" | |
77 #include "content/common/child_process_messages.h" | |
78 #endif | |
79 | |
80 #if defined(OS_MACOSX) | 75 #if defined(OS_MACOSX) |
81 #include "content/browser/renderer_host/render_widget_resize_helper_mac.h" | 76 #include "content/browser/renderer_host/render_widget_resize_helper_mac.h" |
82 #endif | 77 #endif |
83 | 78 |
84 namespace content { | 79 namespace content { |
85 | 80 |
86 bool GpuProcessHost::gpu_enabled_ = true; | 81 bool GpuProcessHost::gpu_enabled_ = true; |
87 bool GpuProcessHost::hardware_gpu_enabled_ = true; | 82 bool GpuProcessHost::hardware_gpu_enabled_ = true; |
88 int GpuProcessHost::gpu_crash_count_ = 0; | 83 int GpuProcessHost::gpu_crash_count_ = 0; |
89 int GpuProcessHost::gpu_recent_crash_count_ = 0; | 84 int GpuProcessHost::gpu_recent_crash_count_ = 0; |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 DCHECK(CalledOnValidThread()); | 439 DCHECK(CalledOnValidThread()); |
445 | 440 |
446 SendOutstandingReplies(); | 441 SendOutstandingReplies(); |
447 | 442 |
448 // In case we never started, clean up. | 443 // In case we never started, clean up. |
449 while (!queued_messages_.empty()) { | 444 while (!queued_messages_.empty()) { |
450 delete queued_messages_.front(); | 445 delete queued_messages_.front(); |
451 queued_messages_.pop(); | 446 queued_messages_.pop(); |
452 } | 447 } |
453 | 448 |
454 #if defined(OS_MACOSX) && !defined(OS_IOS) | |
455 if (!io_surface_manager_token_.IsZero()) { | |
456 BrowserIOSurfaceManager::GetInstance()->InvalidateGpuProcessToken(); | |
457 io_surface_manager_token_.SetZero(); | |
458 } | |
459 #endif | |
460 | |
461 // This is only called on the IO thread so no race against the constructor | 449 // This is only called on the IO thread so no race against the constructor |
462 // for another GpuProcessHost. | 450 // for another GpuProcessHost. |
463 if (g_gpu_process_hosts[kind_] == this) | 451 if (g_gpu_process_hosts[kind_] == this) |
464 g_gpu_process_hosts[kind_] = NULL; | 452 g_gpu_process_hosts[kind_] = NULL; |
465 | 453 |
466 // If there are any remaining offscreen contexts at the point the | 454 // If there are any remaining offscreen contexts at the point the |
467 // GPU process exits, assume something went wrong, and block their | 455 // GPU process exits, assume something went wrong, and block their |
468 // URLs from accessing client 3D APIs without prompting. | 456 // URLs from accessing client 3D APIs without prompting. |
469 BlockLiveOffscreenContexts(); | 457 BlockLiveOffscreenContexts(); |
470 | 458 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 in_process_gpu_thread_->StartWithOptions(options); | 549 in_process_gpu_thread_->StartWithOptions(options); |
562 | 550 |
563 OnProcessLaunched(); // Fake a callback that the process is ready. | 551 OnProcessLaunched(); // Fake a callback that the process is ready. |
564 } else if (!LaunchGpuProcess(channel_id)) { | 552 } else if (!LaunchGpuProcess(channel_id)) { |
565 return false; | 553 return false; |
566 } | 554 } |
567 | 555 |
568 if (!Send(new GpuMsg_Initialize())) | 556 if (!Send(new GpuMsg_Initialize())) |
569 return false; | 557 return false; |
570 | 558 |
571 #if defined(OS_MACOSX) && !defined(OS_IOS) | |
572 io_surface_manager_token_ = | |
573 BrowserIOSurfaceManager::GetInstance()->GenerateGpuProcessToken(); | |
574 // Note: A valid IOSurface manager token needs to be sent to the Gpu process | |
575 // before any GpuMemoryBuffer allocation requests can be sent. | |
576 Send(new ChildProcessMsg_SetIOSurfaceManagerToken(io_surface_manager_token_)); | |
577 #endif | |
578 | |
579 return true; | 559 return true; |
580 } | 560 } |
581 | 561 |
582 bool GpuProcessHost::SetupMojo() { | 562 bool GpuProcessHost::SetupMojo() { |
583 DCHECK(!mojo_application_host_); | 563 DCHECK(!mojo_application_host_); |
584 mojo_application_host_.reset(new MojoApplicationHost); | 564 mojo_application_host_.reset(new MojoApplicationHost); |
585 return mojo_application_host_->Init(); | 565 return mojo_application_host_->Init(); |
586 } | 566 } |
587 | 567 |
588 void GpuProcessHost::RouteOnUIThread(const IPC::Message& message) { | 568 void GpuProcessHost::RouteOnUIThread(const IPC::Message& message) { |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
930 GpuProcessHost::GpuProcessKind GpuProcessHost::kind() { | 910 GpuProcessHost::GpuProcessKind GpuProcessHost::kind() { |
931 return kind_; | 911 return kind_; |
932 } | 912 } |
933 | 913 |
934 void GpuProcessHost::ForceShutdown() { | 914 void GpuProcessHost::ForceShutdown() { |
935 // This is only called on the IO thread so no race against the constructor | 915 // This is only called on the IO thread so no race against the constructor |
936 // for another GpuProcessHost. | 916 // for another GpuProcessHost. |
937 if (g_gpu_process_hosts[kind_] == this) | 917 if (g_gpu_process_hosts[kind_] == this) |
938 g_gpu_process_hosts[kind_] = NULL; | 918 g_gpu_process_hosts[kind_] = NULL; |
939 | 919 |
940 #if defined(OS_MACOSX) && !defined(OS_IOS) | |
941 if (!io_surface_manager_token_.IsZero()) { | |
942 BrowserIOSurfaceManager::GetInstance()->InvalidateGpuProcessToken(); | |
943 io_surface_manager_token_.SetZero(); | |
944 } | |
945 #endif | |
946 | |
947 process_->ForceShutdown(); | 920 process_->ForceShutdown(); |
948 } | 921 } |
949 | 922 |
950 void GpuProcessHost::StopGpuProcess() { | 923 void GpuProcessHost::StopGpuProcess() { |
951 Send(new GpuMsg_Finalize()); | 924 Send(new GpuMsg_Finalize()); |
952 } | 925 } |
953 | 926 |
954 bool GpuProcessHost::LaunchGpuProcess(const std::string& channel_id) { | 927 bool GpuProcessHost::LaunchGpuProcess(const std::string& channel_id) { |
955 if (!(gpu_enabled_ && | 928 if (!(gpu_enabled_ && |
956 GpuDataManagerImpl::GetInstance()->ShouldUseSwiftShader()) && | 929 GpuDataManagerImpl::GetInstance()->ShouldUseSwiftShader()) && |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1172 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); | 1145 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); |
1173 ClientIdToShaderCacheMap::iterator iter = | 1146 ClientIdToShaderCacheMap::iterator iter = |
1174 client_id_to_shader_cache_.find(client_id); | 1147 client_id_to_shader_cache_.find(client_id); |
1175 // If the cache doesn't exist then this is an off the record profile. | 1148 // If the cache doesn't exist then this is an off the record profile. |
1176 if (iter == client_id_to_shader_cache_.end()) | 1149 if (iter == client_id_to_shader_cache_.end()) |
1177 return; | 1150 return; |
1178 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); | 1151 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); |
1179 } | 1152 } |
1180 | 1153 |
1181 } // namespace content | 1154 } // namespace content |
OLD | NEW |