in_process_context_factory.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ui/compositor/test/in_process_context_factory.h" 6 7#include "cc/output/output_surface.h" 8#include "ui/compositor/reflector.h" 9#include "ui/gl/gl_implementation.h" 10#include "ui/gl/gl_surface.h" 11#include "webkit/common/gpu/context_provider_in_process.h" 12#include "webkit/common/gpu/grcontext_for_webgraphicscontext3d.h" 13#include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" 14 15namespace ui { 16 17InProcessContextFactory::InProcessContextFactory() { 18 DCHECK_NE(gfx::GetGLImplementation(), gfx::kGLImplementationNone); 19} 20 21InProcessContextFactory::~InProcessContextFactory() {} 22 23scoped_ptr<cc::OutputSurface> InProcessContextFactory::CreateOutputSurface( 24 Compositor* compositor, 25 bool software_fallback) { 26 DCHECK(!software_fallback); 27 blink::WebGraphicsContext3D::Attributes attrs; 28 attrs.depth = false; 29 attrs.stencil = false; 30 attrs.antialias = false; 31 attrs.shareResources = true; 32 33 using webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl; 34 scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> context3d( 35 WebGraphicsContext3DInProcessCommandBufferImpl::CreateViewContext( 36 attrs, compositor->widget())); 37 CHECK(context3d); 38 39 using webkit::gpu::ContextProviderInProcess; 40 scoped_refptr<ContextProviderInProcess> context_provider = 41 ContextProviderInProcess::Create(context3d.Pass(), "UICompositor"); 42 43 return make_scoped_ptr(new cc::OutputSurface(context_provider)); 44} 45 46scoped_refptr<Reflector> InProcessContextFactory::CreateReflector( 47 Compositor* mirroed_compositor, 48 Layer* mirroring_layer) { 49 return new Reflector(); 50} 51 52void InProcessContextFactory::RemoveReflector( 53 scoped_refptr<Reflector> reflector) {} 54 55scoped_refptr<cc::ContextProvider> 56InProcessContextFactory::OffscreenCompositorContextProvider() { 57 if (!offscreen_compositor_contexts_.get() || 58 !offscreen_compositor_contexts_->DestroyedOnMainThread()) { 59 offscreen_compositor_contexts_ = 60 webkit::gpu::ContextProviderInProcess::CreateOffscreen(); 61 } 62 return offscreen_compositor_contexts_; 63} 64 65scoped_refptr<cc::ContextProvider> 66InProcessContextFactory::SharedMainThreadContextProvider() { 67 if (shared_main_thread_contexts_ && 68 !shared_main_thread_contexts_->DestroyedOnMainThread()) 69 return shared_main_thread_contexts_; 70 71 if (ui::Compositor::WasInitializedWithThread()) { 72 shared_main_thread_contexts_ = 73 webkit::gpu::ContextProviderInProcess::CreateOffscreen(); 74 } else { 75 shared_main_thread_contexts_ = 76 static_cast<webkit::gpu::ContextProviderInProcess*>( 77 OffscreenCompositorContextProvider().get()); 78 } 79 if (shared_main_thread_contexts_ && 80 !shared_main_thread_contexts_->BindToCurrentThread()) 81 shared_main_thread_contexts_ = NULL; 82 83 return shared_main_thread_contexts_; 84} 85 86void InProcessContextFactory::RemoveCompositor(Compositor* compositor) {} 87 88bool InProcessContextFactory::DoesCreateTestContexts() { return false; } 89 90} // namespace ui 91