0

skia: Update mojo tests to use mojo::test::SerializeAndDeserialize

This allows us to avoid creating a test mojo service and simplifies
the code.

Follow up from review comments in:
https://chromium-review.googlesource.com/c/chromium/src/+/2368484

Bug: 1116652
Change-Id: I02206df8f1213beb264068e2a8b818d93ef2cee0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2386378
Auto-Submit: James Cook <jamescook@chromium.org>
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Greg Kerr <kerrnel@chromium.org>
Reviewed-by: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#803476}
This commit is contained in:
James Cook
2020-09-01 13:52:59 +00:00
committed by Commit Bot
parent 8901199d29
commit 19faab6318
4 changed files with 45 additions and 93 deletions

@ -948,10 +948,9 @@ test("skia_unittests") {
if (!is_ios) {
sources += [ "public/mojom/test/mojom_traits_unittest.cc" ]
deps += [
# TODO: Fix this test to not depend on cc.
"//cc:test_support",
"//mojo/public/cpp/bindings",
"//skia/public/mojom:test_interfaces",
"//mojo/public/cpp/test_support:test_utils",
"//skia/public/mojom",
]
}

@ -97,10 +97,3 @@ mojom("mojom") {
cpp_typemaps = shared_skia_cpp_typemaps
blink_cpp_typemaps = shared_skia_cpp_typemaps
}
mojom("test_interfaces") {
testonly = true
sources = [ "test/traits_test_service.mojom" ]
public_deps = [ ":mojom" ]
}

@ -2,10 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/task_environment.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "skia/public/mojom/test/traits_test_service.mojom.h"
#include "mojo/public/cpp/test_support/test_utils.h"
#include "skia/public/mojom/bitmap.mojom.h"
#include "skia/public/mojom/blur_image_filter_tile_mode.mojom.h"
#include "skia/public/mojom/blur_image_filter_tile_mode_mojom_traits.h"
#include "skia/public/mojom/image_info.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkColorFilter.h"
#include "third_party/skia/include/core/SkColorSpace.h"
@ -21,61 +22,39 @@ namespace skia {
namespace {
class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
public:
StructTraitsTest() = default;
protected:
mojo::Remote<mojom::TraitsTestService> GetTraitsTestRemote() {
mojo::Remote<mojom::TraitsTestService> remote;
traits_test_receivers_.Add(this, remote.BindNewPipeAndPassReceiver());
return remote;
}
private:
// TraitsTestService:
void EchoImageInfo(const SkImageInfo& i,
EchoImageInfoCallback callback) override {
std::move(callback).Run(i);
}
void EchoBitmap(const SkBitmap& b, EchoBitmapCallback callback) override {
std::move(callback).Run(b);
}
void EchoBlurImageFilterTileMode(
SkBlurImageFilter::TileMode t,
EchoBlurImageFilterTileModeCallback callback) override {
std::move(callback).Run(t);
}
base::test::TaskEnvironment task_environment_;
mojo::ReceiverSet<TraitsTestService> traits_test_receivers_;
DISALLOW_COPY_AND_ASSIGN(StructTraitsTest);
};
// mojo::test::SerializeAndDeserialize() doesn't work for a raw enum, so roll
// our own.
bool SerializeAndDeserialize(SkBlurImageFilter::TileMode* input,
SkBlurImageFilter::TileMode* output) {
skia::mojom::BlurTileMode mode =
mojo::EnumTraits<skia::mojom::BlurTileMode,
SkBlurImageFilter::TileMode>::ToMojom(*input);
return mojo::EnumTraits<skia::mojom::BlurTileMode,
SkBlurImageFilter::TileMode>::FromMojom(mode, output);
}
} // namespace
TEST_F(StructTraitsTest, ImageInfo) {
TEST(StructTraitsTest, ImageInfo) {
SkImageInfo input = SkImageInfo::Make(
34, 56, SkColorType::kGray_8_SkColorType,
SkAlphaType::kUnpremul_SkAlphaType,
SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kAdobeRGB));
mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
SkImageInfo output;
remote->EchoImageInfo(input, &output);
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<skia::mojom::ImageInfo>(
&input, &output));
EXPECT_EQ(input, output);
SkImageInfo another_input_with_null_color_space =
SkImageInfo::Make(54, 43, SkColorType::kRGBA_8888_SkColorType,
SkAlphaType::kPremul_SkAlphaType, nullptr);
remote->EchoImageInfo(another_input_with_null_color_space, &output);
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<skia::mojom::ImageInfo>(
&another_input_with_null_color_space, &output));
EXPECT_FALSE(output.colorSpace());
EXPECT_EQ(another_input_with_null_color_space, output);
}
TEST_F(StructTraitsTest, ImageInfoCustomColorSpace) {
TEST(StructTraitsTest, ImageInfoCustomColorSpace) {
skcms_TransferFunction transfer{0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f};
skcms_Matrix3x3 gamut{
.vals = {{0.1f, 0.2f, 0.3f}, {0.4f, 0.5f, 0.6f}, {0.7f, 0.8f, 0.9f}}};
@ -83,14 +62,14 @@ TEST_F(StructTraitsTest, ImageInfoCustomColorSpace) {
SkImageInfo input =
SkImageInfo::Make(12, 34, SkColorType::kRGBA_8888_SkColorType,
kUnpremul_SkAlphaType, color_space);
mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
SkImageInfo output;
remote->EchoImageInfo(input, &output);
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<skia::mojom::ImageInfo>(
&input, &output));
EXPECT_TRUE(output.colorSpace());
EXPECT_EQ(input, output);
}
TEST_F(StructTraitsTest, Bitmap) {
TEST(StructTraitsTest, Bitmap) {
SkBitmap input;
input.allocPixels(SkImageInfo::MakeN32Premul(
10, 5,
@ -98,39 +77,37 @@ TEST_F(StructTraitsTest, Bitmap) {
SkNamedGamut::kRec2020)));
input.eraseColor(SK_ColorYELLOW);
input.erase(SK_ColorTRANSPARENT, SkIRect::MakeXYWH(0, 1, 2, 3));
mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
SkBitmap output;
remote->EchoBitmap(input, &output);
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<skia::mojom::Bitmap>(
&input, &output));
EXPECT_EQ(input.info(), output.info());
EXPECT_EQ(input.rowBytes(), output.rowBytes());
EXPECT_TRUE(gfx::BitmapsAreEqual(input, output));
}
TEST_F(StructTraitsTest, BitmapTooWideToSerialize) {
TEST(StructTraitsTest, BitmapTooWideToSerialize) {
SkBitmap input;
constexpr int kTooWide = 32 * 1024 + 1;
input.allocPixels(
SkImageInfo::MakeN32(kTooWide, 1, SkAlphaType::kUnpremul_SkAlphaType));
input.eraseColor(SK_ColorYELLOW);
mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
SkBitmap output;
remote->EchoBitmap(input, &output);
EXPECT_TRUE(output.isNull());
ASSERT_FALSE(mojo::test::SerializeAndDeserialize<skia::mojom::Bitmap>(
&input, &output));
}
TEST_F(StructTraitsTest, BitmapTooTallToSerialize) {
TEST(StructTraitsTest, BitmapTooTallToSerialize) {
SkBitmap input;
constexpr int kTooTall = 32 * 1024 + 1;
input.allocPixels(
SkImageInfo::MakeN32(1, kTooTall, SkAlphaType::kUnpremul_SkAlphaType));
input.eraseColor(SK_ColorYELLOW);
mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
SkBitmap output;
remote->EchoBitmap(input, &output);
EXPECT_TRUE(output.isNull());
ASSERT_FALSE(mojo::test::SerializeAndDeserialize<skia::mojom::Bitmap>(
&input, &output));
}
TEST_F(StructTraitsTest, BitmapWithExtraRowBytes) {
TEST(StructTraitsTest, BitmapWithExtraRowBytes) {
SkBitmap input;
// Ensure traits work with bitmaps containing additional bytes between rows.
SkImageInfo info =
@ -141,19 +118,24 @@ TEST_F(StructTraitsTest, BitmapWithExtraRowBytes) {
input.allocPixels(info, info.minRowBytes() + extra);
input.eraseColor(SK_ColorRED);
input.erase(SK_ColorTRANSPARENT, SkIRect::MakeXYWH(0, 1, 2, 3));
mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
SkBitmap output;
remote->EchoBitmap(input, &output);
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<skia::mojom::Bitmap>(
&input, &output));
EXPECT_EQ(input.info(), output.info());
EXPECT_EQ(input.rowBytes(), output.rowBytes());
EXPECT_TRUE(gfx::BitmapsAreEqual(input, output));
}
TEST_F(StructTraitsTest, BlurImageFilterTileMode) {
TEST(StructTraitsTest, BlurImageFilterTileMode) {
SkBlurImageFilter::TileMode input(SkBlurImageFilter::kClamp_TileMode);
mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
SkBlurImageFilter::TileMode output;
remote->EchoBlurImageFilterTileMode(input, &output);
ASSERT_TRUE(SerializeAndDeserialize(&input, &output));
EXPECT_EQ(input, output);
input = SkBlurImageFilter::kRepeat_TileMode;
ASSERT_TRUE(SerializeAndDeserialize(&input, &output));
EXPECT_EQ(input, output);
input = SkBlurImageFilter::kClampToBlack_TileMode;
ASSERT_TRUE(SerializeAndDeserialize(&input, &output));
EXPECT_EQ(input, output);
}

@ -1,22 +0,0 @@
// 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.
module skia.mojom;
import "skia/public/mojom/image_info.mojom";
import "skia/public/mojom/bitmap.mojom";
import "skia/public/mojom/blur_image_filter_tile_mode.mojom";
// All functions on this interface echo their arguments to test StructTraits
// serialization and deserialization.
interface TraitsTestService {
[Sync]
EchoImageInfo(ImageInfo i) => (ImageInfo pass);
[Sync]
EchoBitmap(Bitmap b) => (Bitmap pass);
[Sync]
EchoBlurImageFilterTileMode(BlurTileMode t) => (BlurTileMode pass);
};