blob: 3f5648d76dd78c2ebb8507bd91167768fd88b9a3 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/viz/test/draw_quad_matchers.h"
#include "components/viz/common/quads/compositor_render_pass_draw_quad.h"
#include "components/viz/common/quads/shared_quad_state.h"
#include "components/viz/common/quads/solid_color_draw_quad.h"
#include "ui/gfx/overlay_layer_id.h"
namespace viz {
namespace {
const char* MaterialToString(DrawQuad::Material material) {
switch (material) {
case DrawQuad::Material::kInvalid:
return "kInvalid";
case DrawQuad::Material::kDebugBorder:
return "kDebugBorder";
case DrawQuad::Material::kPictureContent:
return "kPictureContent";
case DrawQuad::Material::kCompositorRenderPass:
return "kCompositorRenderPass";
case DrawQuad::Material::kAggregatedRenderPass:
return "kAggregatedRenderPass";
case DrawQuad::Material::kSolidColor:
return "kSolidColor";
case DrawQuad::Material::kSharedElement:
return "kSharedElement";
case DrawQuad::Material::kSurfaceContent:
return "kSurfaceContent";
case DrawQuad::Material::kTextureContent:
return "kTextureContent";
case DrawQuad::Material::kTiledContent:
return "kTiledContent";
case DrawQuad::Material::kVideoHole:
return "kVideoHole";
}
}
// Produces a matcher for a DrawQuad that matches on quad material.
testing::Matcher<const DrawQuad*> IsQuadType(
DrawQuad::Material expected_material) {
return testing::Field("material", &DrawQuad::material,
testing::Eq(expected_material));
}
} // namespace
void PrintTo(DrawQuad::Material material, ::std::ostream* os) {
*os << MaterialToString(material);
}
void PrintTo(const OffsetTag& offset_tag, ::std::ostream* os) {
*os << offset_tag.ToString();
}
testing::Matcher<const DrawQuad*> IsSolidColorQuad() {
return IsQuadType(DrawQuad::Material::kSolidColor);
}
testing::Matcher<const DrawQuad*> IsSolidColorQuad(SkColor4f expected_color) {
return testing::AllOf(
IsSolidColorQuad(),
testing::Truly([expected_color](const DrawQuad* quad) {
return SolidColorDrawQuad::MaterialCast(quad)->color == expected_color;
}));
}
testing::Matcher<const DrawQuad*> IsTextureQuad() {
return IsQuadType(DrawQuad::Material::kTextureContent);
}
testing::Matcher<const DrawQuad*> IsSurfaceQuad() {
return IsQuadType(DrawQuad::Material::kSurfaceContent);
}
testing::Matcher<const DrawQuad*> IsCompositorRenderPassQuad(
CompositorRenderPassId id) {
return testing::AllOf(
IsQuadType(DrawQuad::Material::kCompositorRenderPass),
testing::Truly([id](const DrawQuad* quad) {
return CompositorRenderPassDrawQuad::MaterialCast(quad)
->render_pass_id == id;
}));
}
testing::Matcher<const DrawQuad*> IsAggregatedRenderPassQuad() {
return IsQuadType(DrawQuad::Material::kAggregatedRenderPass);
}
testing::Matcher<const DrawQuad*> HasRect(const gfx::Rect& rect) {
return testing::Field("rect", &DrawQuad::rect, testing::Eq(rect));
}
testing::Matcher<const DrawQuad*> HasVisibleRect(
const gfx::Rect& visible_rect) {
return testing::Field("visible_rect", &DrawQuad::visible_rect,
testing::Eq(visible_rect));
}
testing::Matcher<const DrawQuad*> HasSharedQuadState(
testing::Matcher<const SharedQuadState*> matcher) {
return testing::Field("shared_quad_state", &DrawQuad::shared_quad_state,
matcher);
}
testing::Matcher<const DrawQuad*> HasTransform(
const gfx::Transform& transform) {
return HasSharedQuadState(testing::Field(
"quad_to_target_transform", &SharedQuadState::quad_to_target_transform,
testing::Eq(transform)));
}
testing::Matcher<const DrawQuad*> HasOpacity(float opacity) {
return HasSharedQuadState(testing::Field("opacity", &SharedQuadState::opacity,
testing::Eq(opacity)));
}
testing::Matcher<const DrawQuad*> AreContentsOpaque(bool opaque) {
return HasSharedQuadState(testing::Field(
"are_contents_opaque", &SharedQuadState::are_contents_opaque,
testing::Eq(opaque)));
}
testing::Matcher<const DrawQuad*> HasClipRect(
std::optional<gfx::Rect> clip_rect) {
return HasSharedQuadState(testing::Field(
"clip_rect", &SharedQuadState::clip_rect, testing::Eq(clip_rect)));
}
testing::Matcher<const DrawQuad*> HasOffsetTag(OffsetTag offset_tag) {
return HasSharedQuadState(testing::Field(
"offset_tag", &SharedQuadState::offset_tag, testing::Eq(offset_tag)));
}
testing::Matcher<const DrawQuad*> HasLayerId(uint32_t layer_id) {
return HasSharedQuadState(testing::Field(
"layer_id", &SharedQuadState::layer_id, testing::Eq(layer_id)));
}
testing::Matcher<const DrawQuad*> HasLayerNamespaceId(
const gfx::OverlayLayerId::NamespaceId& layer_namespace_id) {
return HasSharedQuadState(testing::Field("layer_namespace_id",
&SharedQuadState::layer_namespace_id,
testing::Eq(layer_namespace_id)));
}
testing::Matcher<const DrawQuad*> HasMaskFilterInfo(
const gfx::MaskFilterInfo& mask_filter_info) {
return HasSharedQuadState(testing::Field("mask_filter_info",
&SharedQuadState::mask_filter_info,
testing::Eq(mask_filter_info)));
}
} // namespace viz