#pragma once
#if ENABLE(GPU_PROCESS)
#include "AuxiliaryProcess.h"
#include "WebPageProxyIdentifier.h"
#include <pal/SessionID.h>
#include <wtf/Function.h>
#include <wtf/MemoryPressureHandler.h>
#include <wtf/WeakPtr.h>
namespace WebKit {
class GPUConnectionToWebProcess;
struct GPUProcessCreationParameters;
class GPUProcess : public AuxiliaryProcess, public ThreadSafeRefCounted<GPUProcess>, public CanMakeWeakPtr<GPUProcess> {
WTF_MAKE_NONCOPYABLE(GPUProcess);
public:
explicit GPUProcess(AuxiliaryProcessInitializationParameters&&);
~GPUProcess();
static constexpr ProcessType processType = ProcessType::GPU;
void removeGPUConnectionToWebProcess(GPUConnectionToWebProcess&);
void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
void processDidResume();
void resume();
void connectionToWebProcessClosed(IPC::Connection&);
GPUConnectionToWebProcess* webProcessConnection(WebCore::ProcessIdentifier) const;
private:
void lowMemoryHandler(Critical);
void initializeProcess(const AuxiliaryProcessInitializationParameters&) override;
void initializeProcessName(const AuxiliaryProcessInitializationParameters&) override;
void initializeSandbox(const AuxiliaryProcessInitializationParameters&, SandboxInitializationParameters&) override;
bool shouldTerminate() override;
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
void didClose(IPC::Connection&) override;
void initializeGPUProcess(GPUProcessCreationParameters&&);
void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
void processDidTransitionToForeground();
void processDidTransitionToBackground();
void setMockCaptureDevicesEnabled(bool);
HashMap<WebCore::ProcessIdentifier, Ref<GPUConnectionToWebProcess>> m_webProcessConnections;
};
}
#endif // ENABLE(GPU_PROCESS)