1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <memory>
6
7 #include "components/viz/service/display/delegated_ink_point_pixel_test_helper.h"
8
9 #include "components/viz/service/display/direct_renderer.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/gfx/geometry/rect_conversions.h"
12
13 namespace viz {
14
15 DelegatedInkPointPixelTestHelper::DelegatedInkPointPixelTestHelper() = default;
16 DelegatedInkPointPixelTestHelper::~DelegatedInkPointPixelTestHelper() = default;
17
DelegatedInkPointPixelTestHelper(DirectRenderer * renderer)18 DelegatedInkPointPixelTestHelper::DelegatedInkPointPixelTestHelper(
19 DirectRenderer* renderer)
20 : renderer_(renderer) {
21 renderer_->CreateDelegatedInkPointRenderer();
22 }
23
SetRendererAndCreateInkRenderer(DirectRenderer * renderer)24 void DelegatedInkPointPixelTestHelper::SetRendererAndCreateInkRenderer(
25 DirectRenderer* renderer) {
26 renderer_ = renderer;
27 renderer_->CreateDelegatedInkPointRenderer();
28 }
29
30 DelegatedInkPointRendererBase*
GetInkRenderer()31 DelegatedInkPointPixelTestHelper::GetInkRenderer() {
32 return renderer_->GetDelegatedInkPointRenderer();
33 }
34
CreateAndSendMetadata(const gfx::PointF & point,float diameter,SkColor color,const gfx::RectF & presentation_area)35 void DelegatedInkPointPixelTestHelper::CreateAndSendMetadata(
36 const gfx::PointF& point,
37 float diameter,
38 SkColor color,
39 const gfx::RectF& presentation_area) {
40 DCHECK(renderer_);
41 metadata_ =
42 DelegatedInkMetadata(point, diameter, color, base::TimeTicks::Now(),
43 presentation_area, base::TimeTicks::Now());
44 GetInkRenderer()->SetDelegatedInkMetadata(
45 std::make_unique<DelegatedInkMetadata>(metadata_));
46 }
47
CreateAndSendMetadataFromLastPoint()48 void DelegatedInkPointPixelTestHelper::CreateAndSendMetadataFromLastPoint() {
49 DCHECK(renderer_);
50 metadata_ = DelegatedInkMetadata(
51 ink_points_.back().point(), metadata_.diameter(), metadata_.color(),
52 ink_points_.back().timestamp(), metadata_.presentation_area(),
53 metadata_.frame_time());
54 GetInkRenderer()->SetDelegatedInkMetadata(
55 std::make_unique<DelegatedInkMetadata>(metadata_));
56 }
57
CreateAndSendPoint(const gfx::PointF & point,base::TimeTicks timestamp)58 void DelegatedInkPointPixelTestHelper::CreateAndSendPoint(
59 const gfx::PointF& point,
60 base::TimeTicks timestamp) {
61 DCHECK(renderer_);
62 ink_points_.emplace_back(point, timestamp);
63 GetInkRenderer()->StoreDelegatedInkPoint(ink_points_.back());
64 }
65
CreateAndSendPointFromMetadata()66 void DelegatedInkPointPixelTestHelper::CreateAndSendPointFromMetadata() {
67 CreateAndSendPoint(metadata().point(), metadata().timestamp());
68 }
69
CreateAndSendPointFromLastPoint(const gfx::PointF & point)70 void DelegatedInkPointPixelTestHelper::CreateAndSendPointFromLastPoint(
71 const gfx::PointF& point) {
72 EXPECT_GT(static_cast<int>(ink_points_.size()), 0);
73 CreateAndSendPoint(point, ink_points_.back().timestamp() +
74 base::TimeDelta::FromMicroseconds(10));
75 }
76
GetDelegatedInkDamageRect()77 gfx::Rect DelegatedInkPointPixelTestHelper::GetDelegatedInkDamageRect() {
78 EXPECT_GT(static_cast<int>(ink_points_.size()), 0);
79 gfx::RectF ink_damage_rect_f =
80 gfx::RectF(ink_points_[0].point(), gfx::SizeF(1, 1));
81 for (uint64_t i = 1; i < ink_points_.size(); ++i) {
82 ink_damage_rect_f.Union(
83 gfx::RectF(ink_points_[i].point(), gfx::SizeF(1, 1)));
84 }
85 ink_damage_rect_f.Inset(-metadata().diameter() / 2.f,
86 -metadata().diameter() / 2.f);
87
88 return gfx::ToEnclosingRect(ink_damage_rect_f);
89 }
90
91 } // namespace viz
92