/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _LIB_OPENGL_RENDER_THREAD_INFO_H #define _LIB_OPENGL_RENDER_THREAD_INFO_H #include #include #include #include "aemu/base/files/Stream.h" #if GFXSTREAM_ENABLE_HOST_GLES #include "renderControl_dec/renderControl_dec.h" #include "RenderThreadInfoGl.h" #endif #include "RenderThreadInfoVk.h" #if GFXSTREAM_ENABLE_HOST_MAGMA #include "RenderThreadInfoMagma.h" #endif namespace gfxstream { // A class used to model the state of each RenderThread related struct RenderThreadInfo { // Create new instance. Only call this once per thread. // Future callls to get() will return this instance until // it is destroyed. RenderThreadInfo(); // Destructor. ~RenderThreadInfo(); // Return the current thread's instance, if any, or NULL. static RenderThreadInfo* get(); // Loop over all active render thread infos static void forAllRenderThreadInfos(std::function); #if GFXSTREAM_ENABLE_HOST_GLES void initGl(); #endif // The unique id of owner guest process of this render thread uint64_t m_puid = 0; std::optional m_processName; #if GFXSTREAM_ENABLE_HOST_GLES renderControl_decoder_context_t m_rcDec; std::optional m_glInfo; #endif std::optional m_vkInfo; #if GFXSTREAM_ENABLE_HOST_MAGMA std::optional m_magmaInfo; #endif // Whether this thread was used to perform composition. bool m_isCompositionThread = false; // Functions to save / load a snapshot // They must be called after Framebuffer snapshot void onSave(android::base::Stream* stream); bool onLoad(android::base::Stream* stream); // Sometimes we can load render thread info before // FrameBuffer repopulates the contexts. void postLoadRefreshCurrentContextSurfacePtrs(); }; } // namespace gfxstream #endif