Commit 8f822dff authored by Jonathan Backer's avatar Jonathan Backer Committed by Commit Bot

Reland "Refactor SkiaOutputSurfaceImplTest.SubmitPaint for on screen"

This is a reland of
https://chromium-review.googlesource.com/c/chromium/src/+/1566685

Bug: 952231
Change-Id: Ifc193d8745fbe8ea6702b73adda6cb0f3b5a1943
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1572227Reviewed-by: default avatarPeng Huang <penghuang@chromium.org>
Commit-Queue: Jonathan Backer <backer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#651850}
parent f1d17199
......@@ -479,7 +479,10 @@ viz_source_set("unit_tests") {
}
if (enable_vulkan) {
deps += [ "//gpu/vulkan/init" ]
deps += [
"//gpu/vulkan:test_support",
"//gpu/vulkan/init",
]
}
}
......
......@@ -1079,11 +1079,14 @@ TYPED_TEST(RendererPixelTest, PremultipliedTextureWithBackground) {
cc::FuzzyPixelOffByOneComparator(true)));
}
TYPED_TEST(GLCapableRendererPixelTest, SolidColorBlend) {
// TODO(backer): Blending is not correct for SkiaRenderer
// (https://crbug.com/953284)
TYPED_TEST(GLCapableRendererPixelTest, DISABLED_SolidColorBlend) {
gfx::Rect rect(this->device_viewport_size_);
int id = 1;
std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
pass->has_transparent_background = false;
SharedQuadState* shared_state = CreateTestSharedQuadState(
gfx::Transform(), rect, pass.get(), gfx::RRectF());
......@@ -1108,7 +1111,7 @@ TYPED_TEST(GLCapableRendererPixelTest, SolidColorBlend) {
EXPECT_TRUE(this->RunPixelTest(
&pass_list, base::FilePath(FILE_PATH_LITERAL("dark_grey.png")),
cc::FuzzyPixelOffByOneComparator(true)));
cc::FuzzyPixelOffByOneComparator(/*discard_alpha=*/true)));
}
// TODO(crbug.com/924369): SkiaRenderer should not ignore the color matrix on
......@@ -3184,6 +3187,7 @@ TYPED_TEST(GLCapableRendererPixelTest, SolidColorDrawQuadForceAntiAliasingOff) {
gfx::Transform transform_to_root;
std::unique_ptr<RenderPass> pass =
CreateTestRenderPass(id, rect, transform_to_root);
pass->has_transparent_background = false;
gfx::Transform hole_quad_to_target_transform;
hole_quad_to_target_transform.Translate(50, 50);
......@@ -3208,7 +3212,7 @@ TYPED_TEST(GLCapableRendererPixelTest, SolidColorDrawQuadForceAntiAliasingOff) {
EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("force_anti_aliasing_off.png")),
cc::ExactPixelComparator(false)));
cc::ExactPixelComparator(/*discard_alpha=*/true)));
}
// This test tests that forcing anti-aliasing off works as expected for
......@@ -3266,7 +3270,7 @@ TYPED_TEST(GLCapableRendererPixelTest, RenderPassDrawQuadForceAntiAliasingOff) {
EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("force_anti_aliasing_off.png")),
cc::ExactPixelComparator(false)));
cc::ExactPixelComparator(/*discard_alpha=*/true)));
}
// This test tests that forcing anti-aliasing off works as expected for
......@@ -3302,6 +3306,7 @@ TYPED_TEST(GLCapableRendererPixelTest, TileDrawQuadForceAntiAliasingOff) {
gfx::Transform transform_to_root;
std::unique_ptr<RenderPass> pass =
CreateTestRenderPass(id, rect, transform_to_root);
pass->has_transparent_background = false;
bool swizzle_contents = true;
bool contents_premultiplied = true;
......@@ -3334,7 +3339,7 @@ TYPED_TEST(GLCapableRendererPixelTest, TileDrawQuadForceAntiAliasingOff) {
EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("force_anti_aliasing_off.png")),
cc::ExactPixelComparator(false)));
cc::ExactPixelComparator(/*discard_alpha=*/true)));
}
// This test tests that forcing anti-aliasing off works as expected while
......@@ -3347,17 +3352,24 @@ TYPED_TEST(GLCapableRendererPixelTest, BlendingWithoutAntiAliasing) {
gfx::Transform transform_to_root;
std::unique_ptr<RenderPass> pass =
CreateTestRenderPass(id, rect, transform_to_root);
pass->has_transparent_background = false;
CreateTestAxisAlignedQuads(rect, 0x800000FF, 0x8000FF00, true, true,
pass.get());
SharedQuadState* background_quad_state = CreateTestSharedQuadState(
gfx::Transform(), rect, pass.get(), gfx::RRectF());
auto* background_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
background_quad->SetNew(background_quad_state, rect, rect, SK_ColorBLACK,
false);
RenderPassList pass_list;
pass_list.push_back(std::move(pass));
EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("translucent_quads_no_aa.png")),
cc::ExactPixelComparator(false)));
cc::ExactPixelComparator(/*discard_alpha=*/true)));
}
// Trilinear filtering is only supported in the gl renderer.
......
......@@ -28,15 +28,23 @@ void SkiaOutputDeviceOffscreen::Reshape(const gfx::Size& size,
float device_scale_factor,
const gfx::ColorSpace& color_space,
bool has_alpha) {
image_info_ = SkImageInfo::Make(
size.width(), size.height(),
has_alpha_ ? kRGBA_8888_SkColorType : kRGB_888x_SkColorType,
has_alpha_ ? kPremul_SkAlphaType : kOpaque_SkAlphaType);
// Some Vulkan drivers do not support kRGB_888x_SkColorType. Always use
// kRGBA_8888_SkColorType instead and initialize surface to opaque alpha.
image_info_ =
SkImageInfo::Make(size.width(), size.height(), kRGBA_8888_SkColorType,
has_alpha_ ? kPremul_SkAlphaType : kOpaque_SkAlphaType);
draw_surface_ = SkSurface::MakeRenderTarget(
gr_context_, SkBudgeted::kNo, image_info_, 0 /* sampleCount */,
capabilities_.flipped_output_surface ? kTopLeft_GrSurfaceOrigin
: kBottomLeft_GrSurfaceOrigin,
nullptr /* surfaceProps */);
DCHECK(!!draw_surface_);
// Initialize alpha channel to opaque.
if (!has_alpha_) {
auto* canvas = draw_surface_->getCanvas();
canvas->clear(SkColorSetARGB(255, 0, 0, 0));
}
}
gfx::SwapResponse SkiaOutputDeviceOffscreen::PostSubBuffer(
......
......@@ -33,11 +33,14 @@
#if BUILDFLAG(ENABLE_VULKAN)
#include "gpu/vulkan/init/vulkan_factory.h"
#include "gpu/vulkan/tests/native_window.h"
#include "gpu/vulkan/vulkan_implementation.h"
#endif
namespace viz {
const gfx::Rect kSurfaceRect(0, 0, 100, 100);
static void ExpectEquals(SkBitmap actual, SkBitmap expected) {
EXPECT_EQ(actual.dimensions(), expected.dimensions());
auto expected_url = cc::GetPNGDataUrl(expected);
......@@ -45,7 +48,7 @@ static void ExpectEquals(SkBitmap actual, SkBitmap expected) {
EXPECT_TRUE(actual_url == expected_url);
}
class SkiaOutputSurfaceImplTest : public testing::Test {
class SkiaOutputSurfaceImplTest : public testing::TestWithParam<bool> {
public:
void CheckSyncTokenOnGpuThread(const gpu::SyncToken& sync_token);
void CopyRequestCallbackOnGpuThread(const SkColor output_color,
......@@ -57,7 +60,8 @@ class SkiaOutputSurfaceImplTest : public testing::Test {
SkiaOutputSurfaceImplTest()
: output_surface_client_(std::make_unique<cc::FakeOutputSurfaceClient>()),
wait_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED) {}
base::WaitableEvent::InitialState::NOT_SIGNALED),
on_screen_(GetParam()) {}
inline void SetUp() override { SetUpSkiaOutputSurfaceImpl(); }
void TearDown() override;
void BlockMainThread();
......@@ -88,6 +92,7 @@ class SkiaOutputSurfaceImplTest : public testing::Test {
std::unique_ptr<cc::FakeOutputSurfaceClient> output_surface_client_;
std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_;
base::WaitableEvent wait_;
const bool on_screen_;
};
void SkiaOutputSurfaceImplTest::BlockMainThread() {
......@@ -196,9 +201,18 @@ void SkiaOutputSurfaceImplTest::SetUpSkiaOutputSurfaceImpl() {
BlockMainThread();
// Set up the SkiaOutputSurfaceImpl.
gpu::SurfaceHandle surface_handle_ = gpu::kNullSurfaceHandle;
if (on_screen_) {
#if BUILDFLAG(ENABLE_VULKAN) && defined(USE_X11)
surface_handle_ = gpu::CreateNativeWindow(kSurfaceRect);
#else
// TODO(backer): Support other platforms.
NOTREACHED();
#endif
}
output_surface_ = std::make_unique<SkiaOutputSurfaceImpl>(
gpu_service_.get(), gpu::kNullSurfaceHandle,
UpdateVSyncParametersCallback(), RendererSettings());
gpu_service_.get(), surface_handle_, UpdateVSyncParametersCallback(),
RendererSettings());
output_surface_->BindToClient(output_surface_client_.get());
}
......@@ -232,10 +246,18 @@ void SkiaOutputSurfaceImplTest::CopyRequestCallbackOnGpuThread(
UnblockMainThread();
}
TEST_F(SkiaOutputSurfaceImplTest, SubmitPaint) {
const gfx::Rect surface_rect(0, 0, 100, 100);
output_surface_->Reshape(surface_rect.size(), 1, gfx::ColorSpace(), true,
false);
INSTANTIATE_TEST_SUITE_P(SkiaOutputSurfaceImplTest,
SkiaOutputSurfaceImplTest,
#if BUILDFLAG(ENABLE_VULKAN) && defined(USE_X11)
::testing::Values(false, true)
#else
::testing::Values(false)
#endif
);
TEST_P(SkiaOutputSurfaceImplTest, SubmitPaint) {
output_surface_->Reshape(kSurfaceRect.size(), 1, gfx::ColorSpace(),
false /* has_alpha */, false /* use_stencil */);
SkCanvas* root_canvas = output_surface_->BeginPaintCurrentFrame();
SkPaint paint;
const SkColor output_color = SK_ColorRED;
......@@ -266,9 +288,9 @@ TEST_F(SkiaOutputSurfaceImplTest, SubmitPaint) {
color_space));
request->set_result_task_runner(gpu_thread_->task_runner());
copy_output::RenderPassGeometry geometry;
geometry.result_bounds = surface_rect;
geometry.result_bounds = kSurfaceRect;
geometry.result_selection = output_rect;
geometry.sampling_bounds = surface_rect;
geometry.sampling_bounds = kSurfaceRect;
if (is_vulkan_enabled()) {
// No flipping because Skia handles all co-ordinate transformation on the
......
......@@ -93,19 +93,35 @@ if (enable_vulkan) {
}
}
jumbo_static_library("test_support") {
testonly = true
sources = [
"tests/native_window.h",
]
deps = [
"//ui/gfx",
"//ui/gfx:native_widget_types",
]
if (use_x11) {
sources += [ "tests/native_window_x11.cc" ]
deps += [ "//ui/gfx/x" ]
configs += [ "//build/config/linux:x11" ]
}
}
# TODO(cblume): These tests should run on each platform -- crbug.com/858614
if (use_x11) {
test("vulkan_tests") {
sources = [
"tests/basic_vulkan_test.cc",
"tests/basic_vulkan_test.h",
"tests/native_window.h",
"tests/vulkan_test.cc",
"tests/vulkan_tests_main.cc",
"vulkan_fence_helper_unittest.cc",
]
deps = [
":test_support",
"//base:base",
"//base/test:test_support",
"//components/viz/common:vulkan_context_provider",
......@@ -116,12 +132,6 @@ if (enable_vulkan) {
"//ui/gfx:native_widget_types",
"//ui/gfx/geometry",
]
if (use_x11) {
sources += [ "tests/native_window_x11.cc" ]
deps += [ "//ui/gfx/x" ]
configs += [ "//build/config/linux:x11" ]
}
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment