// 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 <optional>
#include <string>

#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"

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;

    gfxstream::EmulatedEglContextPtr currContext;
    gfxstream::EmulatedEglWindowSurfacePtr currDrawSurf;
    gfxstream::EmulatedEglWindowSurfacePtr currReadSurf;

    // Decoder states.
    GLESv1Decoder                   m_glDec;
    GLESv2Decoder                   m_gl2Dec;
};
