blob: a665238af058995fee5f2c243cba548656d75876 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "platform/graphics/paint/DisplayItemList.h"
#include "SkTypes.h"
#include "platform/graphics/paint/DrawingDisplayItem.h"
#include "platform/graphics/paint/PaintFlags.h"
#include "platform/graphics/paint/PaintRecorder.h"
#include "platform/graphics/skia/SkiaUtils.h"
#include "platform/testing/FakeDisplayItemClient.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
namespace {
#define EXPECT_RECT_EQ(expected, actual) \
do { \
const IntRect& actual_rect = actual; \
EXPECT_EQ(expected.X(), actual_rect.X()); \
EXPECT_EQ(expected.Y(), actual_rect.Y()); \
EXPECT_EQ(expected.Width(), actual_rect.Width()); \
EXPECT_EQ(expected.Height(), actual_rect.Height()); \
} while (false)
static const size_t kDefaultListBytes = 10 * 1024;
class DisplayItemListTest : public ::testing::Test {
public:
DisplayItemListTest() : list_(kDefaultListBytes) {}
DisplayItemList list_;
FakeDisplayItemClient client_;
};
static sk_sp<PaintRecord> CreateRectRecord(const IntRect& bounds) {
PaintRecorder recorder;
PaintCanvas* canvas =
recorder.beginRecording(bounds.Width(), bounds.Height());
canvas->drawRect(
SkRect::MakeXYWH(bounds.X(), bounds.Y(), bounds.Width(), bounds.Height()),
PaintFlags());
return recorder.finishRecordingAsPicture();
}
TEST_F(DisplayItemListTest, AppendVisualRect_Simple) {
IntRect drawing_bounds(5, 6, 7, 8);
list_.AllocateAndConstruct<DrawingDisplayItem>(
client_, DisplayItem::Type::kDocumentBackground,
CreateRectRecord(drawing_bounds), drawing_bounds, true);
list_.AppendVisualRect(drawing_bounds);
EXPECT_EQ(static_cast<size_t>(1), list_.size());
EXPECT_RECT_EQ(drawing_bounds, list_.VisualRect(0));
}
TEST_F(DisplayItemListTest, AppendVisualRect_BlockContainingDrawing) {
// TODO(wkorman): Note the visual rects for the paired begin/end are now
// irrelevant as they're overwritten in cc::DisplayItemList when rebuilt to
// represent the union of all drawing display item visual rects between the
// pair. We should consider revising Blink's display item list in some form
// so as to only store visual rects for drawing display items.
IntRect drawing_bounds(5, 6, 1, 1);
list_.AllocateAndConstruct<DrawingDisplayItem>(
client_, DisplayItem::Type::kDocumentBackground,
CreateRectRecord(drawing_bounds), drawing_bounds, true);
list_.AppendVisualRect(drawing_bounds);
EXPECT_EQ(static_cast<size_t>(1), list_.size());
EXPECT_RECT_EQ(drawing_bounds, list_.VisualRect(0));
}
} // namespace
} // namespace blink