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