#ifndef DisplayList_h
#define DisplayList_h
#include "DisplayListItems.h"
#include <wtf/FastMalloc.h>
#include <wtf/Noncopyable.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class FloatRect;
class GraphicsContext;
class TextStream;
namespace DisplayList {
class Item;
enum AsTextFlag {
None = 0,
IncludesPlatformOperations = 1 << 0,
};
typedef unsigned AsTextFlags;
class DisplayList {
WTF_MAKE_NONCOPYABLE(DisplayList); WTF_MAKE_FAST_ALLOCATED;
friend class Recorder;
friend class Replayer;
public:
DisplayList() = default;
DisplayList(DisplayList&&) = default;
DisplayList& operator=(DisplayList&&) = default;
void dump(TextStream&) const;
const Vector<Ref<Item>>& list() const { return m_list; }
Item& itemAt(size_t index)
{
ASSERT(index < m_list.size());
return m_list[index].get();
}
void clear();
void removeItemsFromIndex(size_t);
size_t itemCount() const { return m_list.size(); }
size_t sizeInBytes() const;
String asText(AsTextFlags) const;
#if !defined(NDEBUG) || !LOG_DISABLED
WTF::CString description() const;
void dump() const;
#endif
private:
Item& append(Ref<Item>&& item)
{
m_list.append(WTFMove(item));
return m_list.last().get();
}
void appendItem(Item& item)
{
m_list.append(item);
}
static bool shouldDumpForFlags(AsTextFlags, const Item&);
Vector<Ref<Item>>& list() { return m_list; }
Vector<Ref<Item>> m_list;
};
}
TextStream& operator<<(TextStream&, const DisplayList::DisplayList&);
}
using WebCore::DisplayList::DisplayList;
#endif