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

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 1805343005: android: Hide the WebGraphicsContext3D in GLHelperHolder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@wgc3d-unused
Patch Set: wgc3d-rwhva: removedsetcontext Created 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_widget_host_view_android.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index a0a4f789640e3b00676af4dca2a3f3ecc776bb24..fa0d3e7581ae6f3810bb98135a753fc120849fea 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -116,29 +116,23 @@ const int kUndefinedOutputSurfaceId = -1;
static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime";
-class GLHelperHolder
- : public blink::WebGraphicsContext3D::WebGraphicsContextLostCallback {
+class GLHelperHolder {
public:
static GLHelperHolder* Create();
- ~GLHelperHolder() override;
- void Initialize();
-
- // WebGraphicsContextLostCallback implementation.
- void onContextLost() override;
-
- GLHelper* GetGLHelper() { return gl_helper_.get(); }
+ GLHelper* gl_helper() { return gl_helper_.get(); }
bool IsLost() {
- return !context_ ||
- context_->GetGLInterface()->GetGraphicsResetStatusKHR() !=
- GL_NO_ERROR;
+ if (!gl_helper_)
+ return true;
+ return provider_->ContextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR;
}
private:
- GLHelperHolder();
- static scoped_ptr<WebGraphicsContext3DCommandBufferImpl> CreateContext3D();
+ GLHelperHolder() = default;
+ void Initialize();
+ void OnContextLost();
- scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context_;
+ scoped_refptr<ContextProviderCommandBuffer> provider_;
scoped_ptr<GLHelper> gl_helper_;
DISALLOW_COPY_AND_ASSIGN(GLHelperHolder);
@@ -147,45 +141,17 @@ class GLHelperHolder
GLHelperHolder* GLHelperHolder::Create() {
GLHelperHolder* holder = new GLHelperHolder;
holder->Initialize();
-
return holder;
}
-GLHelperHolder::GLHelperHolder() {
-}
-
-GLHelperHolder::~GLHelperHolder() {
-}
-
void GLHelperHolder::Initialize() {
- context_ = CreateContext3D();
- if (context_) {
- context_->setContextLostCallback(this);
- gl_helper_.reset(new GLHelper(context_->GetImplementation(),
- context_->GetContextSupport()));
- }
-}
-
-void GLHelperHolder::onContextLost() {
- // Need to post a task because the command buffer client cannot be deleted
- // from within this callback.
- LOG(ERROR) << "Context lost.";
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&RenderWidgetHostViewAndroid::OnContextLost));
-}
-
-scoped_ptr<WebGraphicsContext3DCommandBufferImpl>
-GLHelperHolder::CreateContext3D() {
- BrowserGpuChannelHostFactory* factory =
- BrowserGpuChannelHostFactory::instance();
+ auto* factory = BrowserGpuChannelHostFactory::instance();
scoped_refptr<GpuChannelHost> gpu_channel_host(factory->GetGpuChannel());
- // GLHelper can only be used in asynchronous APIs for postprocessing after
- // Browser Compositor operations (i.e. readback).
- if (!gpu_channel_host.get()) {
- // The Browser Compositor is in charge of reestablishing the channel.
- return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>();
- }
+
+ // The Browser Compositor is in charge of reestablishing the channel if its
+ // missing.
+ if (!gpu_channel_host)
+ return;
blink::WebGraphicsContext3D::Attributes attrs;
attrs.shareResources = true;
@@ -209,17 +175,25 @@ GLHelperHolder::CreateContext3D() {
gpu::kNullSurfaceHandle, // offscreen
url, gpu_channel_host.get(), attrs, lose_context_when_out_of_memory,
limits, nullptr));
- context->SetContextType(BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT);
- if (context->InitializeOnCurrentThread()) {
- context->GetImplementation()->TraceBeginCHROMIUM(
- "gpu_toplevel",
- base::StringPrintf("CmdBufferImageTransportFactory-%p", context.get())
- .c_str());
- } else {
- context.reset();
- }
+ provider_ = ContextProviderCommandBuffer::Create(
+ std::move(context), BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT);
+ if (!provider_->BindToCurrentThread())
+ return;
+ provider_->ContextGL()->TraceBeginCHROMIUM(
+ "gpu_toplevel",
+ base::StringPrintf("CmdBufferImageTransportFactory-%p", provider_.get())
+ .c_str());
+ provider_->SetLostContextCallback(
+ base::Bind(&GLHelperHolder::OnContextLost, base::Unretained(this)));
+ gl_helper_.reset(
+ new GLHelper(provider_->ContextGL(), provider_->ContextSupport()));
+}
- return context;
+void GLHelperHolder::OnContextLost() {
+ // Need to post a task because the command buffer client cannot be deleted
+ // from within this callback.
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&RenderWidgetHostViewAndroid::OnContextLost));
}
// This can only be used for readback postprocessing. It may return null if the
@@ -235,7 +209,7 @@ GLHelper* GetPostReadbackGLHelper() {
if (!g_readback_helper_holder)
g_readback_helper_holder = GLHelperHolder::Create();
- return g_readback_helper_holder->GetGLHelper();
+ return g_readback_helper_holder->gl_helper();
}
void CopyFromCompositingSurfaceFinished(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698