Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2374)

Unified Diff: gpu/ipc/service/direct_composition_surface_win_unittest.cc

Issue 2852953003: Use real colorspace for DirectComposition overlays.
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/ipc/service/direct_composition_surface_win_unittest.cc
diff --git a/gpu/ipc/service/direct_composition_surface_win_unittest.cc b/gpu/ipc/service/direct_composition_surface_win_unittest.cc
index fe1d83c520e1df0e8eac9a5aac102dd0487897a4..99eb7c4f6d1f213b20702cb8c02a6b19bfc80836 100644
--- a/gpu/ipc/service/direct_composition_surface_win_unittest.cc
+++ b/gpu/ipc/service/direct_composition_surface_win_unittest.cc
@@ -113,8 +113,8 @@ base::win::ScopedComPtr<ID3D11Texture2D> CreateNV12Texture(
desc.BindFlags = 0;
std::vector<char> image_data(size.width() * size.height() * 3 / 2);
- // Y, U, and V should all be Oxff. Output color should be pink.
- memset(&image_data[0], 0xff, size.width() * size.height() * 3 / 2);
+ // Y, U, and V should all be 160. Output color should be pink.
+ memset(&image_data[0], 160, size.width() * size.height() * 3 / 2);
D3D11_SUBRESOURCE_DATA data = {};
data.pSysMem = (const void*)&image_data[0];
@@ -316,8 +316,8 @@ TEST(DirectCompositionSurfaceTest, NoPresentTwice) {
ui::DCRendererLayerParams params(
false, gfx::Rect(), 1, gfx::Transform(),
std::vector<scoped_refptr<gl::GLImage>>{image_dxgi},
- gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(window_size), 0, 0, 1.0,
- 0);
+ gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(window_size), 0, 0, 1.0, 0,
+ gfx::ColorSpace::CreateREC709());
surface->ScheduleDCLayer(params);
base::win::ScopedComPtr<IDXGISwapChain1> swap_chain =
@@ -352,7 +352,7 @@ TEST(DirectCompositionSurfaceTest, NoPresentTwice) {
false, gfx::Rect(), 1, gfx::Transform(),
std::vector<scoped_refptr<gl::GLImage>>{image_dxgi},
gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(0, 0, 25, 25), 0, 0, 1.0,
- 0);
+ 0, gfx::ColorSpace::CreateREC709());
surface->ScheduleDCLayer(params2);
EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers());
@@ -467,47 +467,72 @@ bool AreColorsSimilar(int a, int b) {
abs(SkColorGetB(a) - SkColorGetB(b)) < kMargin;
}
-TEST_F(DirectCompositionPixelTest, VideoSwapchain) {
- if (!CheckIfDCSupported())
- return;
- InitializeSurface();
- surface_->SetEnableDCLayers(true);
- gfx::Size window_size(100, 100);
+class DirectCompositionVideoPixelTest : public DirectCompositionPixelTest {
+ protected:
+ void TestVideo(const gfx::ColorSpace& color_space, SkColor expected_color) {
+ if (!CheckIfDCSupported())
+ return;
+ InitializeSurface();
+ surface_->SetEnableDCLayers(true);
+ gfx::Size window_size(100, 100);
- scoped_refptr<gl::GLContext> context = gl::init::CreateGLContext(
- nullptr, surface_.get(), gl::GLContextAttribs());
- EXPECT_TRUE(surface_->Resize(window_size, 1.0, true));
+ scoped_refptr<gl::GLContext> context = gl::init::CreateGLContext(
+ nullptr, surface_.get(), gl::GLContextAttribs());
+ EXPECT_TRUE(surface_->Resize(window_size, 1.0, true));
- base::win::ScopedComPtr<ID3D11Device> d3d11_device =
- gl::QueryD3D11DeviceObjectFromANGLE();
+ base::win::ScopedComPtr<ID3D11Device> d3d11_device =
+ gl::QueryD3D11DeviceObjectFromANGLE();
- gfx::Size texture_size(50, 50);
- base::win::ScopedComPtr<ID3D11Texture2D> texture =
- CreateNV12Texture(d3d11_device, texture_size);
+ gfx::Size texture_size(50, 50);
+ base::win::ScopedComPtr<ID3D11Texture2D> texture =
+ CreateNV12Texture(d3d11_device, texture_size);
- scoped_refptr<gl::GLImageDXGI> image_dxgi(
- new gl::GLImageDXGI(texture_size, nullptr));
- image_dxgi->SetTexture(texture, 0);
+ scoped_refptr<gl::GLImageDXGI> image_dxgi(
+ new gl::GLImageDXGI(texture_size, nullptr));
+ image_dxgi->SetTexture(texture, 0);
- ui::DCRendererLayerParams params(
- false, gfx::Rect(), 1, gfx::Transform(),
- std::vector<scoped_refptr<gl::GLImage>>{image_dxgi},
- gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(window_size), 0, 0, 1.0,
- 0);
- surface_->ScheduleDCLayer(params);
+ ui::DCRendererLayerParams params(
+ false, gfx::Rect(), 1, gfx::Transform(),
+ std::vector<scoped_refptr<gl::GLImage>>{image_dxgi},
+ gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(window_size), 0, 0, 1.0,
+ 0, color_space);
+ surface_->ScheduleDCLayer(params);
- EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface_->SwapBuffers());
- Sleep(1000);
+ EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface_->SwapBuffers());
+ Sleep(1000);
- SkColor expected_color = SkColorSetRGB(0xff, 0xb7, 0xff);
- SkColor actual_color =
- ReadBackWindowPixel(window_.hwnd(), gfx::Point(75, 75));
- EXPECT_TRUE(AreColorsSimilar(expected_color, actual_color))
- << std::hex << "Expected " << expected_color << " Actual "
- << actual_color;
+ SkColor actual_color =
+ ReadBackWindowPixel(window_.hwnd(), gfx::Point(75, 75));
+ EXPECT_TRUE(AreColorsSimilar(expected_color, actual_color))
+ << std::hex << "Expected " << expected_color << " Actual "
+ << actual_color;
- context = nullptr;
- DestroySurface(std::move(surface_));
+ context = nullptr;
+ DestroySurface(std::move(surface_));
+ }
+};
+
+TEST_F(DirectCompositionVideoPixelTest, BT601) {
+ TestVideo(gfx::ColorSpace::CreateREC601(), SkColorSetRGB(0xdb, 0x81, 0xe8));
+}
+
+TEST_F(DirectCompositionVideoPixelTest, BT709) {
+ TestVideo(gfx::ColorSpace::CreateREC709(), SkColorSetRGB(0xe1, 0x90, 0xeb));
+}
+
+TEST_F(DirectCompositionVideoPixelTest, SRGB) {
+ // SRGB doesn't make sense on an NV12 input, but don't crash.
+ TestVideo(gfx::ColorSpace::CreateSRGB(), SkColorSetRGB(0xd7, 0x89, 0xe0));
+}
+
+TEST_F(DirectCompositionVideoPixelTest, SCRGBLinear) {
+ // SCRGB doesn't make sense on an NV12 input, but don't crash.
+ TestVideo(gfx::ColorSpace::CreateSCRGBLinear(),
+ SkColorSetRGB(0xd7, 0x89, 0xe0));
+}
+TEST_F(DirectCompositionVideoPixelTest, InvalidColorSpace) {
+ // Invalid color space should be treated as BT.709
+ TestVideo(gfx::ColorSpace(), SkColorSetRGB(0xe1, 0x90, 0xeb));
}
TEST_F(DirectCompositionPixelTest, SoftwareVideoSwapchain) {
@@ -545,7 +570,8 @@ TEST_F(DirectCompositionPixelTest, SoftwareVideoSwapchain) {
ui::DCRendererLayerParams params(
false, gfx::Rect(), 1, gfx::Transform(),
std::vector<scoped_refptr<gl::GLImage>>{y_image, uv_image},
- gfx::RectF(gfx::Rect(y_size)), gfx::Rect(window_size), 0, 0, 1.0, 0);
+ gfx::RectF(gfx::Rect(y_size)), gfx::Rect(window_size), 0, 0, 1.0, 0,
+ gfx::ColorSpace::CreateREC709());
surface_->ScheduleDCLayer(params);
EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface_->SwapBuffers());
@@ -561,5 +587,6 @@ TEST_F(DirectCompositionPixelTest, SoftwareVideoSwapchain) {
context = nullptr;
DestroySurface(std::move(surface_));
}
+
} // namespace
} // namespace gpu

Powered by Google App Engine
This is Rietveld 408576698