// Copyright 2022 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 expresso or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include #include "Handle.h" #include "StalePtrRegistry.h" #include "aemu/base/files/Stream.h" #include "gl/EmulatedEglContext.h" #include "gl/EmulatedEglWindowSurface.h" #include "gl/gles1_dec/GLESv1Decoder.h" #include "gl/gles2_dec/GLESv2Decoder.h" namespace gfxstream { namespace gl { struct RenderThreadInfoGl { // Create new instance. Only call this once per thread. // Future calls to get() will return this instance until // it is destroyed. RenderThreadInfoGl(); // Destructor. ~RenderThreadInfoGl(); // Return the current thread's instance, if any, or NULL. static RenderThreadInfoGl* get(); // 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(); // The unique id of owner guest process of this render thread uint64_t m_puid = 0; // All the contexts that are created by this render thread. // New emulator manages contexts in guest process level, // m_contextSet should be deprecated. It is only kept for // backward compatibility reason. ThreadContextSet m_contextSet; // all the window surfaces that are created by this render thread WindowSurfaceSet m_windowSet; // Current EGL context, draw surface and read surface. HandleType currContextHandleFromLoad; HandleType currDrawSurfHandleFromLoad; HandleType currReadSurfHandleFromLoad; EmulatedEglContextPtr currContext; EmulatedEglWindowSurfacePtr currDrawSurf; EmulatedEglWindowSurfacePtr currReadSurf; // Decoder states. GLESv1Decoder m_glDec; GLESv2Decoder m_gl2Dec; }; } // namespace gl } // namespace gfxstream