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:
skia
@ -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);
|
||||
};
|
Reference in New Issue
Block a user