Home | History | Annotate | Download | only in EGL
      1 /*
      2 * Copyright (C) 2011 The Android Open Source Project
      3 *
      4 * Licensed under the Apache License, Version 2.0 (the "License");
      5 * you may not use this file except in compliance with the License.
      6 * You may obtain a copy of the License at
      7 *
      8 * http://www.apache.org/licenses/LICENSE-2.0
      9 *
     10 * Unless required by applicable law or agreed to in writing, software
     11 * distributed under the License is distributed on an "AS IS" BASIS,
     12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 * See the License for the specific language governing permissions and
     14 * limitations under the License.
     15 */
     16 #include "EglThreadInfo.h"
     17 #include "EglOsApi.h"
     18 
     19 #include "emugl/common/lazy_instance.h"
     20 #include "emugl/common/thread_store.h"
     21 
     22 namespace {
     23 
     24 class EglThreadInfoStore : public emugl::ThreadStore {
     25 public:
     26     EglThreadInfoStore() : emugl::ThreadStore(&destructor) {}
     27 private:
     28     static void destructor(void* value) {
     29         delete static_cast<EglThreadInfo*>(value);
     30     }
     31 };
     32 
     33 }  // namespace
     34 
     35 EglThreadInfo::EglThreadInfo() :
     36         m_err(EGL_SUCCESS), m_api(EGL_OPENGL_ES_API) {}
     37 
     38 static emugl::LazyInstance<EglThreadInfoStore> s_tls = LAZY_INSTANCE_INIT;
     39 
     40 EglThreadInfo* EglThreadInfo::get(void)
     41 {
     42     EglThreadInfo *ti = static_cast<EglThreadInfo*>(s_tls->get());
     43     if (!ti) {
     44         ti = new EglThreadInfo();
     45         s_tls->set(ti);
     46     }
     47     return ti;
     48 }
     49 
     50