| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <AVFoundation/AVFoundation.h> | 5 #include <AVFoundation/AVFoundation.h> |
| 6 #include <memory> | 6 #include <memory> |
| 7 | 7 |
| 8 #include "base/mac/sdk_forward_declarations.h" | 8 #include "base/mac/sdk_forward_declarations.h" |
| 9 #include "gpu/GLES2/gl2extchromium.h" | 9 #include "gpu/GLES2/gl2extchromium.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 int sorting_context_id = 0; | 32 int sorting_context_id = 0; |
| 33 gfx::Transform transform; | 33 gfx::Transform transform; |
| 34 gfx::RectF contents_rect = gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f); | 34 gfx::RectF contents_rect = gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| 35 gfx::Rect rect = gfx::Rect(0, 0, 256, 256); | 35 gfx::Rect rect = gfx::Rect(0, 0, 256, 256); |
| 36 unsigned background_color = SkColorSetARGB(0xFF, 0xFF, 0xFF, 0xFF); | 36 unsigned background_color = SkColorSetARGB(0xFF, 0xFF, 0xFF, 0xFF); |
| 37 unsigned edge_aa_mask = 0; | 37 unsigned edge_aa_mask = 0; |
| 38 float opacity = 1.0f; | 38 float opacity = 1.0f; |
| 39 float scale_factor = 1.0f; | 39 float scale_factor = 1.0f; |
| 40 unsigned filter = GL_LINEAR; | 40 unsigned filter = GL_LINEAR; |
| 41 scoped_refptr<gl::GLImageIOSurface> gl_image; | 41 scoped_refptr<gl::GLImageIOSurface> gl_image; |
| 42 ui::CARendererLayerParams::FilterEffects filter_effects; |
| 42 }; | 43 }; |
| 43 | 44 |
| 44 scoped_refptr<gl::GLImageIOSurface> CreateGLImage(const gfx::Size& size, | 45 scoped_refptr<gl::GLImageIOSurface> CreateGLImage(const gfx::Size& size, |
| 45 gfx::BufferFormat format, | 46 gfx::BufferFormat format, |
| 46 bool video) { | 47 bool video) { |
| 47 scoped_refptr<gl::GLImageIOSurface> gl_image( | 48 scoped_refptr<gl::GLImageIOSurface> gl_image( |
| 48 new gl::GLImageIOSurface(size, GL_RGBA)); | 49 new gl::GLImageIOSurface(size, GL_RGBA)); |
| 49 base::ScopedCFTypeRef<IOSurfaceRef> io_surface( | 50 base::ScopedCFTypeRef<IOSurfaceRef> io_surface( |
| 50 gfx::CreateIOSurface(size, format)); | 51 gfx::CreateIOSurface(size, format)); |
| 51 if (video) { | 52 if (video) { |
| 52 base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer; | 53 base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer; |
| 53 CVPixelBufferCreateWithIOSurface(nullptr, io_surface, nullptr, | 54 CVPixelBufferCreateWithIOSurface(nullptr, io_surface, nullptr, |
| 54 cv_pixel_buffer.InitializeInto()); | 55 cv_pixel_buffer.InitializeInto()); |
| 55 gl_image->InitializeWithCVPixelBuffer(cv_pixel_buffer, | 56 gl_image->InitializeWithCVPixelBuffer(cv_pixel_buffer, |
| 56 gfx::GenericSharedMemoryId(), format); | 57 gfx::GenericSharedMemoryId(), format); |
| 57 } else { | 58 } else { |
| 58 gl_image->Initialize(io_surface, gfx::GenericSharedMemoryId(), format); | 59 gl_image->Initialize(io_surface, gfx::GenericSharedMemoryId(), format); |
| 59 } | 60 } |
| 60 return gl_image; | 61 return gl_image; |
| 61 } | 62 } |
| 62 | 63 |
| 63 bool ScheduleCALayer(ui::CARendererLayerTree* tree, | 64 bool ScheduleCALayer(ui::CARendererLayerTree* tree, |
| 64 CALayerProperties* properties) { | 65 CALayerProperties* properties) { |
| 65 return tree->ScheduleCALayer(ui::CARendererLayerParams( | 66 ui::CARendererLayerParams params = ui::CARendererLayerParams( |
| 66 properties->is_clipped, properties->clip_rect, | 67 properties->is_clipped, properties->clip_rect, |
| 67 properties->sorting_context_id, properties->transform, | 68 properties->sorting_context_id, properties->transform, |
| 68 properties->gl_image.get(), properties->contents_rect, properties->rect, | 69 properties->gl_image.get(), properties->contents_rect, properties->rect, |
| 69 properties->background_color, properties->edge_aa_mask, | 70 properties->background_color, properties->edge_aa_mask, |
| 70 properties->opacity, properties->filter)); | 71 properties->opacity, properties->filter); |
| 72 params.filter_effects = properties->filter_effects; |
| 73 return tree->ScheduleCALayer(params); |
| 71 } | 74 } |
| 72 | 75 |
| 73 void UpdateCALayerTree(std::unique_ptr<ui::CARendererLayerTree>& ca_layer_tree, | 76 void UpdateCALayerTree(std::unique_ptr<ui::CARendererLayerTree>& ca_layer_tree, |
| 74 CALayerProperties* properties, | 77 CALayerProperties* properties, |
| 75 CALayer* superlayer) { | 78 CALayer* superlayer) { |
| 76 std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 79 std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( |
| 77 new ui::CARendererLayerTree); | 80 new ui::CARendererLayerTree); |
| 78 bool result = ScheduleCALayer(new_ca_layer_tree.get(), properties); | 81 bool result = ScheduleCALayer(new_ca_layer_tree.get(), properties); |
| 79 EXPECT_TRUE(result); | 82 EXPECT_TRUE(result); |
| 80 new_ca_layer_tree->CommitScheduledCALayers( | 83 new_ca_layer_tree->CommitScheduledCALayers( |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 EXPECT_EQ(transform_layer, | 358 EXPECT_EQ(transform_layer, |
| 356 [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 359 [[clip_and_sorting_layer sublayers] objectAtIndex:0]); |
| 357 EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 360 EXPECT_EQ(1u, [[transform_layer sublayers] count]); |
| 358 EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 361 EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); |
| 359 | 362 |
| 360 // Validate the content layer. | 363 // Validate the content layer. |
| 361 EXPECT_NSEQ(kCAFilterNearest, [content_layer minificationFilter]); | 364 EXPECT_NSEQ(kCAFilterNearest, [content_layer minificationFilter]); |
| 362 EXPECT_NSEQ(kCAFilterNearest, [content_layer magnificationFilter]); | 365 EXPECT_NSEQ(kCAFilterNearest, [content_layer magnificationFilter]); |
| 363 } | 366 } |
| 364 | 367 |
| 368 // Add every filter effect. |
| 369 { |
| 370 using FilterEffectType = ui::CARendererLayerParams::FilterEffectType; |
| 371 for (int i = static_cast<int>(FilterEffectType::MIN); |
| 372 i <= static_cast<int>(FilterEffectType::MAX); i++) { |
| 373 ui::CARendererLayerParams::FilterEffect filter_effect; |
| 374 filter_effect.type = static_cast<FilterEffectType>(i); |
| 375 filter_effect.amount = i * 0.05 + 0.1; |
| 376 properties.filter_effects.push_back(filter_effect); |
| 377 } |
| 378 UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); |
| 379 |
| 380 // Validate the content layer. |
| 381 EXPECT_EQ(9u, [[content_layer filters] count]); |
| 382 EXPECT_GT([content_layer shadowRadius], 0.0); |
| 383 EXPECT_LT([content_layer shadowRadius], 1.0); |
| 384 } |
| 385 |
| 386 // Remove every filter effect. |
| 387 { |
| 388 properties.filter_effects.clear(); |
| 389 UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); |
| 390 |
| 391 // Validate the content layer. |
| 392 EXPECT_EQ(0u, [[content_layer filters] count]); |
| 393 EXPECT_EQ(0.0, [content_layer shadowRadius]); |
| 394 } |
| 395 |
| 365 // Add the clipping and IOSurface contents back. | 396 // Add the clipping and IOSurface contents back. |
| 366 { | 397 { |
| 367 properties.is_clipped = true; | 398 properties.is_clipped = true; |
| 368 properties.gl_image = | 399 properties.gl_image = |
| 369 CreateGLImage(gfx::Size(256, 256), gfx::BufferFormat::BGRA_8888, false); | 400 CreateGLImage(gfx::Size(256, 256), gfx::BufferFormat::BGRA_8888, false); |
| 370 UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 401 UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); |
| 371 | 402 |
| 372 // Validate the tree structure. | 403 // Validate the tree structure. |
| 373 EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 404 EXPECT_EQ(1u, [[superlayer_ sublayers] count]); |
| 374 EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 405 EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 899 CALayer* content_layer = [[transform_layer sublayers] objectAtIndex:0]; | 930 CALayer* content_layer = [[transform_layer sublayers] objectAtIndex:0]; |
| 900 | 931 |
| 901 // Validate the content layer and fullscreen low power mode. | 932 // Validate the content layer and fullscreen low power mode. |
| 902 EXPECT_TRUE([content_layer | 933 EXPECT_TRUE([content_layer |
| 903 isKindOfClass:NSClassFromString(@"AVSampleBufferDisplayLayer")]); | 934 isKindOfClass:NSClassFromString(@"AVSampleBufferDisplayLayer")]); |
| 904 EXPECT_FALSE(fullscreen_low_power_valid); | 935 EXPECT_FALSE(fullscreen_low_power_valid); |
| 905 } | 936 } |
| 906 } | 937 } |
| 907 | 938 |
| 908 } // namespace gpu | 939 } // namespace gpu |
| OLD | NEW |