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

Unified Diff: mojo/gles2/gles2_impl.cc

Issue 428413002: Make async waiter explicit MojoGLES2CreateContext param (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | « mojo/examples/sample_app/sample_app.cc ('k') | mojo/mojo_examples.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/gles2/gles2_impl.cc
diff --git a/mojo/gles2/gles2_impl.cc b/mojo/gles2/gles2_impl.cc
index 59b427846589649b4cc59b963646a7abc99da2c4..a77405f7a91690c56037f963cb56292a52b66d92 100644
--- a/mojo/gles2/gles2_impl.cc
+++ b/mojo/gles2/gles2_impl.cc
@@ -4,6 +4,8 @@
#include "mojo/public/c/gles2/gles2.h"
+#include "base/lazy_instance.h"
+#include "base/threading/thread_local.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "mojo/gles2/gles2_context.h"
@@ -11,34 +13,20 @@ using mojo::gles2::GLES2Context;
namespace {
-const MojoAsyncWaiter* g_async_waiter = NULL;
-gpu::gles2::GLES2Interface* g_gpu_interface = NULL;
+base::LazyInstance<base::ThreadLocalPointer<gpu::gles2::GLES2Interface> >::Leaky
+ g_gpu_interface;
} // namespace
extern "C" {
-
-void MojoGLES2Initialize(const MojoAsyncWaiter* async_waiter) {
- DCHECK(!g_async_waiter);
- DCHECK(async_waiter);
- g_async_waiter = async_waiter;
-}
-
-void MojoGLES2Terminate() {
- DCHECK(g_async_waiter);
- g_async_waiter = NULL;
-}
-
-MojoGLES2Context MojoGLES2CreateContext(
- MojoHandle handle,
- MojoGLES2ContextLost lost_callback,
- void* closure) {
+MojoGLES2Context MojoGLES2CreateContext(MojoHandle handle,
+ MojoGLES2ContextLost lost_callback,
+ void* closure,
+ const MojoAsyncWaiter* async_waiter) {
mojo::MessagePipeHandle mph(handle);
mojo::ScopedMessagePipeHandle scoped_handle(mph);
- scoped_ptr<GLES2Context> client(new GLES2Context(g_async_waiter,
- scoped_handle.Pass(),
- lost_callback,
- closure));
+ scoped_ptr<GLES2Context> client(new GLES2Context(
+ async_waiter, scoped_handle.Pass(), lost_callback, closure));
if (!client->Initialize())
client.reset();
return client.release();
@@ -55,12 +43,12 @@ void MojoGLES2MakeCurrent(MojoGLES2Context context) {
interface = client->interface();
DCHECK(interface);
}
- g_gpu_interface = interface;
+ g_gpu_interface.Get().Set(interface);
}
void MojoGLES2SwapBuffers() {
- assert(g_gpu_interface);
- g_gpu_interface->SwapBuffers();
+ DCHECK(g_gpu_interface.Get().Get());
+ g_gpu_interface.Get().Get()->SwapBuffers();
}
void* MojoGLES2GetGLES2Interface(MojoGLES2Context context) {
@@ -71,10 +59,10 @@ void* MojoGLES2GetContextSupport(MojoGLES2Context context) {
return static_cast<GLES2Context*>(context)->context_support();
}
-#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \
- ReturnType gl##Function PARAMETERS { \
- assert(g_gpu_interface); \
- return g_gpu_interface->Function ARGUMENTS; \
+#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \
+ ReturnType gl##Function PARAMETERS { \
+ DCHECK(g_gpu_interface.Get().Get()); \
+ return g_gpu_interface.Get().Get()->Function ARGUMENTS; \
}
#include "mojo/public/c/gles2/gles2_call_visitor_autogen.h"
#undef VISIT_GL_CALL
« no previous file with comments | « mojo/examples/sample_app/sample_app.cc ('k') | mojo/mojo_examples.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698