Home | History | Annotate | Download | only in compositor
      1 // Copyright (c) 2013 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 "context_provider_from_context_factory.h"
      6 
      7 #include "base/logging.h"
      8 
      9 namespace ui {
     10 
     11 // static
     12 scoped_refptr<ContextProviderFromContextFactory>
     13 ContextProviderFromContextFactory::CreateForOffscreen(ContextFactory* factory) {
     14   scoped_refptr<ContextProviderFromContextFactory> provider =
     15       new ContextProviderFromContextFactory(factory);
     16   if (!provider->InitializeOnMainThread())
     17     return NULL;
     18   return provider;
     19 }
     20 
     21 ContextProviderFromContextFactory::ContextProviderFromContextFactory(
     22     ContextFactory* factory)
     23     : factory_(factory),
     24       destroyed_(false) {
     25 }
     26 
     27 ContextProviderFromContextFactory::~ContextProviderFromContextFactory() {
     28 }
     29 
     30 bool ContextProviderFromContextFactory::BindToCurrentThread() {
     31   DCHECK(context3d_);
     32   return context3d_->makeContextCurrent();
     33 }
     34 
     35 WebKit::WebGraphicsContext3D* ContextProviderFromContextFactory::Context3d() {
     36   DCHECK(context3d_);
     37   return context3d_.get();
     38 }
     39 
     40 class GrContext* ContextProviderFromContextFactory::GrContext() {
     41   DCHECK(context3d_);
     42 
     43   if (!gr_context_) {
     44     gr_context_.reset(
     45         new webkit::gpu::GrContextForWebGraphicsContext3D(context3d_.get()));
     46   }
     47   return gr_context_->get();
     48 }
     49 
     50 void ContextProviderFromContextFactory::VerifyContexts() {
     51   DCHECK(context3d_);
     52 
     53   if (context3d_->isContextLost()) {
     54     base::AutoLock lock(destroyed_lock_);
     55     destroyed_ = true;
     56   }
     57 }
     58 
     59 bool ContextProviderFromContextFactory::DestroyedOnMainThread() {
     60   base::AutoLock lock(destroyed_lock_);
     61   return destroyed_;
     62 }
     63 
     64 void ContextProviderFromContextFactory::SetLostContextCallback(
     65     const LostContextCallback& cb) {
     66   NOTIMPLEMENTED();
     67 }
     68 
     69 bool ContextProviderFromContextFactory::InitializeOnMainThread() {
     70   if (context3d_)
     71     return true;
     72   context3d_ = factory_->CreateOffscreenContext();
     73   return !!context3d_;
     74 }
     75 
     76 }  // namespace ui
     77