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

Unified Diff: content/browser/android/in_process/synchronous_compositor_factory_impl.cc

Issue 920443003: Android: SetCreateContextCallback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reduce the diff Created 5 years, 9 months 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/android/in_process/synchronous_compositor_factory_impl.cc
diff --git a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
index 282d9755c637d7dad3fc4b1f651803e3ca3020dc..2a6f6dceb7238b9c2e0ce18bc298ab378816c608 100644
--- a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
@@ -39,68 +39,6 @@ blink::WebGraphicsContext3D::Attributes GetDefaultAttribs() {
return attributes;
}
-scoped_ptr<gpu::GLInProcessContext> CreateOffscreenContext(
- const blink::WebGraphicsContext3D::Attributes& attributes) {
- const gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
-
- gpu::gles2::ContextCreationAttribHelper in_process_attribs;
- WebGraphicsContext3DImpl::ConvertAttributes(
- attributes, &in_process_attribs);
- in_process_attribs.lose_context_when_out_of_memory = true;
-
- scoped_ptr<gpu::GLInProcessContext> context(gpu::GLInProcessContext::Create(
- NULL /* service */,
- NULL /* surface */,
- true /* is_offscreen */,
- gfx::kNullAcceleratedWidget,
- gfx::Size(1, 1),
- NULL /* share_context */,
- attributes.shareResources,
- in_process_attribs,
- gpu_preference,
- gpu::GLInProcessContextSharedMemoryLimits(),
- nullptr,
- nullptr));
- return context.Pass();
-}
-
-scoped_ptr<gpu::GLInProcessContext> CreateContext(
- scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
- const gpu::GLInProcessContextSharedMemoryLimits& mem_limits,
- bool is_offscreen,
- bool share_resources) {
- const gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
- gpu::gles2::ContextCreationAttribHelper in_process_attribs;
- WebGraphicsContext3DImpl::ConvertAttributes(
- GetDefaultAttribs(), &in_process_attribs);
- in_process_attribs.lose_context_when_out_of_memory = true;
-
- scoped_ptr<gpu::GLInProcessContext> context(gpu::GLInProcessContext::Create(
- service,
- NULL /* surface */,
- is_offscreen,
- gfx::kNullAcceleratedWidget,
- gfx::Size(1, 1),
- NULL /* share_context */,
- share_resources /* share_resources */,
- in_process_attribs,
- gpu_preference,
- mem_limits,
- nullptr,
- nullptr));
- return context.Pass();
-}
-
-scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> WrapContext(
- scoped_ptr<gpu::GLInProcessContext> context) {
- if (!context.get())
- return scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>();
-
- return scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>(
- WebGraphicsContext3DInProcessCommandBufferImpl::WrapContext(
- context.Pass(), GetDefaultAttribs()));
-}
-
scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
WrapContextWithAttributes(
scoped_ptr<gpu::GLInProcessContext> context,
@@ -119,12 +57,10 @@ class SynchronousCompositorFactoryImpl::VideoContextProvider
: public StreamTextureFactorySynchronousImpl::ContextProvider {
public:
VideoContextProvider(
- scoped_ptr<gpu::GLInProcessContext> gl_in_process_context)
- : gl_in_process_context_(gl_in_process_context.get()) {
-
- context_provider_ = webkit::gpu::ContextProviderInProcess::Create(
- WrapContext(gl_in_process_context.Pass()),
- "Video-Offscreen-main-thread");
+ scoped_refptr<ContextProviderWebContext> context_provider,
+ gpu::GLInProcessContext* context)
+ : context_provider_(context_provider),
+ gl_in_process_context_(context) {
context_provider_->BindToCurrentThread();
}
@@ -207,23 +143,19 @@ scoped_refptr<ContextProviderWebContext>
SynchronousCompositorFactoryImpl::CreateOffscreenContextProvider(
const blink::WebGraphicsContext3D::Attributes& attributes,
const std::string& debug_name) {
- scoped_ptr<gpu::GLInProcessContext> context =
- CreateOffscreenContext(attributes);
- return webkit::gpu::ContextProviderInProcess::Create(
- WrapContext(context.Pass()), debug_name);
+ return callback_.Run(false, attributes, true,
+ gpu::GLInProcessContextSharedMemoryLimits())
+ .context_provider;
}
scoped_refptr<cc::ContextProvider>
SynchronousCompositorFactoryImpl::CreateContextProviderForCompositor() {
- DCHECK(service_.get());
-
gpu::GLInProcessContextSharedMemoryLimits mem_limits;
// This is half of what RenderWidget uses because synchronous compositor
// pipeline is only one frame deep.
mem_limits.mapped_memory_reclaim_limit = 6 * 1024 * 1024;
- return webkit::gpu::ContextProviderInProcess::Create(
- WrapContext(CreateContext(nullptr, mem_limits, true, true)),
- "Child-Compositor");
+ return callback_.Run(false, GetDefaultAttribs(), true, mem_limits)
+ .context_provider;
}
scoped_refptr<StreamTextureFactory>
@@ -240,8 +172,12 @@ SynchronousCompositorFactoryImpl::CreateStreamTextureFactory(int frame_id) {
WebGraphicsContext3DInProcessCommandBufferImpl*
SynchronousCompositorFactoryImpl::CreateOffscreenGraphicsContext3D(
const blink::WebGraphicsContext3D::Attributes& attributes) {
- return WrapContextWithAttributes(CreateOffscreenContext(attributes),
- attributes).release();
+ return WrapContextWithAttributes(
+ make_scoped_ptr(
+ callback_.Run(false, attributes, true,
+ gpu::GLInProcessContextSharedMemoryLimits())
+ .context),
+ attributes).release();
}
void SynchronousCompositorFactoryImpl::CompositorInitializedHardwareDraw() {
@@ -289,20 +225,21 @@ SynchronousCompositorFactoryImpl::TryCreateStreamTextureFactory() {
}
if (!video_context_provider_.get()) {
- DCHECK(service_.get());
-
- // This needs to run in on-screen |service_| context due to SurfaceTexture
+ blink::WebGraphicsContext3D::Attributes attributes = GetDefaultAttribs();
+ attributes.shareResources = true;
+ SynchronousCompositor::ContextHolder holder = callback_.Run(
+ true, attributes, false, gpu::GLInProcessContextSharedMemoryLimits());
+ // This needs to run in on-screen context due to SurfaceTexture
// limitations.
- video_context_provider_ = new VideoContextProvider(CreateContext(
- service_, gpu::GLInProcessContextSharedMemoryLimits(), false, false));
+ video_context_provider_ =
+ new VideoContextProvider(holder.context_provider, holder.context);
}
return video_context_provider_;
}
-void SynchronousCompositorFactoryImpl::SetDeferredGpuService(
- scoped_refptr<gpu::InProcessCommandBuffer::Service> service) {
- DCHECK(!service_.get());
- service_ = service;
+void SynchronousCompositorFactoryImpl::SetCreateContextCallback(
+ SynchronousCompositor::CreateContextCallback callback) {
+ callback_ = callback;
}
void SynchronousCompositorFactoryImpl::SetRecordFullDocument(

Powered by Google App Engine
This is Rietveld 408576698