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