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

Unified Diff: content/browser/aura/gpu_process_transport_factory.cc

Issue 111063003: Aura: Don't create GL context for CreateSharedSurfaceHandle() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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
Index: content/browser/aura/gpu_process_transport_factory.cc
diff --git a/content/browser/aura/gpu_process_transport_factory.cc b/content/browser/aura/gpu_process_transport_factory.cc
index b5a8e7a4f04209a2614a81907590c00306bdf5d1..59ebd9b0d40b905a533bc9bea34dc77298313ef0 100644
--- a/content/browser/aura/gpu_process_transport_factory.cc
+++ b/content/browser/aura/gpu_process_transport_factory.cc
@@ -27,6 +27,7 @@
#include "content/common/gpu/client/gpu_channel_host.h"
#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
#include "content/common/gpu/gpu_process_launch_causes.h"
+#include "content/public/browser/render_process_host.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "ui/compositor/compositor.h"
@@ -147,6 +148,13 @@ GpuProcessTransportFactory::GpuProcessTransportFactory()
: callback_factory_(this) {
output_surface_proxy_ = new BrowserCompositorOutputSurfaceProxy(
&output_surface_map_);
+ if (GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()) {
+ CauseForGpuLaunch cause = CAUSE_FOR_GPU_LAUNCH_BROWSER_STARTUP;
+ BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel(
+ cause,
+ base::Bind(&GpuProcessTransportFactory::OnGpuChannelReady,
+ callback_factory_.GetWeakPtr()));
+ }
}
GpuProcessTransportFactory::~GpuProcessTransportFactory() {
@@ -285,15 +293,11 @@ ui::ContextFactory* GpuProcessTransportFactory::AsContextFactory() {
}
gfx::GLSurfaceHandle GpuProcessTransportFactory::CreateSharedSurfaceHandle() {
- scoped_refptr<cc::ContextProvider> provider =
- SharedMainThreadContextProvider();
- if (!provider.get())
+ if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor())
piman 2013/12/11 01:14:03 In the rest of the patch, we're essentially assumi
no sievers 2013/12/11 01:49:24 I think on windows with SwiftShader it's possible
return gfx::GLSurfaceHandle();
- typedef WebGraphicsContext3DCommandBufferImpl WGC3DCBI;
- WGC3DCBI* context = static_cast<WGC3DCBI*>(provider->Context3d());
+
gfx::GLSurfaceHandle handle = gfx::GLSurfaceHandle(
gfx::kNullPluginWindow, gfx::TEXTURE_TRANSPORT);
- handle.parent_gpu_process_id = context->GetGPUProcessID();
handle.parent_client_id =
BrowserGpuChannelHostFactory::instance()->GetGpuChannelId();
return handle;
@@ -493,10 +497,27 @@ void GpuProcessTransportFactory::OnLostMainThreadSharedContext() {
observer_list_,
OnLostResources());
+ // This needs to happen after we notified the observers, because until then
+ // we want to block renderers' CreateViewCommandBuffer requests.
+ CauseForGpuLaunch cause =
+ CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE;
+ BrowserGpuChannelHostFactory::instance()->EstablishGpuChannel(
+ cause,
+ base::Bind(&GpuProcessTransportFactory::OnGpuChannelReady,
+ callback_factory_.GetWeakPtr()));
+
// Kill things that use the shared context before killing the shared context.
lost_gl_helper.reset();
lost_offscreen_compositor_contexts = NULL;
lost_shared_main_thread_contexts = NULL;
}
+void GpuProcessTransportFactory::OnGpuChannelReady() {
piman 2013/12/11 01:14:03 nit: this could be static, so you wouldn't need we
+ for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
+ !i.IsAtEnd();
+ i.Advance()) {
+ i.GetCurrentValue()->OnParentGpuChannelEstablished();
+ }
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698