#pragma once
#include "AreaAllocator.h"
#include "NicosiaBuffer.h"
#include <wtf/RefPtr.h>
#if USE(COORDINATED_GRAPHICS)
namespace WebCore {
class IntRect;
class IntSize;
class UpdateAtlas {
WTF_MAKE_FAST_ALLOCATED;
WTF_MAKE_NONCOPYABLE(UpdateAtlas);
public:
using ID = uint32_t;
class Client {
public:
virtual void createUpdateAtlas(ID, Ref<Nicosia::Buffer>&&) = 0;
virtual void removeUpdateAtlas(ID) = 0;
};
UpdateAtlas(Client&, const IntSize&, Nicosia::Buffer::Flags);
~UpdateAtlas();
const IntSize& size() const { return m_buffer->size(); }
RefPtr<Nicosia::Buffer> getCoordinatedBuffer(const IntSize&, uint32_t&, IntRect&);
void didSwapBuffers();
bool supportsAlpha() const { return m_buffer->supportsAlpha(); }
void addTimeInactive(double seconds)
{
ASSERT(!isInUse());
m_inactivityInSeconds += seconds;
}
bool isInactive() const
{
const double inactiveSecondsTolerance = 3;
return m_inactivityInSeconds > inactiveSecondsTolerance;
}
bool isInUse() const { return !!m_areaAllocator; }
private:
void buildLayoutIfNeeded();
ID m_id { 0 };
Client& m_client;
std::unique_ptr<GeneralAreaAllocator> m_areaAllocator;
Ref<Nicosia::Buffer> m_buffer;
double m_inactivityInSeconds { 0 };
};
}
#endif // USE(COORDINATED_GRAPHICS)