OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "modules/canvas2d/CanvasRenderingContext2D.h" | 5 #include "modules/canvas2d/CanvasRenderingContext2D.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include "bindings/core/v8/V8BindingForCore.h" | 8 #include "bindings/core/v8/V8BindingForCore.h" |
9 #include "bindings/core/v8/V8BindingForTesting.h" | 9 #include "bindings/core/v8/V8BindingForTesting.h" |
10 #include "core/dom/Document.h" | 10 #include "core/dom/Document.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 | 54 |
55 enum BitmapOpacity { kOpaqueBitmap, kTransparentBitmap }; | 55 enum BitmapOpacity { kOpaqueBitmap, kTransparentBitmap }; |
56 | 56 |
57 class FakeImageSource : public CanvasImageSource { | 57 class FakeImageSource : public CanvasImageSource { |
58 public: | 58 public: |
59 FakeImageSource(IntSize, BitmapOpacity); | 59 FakeImageSource(IntSize, BitmapOpacity); |
60 | 60 |
61 PassRefPtr<Image> GetSourceImageForCanvas(SourceImageStatus*, | 61 PassRefPtr<Image> GetSourceImageForCanvas(SourceImageStatus*, |
62 AccelerationHint, | 62 AccelerationHint, |
63 SnapshotReason, | 63 SnapshotReason, |
64 const FloatSize&) const override; | 64 const FloatSize&) override; |
65 | 65 |
66 bool WouldTaintOrigin( | 66 bool WouldTaintOrigin( |
67 SecurityOrigin* destination_security_origin) const override { | 67 SecurityOrigin* destination_security_origin) const override { |
68 return false; | 68 return false; |
69 } | 69 } |
70 FloatSize ElementSize(const FloatSize&) const override { | 70 FloatSize ElementSize(const FloatSize&) const override { |
71 return FloatSize(size_); | 71 return FloatSize(size_); |
72 } | 72 } |
73 bool IsOpaque() const override { return is_opaque_; } | 73 bool IsOpaque() const override { return is_opaque_; } |
74 bool IsAccelerated() const { return false; } | 74 bool IsAccelerated() const { return false; } |
(...skipping 14 matching lines...) Expand all Loading... |
89 SkSurface::MakeRasterN32Premul(size_.Width(), size_.Height())); | 89 SkSurface::MakeRasterN32Premul(size_.Width(), size_.Height())); |
90 surface->getCanvas()->clear(opacity == kOpaqueBitmap ? SK_ColorWHITE | 90 surface->getCanvas()->clear(opacity == kOpaqueBitmap ? SK_ColorWHITE |
91 : SK_ColorTRANSPARENT); | 91 : SK_ColorTRANSPARENT); |
92 image_ = StaticBitmapImage::Create(surface->makeImageSnapshot()); | 92 image_ = StaticBitmapImage::Create(surface->makeImageSnapshot()); |
93 } | 93 } |
94 | 94 |
95 PassRefPtr<Image> FakeImageSource::GetSourceImageForCanvas( | 95 PassRefPtr<Image> FakeImageSource::GetSourceImageForCanvas( |
96 SourceImageStatus* status, | 96 SourceImageStatus* status, |
97 AccelerationHint, | 97 AccelerationHint, |
98 SnapshotReason, | 98 SnapshotReason, |
99 const FloatSize&) const { | 99 const FloatSize&) { |
100 if (status) | 100 if (status) |
101 *status = kNormalSourceImageStatus; | 101 *status = kNormalSourceImageStatus; |
102 return image_; | 102 return image_; |
103 } | 103 } |
104 | 104 |
105 //============================================================================ | 105 //============================================================================ |
106 | 106 |
107 enum LinearPixelMathState { kLinearPixelMathDisabled, kLinearPixelMathEnabled }; | 107 enum LinearPixelMathState { kLinearPixelMathDisabled, kLinearPixelMathEnabled }; |
108 | 108 |
109 class CanvasRenderingContext2DTest : public ::testing::Test { | 109 class CanvasRenderingContext2DTest : public ::testing::Test { |
110 protected: | 110 protected: |
111 CanvasRenderingContext2DTest(); | 111 CanvasRenderingContext2DTest(); |
112 void SetUp() override; | 112 void SetUp() override; |
113 | 113 |
114 DummyPageHolder& Page() const { return *dummy_page_holder_; } | 114 DummyPageHolder& Page() const { return *dummy_page_holder_; } |
115 Document& GetDocument() const { return *document_; } | 115 Document& GetDocument() const { return *document_; } |
116 HTMLCanvasElement& CanvasElement() const { return *canvas_element_; } | 116 HTMLCanvasElement& CanvasElement() const { return *canvas_element_; } |
117 CanvasRenderingContext2D* Context2d() const { | 117 CanvasRenderingContext2D* Context2d() const { |
118 return static_cast<CanvasRenderingContext2D*>( | 118 return static_cast<CanvasRenderingContext2D*>( |
119 CanvasElement().RenderingContext()); | 119 CanvasElement().RenderingContext()); |
120 } | 120 } |
121 intptr_t GetGlobalGPUMemoryUsage() const { | 121 intptr_t GetGlobalGPUMemoryUsage() const { |
122 return ImageBuffer::GetGlobalGPUMemoryUsage(); | 122 return ImageBuffer::GetGlobalGPUMemoryUsage(); |
123 } | 123 } |
124 unsigned GetGlobalAcceleratedImageBufferCount() const { | 124 unsigned GetGlobalAcceleratedImageBufferCount() const { |
125 return ImageBuffer::GetGlobalAcceleratedImageBufferCount(); | 125 return ImageBuffer::GetGlobalAcceleratedImageBufferCount(); |
126 } | 126 } |
127 intptr_t GetCurrentGPUMemoryUsage() const { | 127 intptr_t GetCurrentGPUMemoryUsage() const { |
128 return CanvasElement().Buffer()->GetGPUMemoryUsage(); | 128 return CanvasElement().GetImageBuffer()->GetGPUMemoryUsage(); |
129 } | 129 } |
130 | 130 |
131 void CreateContext(OpacityMode, | 131 void CreateContext(OpacityMode, |
132 String color_space = String(), | 132 String color_space = String(), |
133 LinearPixelMathState = kLinearPixelMathDisabled); | 133 LinearPixelMathState = kLinearPixelMathDisabled); |
134 ScriptState* GetScriptState() { | 134 ScriptState* GetScriptState() { |
135 return ToScriptStateForMainWorld(canvas_element_->GetFrame()); | 135 return ToScriptStateForMainWorld(canvas_element_->GetFrame()); |
136 } | 136 } |
137 | 137 |
138 void TearDown(); | 138 void TearDown(); |
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 CanvasElement().CreateImageBufferUsingSurfaceForTesting( | 883 CanvasElement().CreateImageBufferUsingSurfaceForTesting( |
884 std::move(fake_accelerate_surface)); | 884 std::move(fake_accelerate_surface)); |
885 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per | 885 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per |
886 // pixel per buffer, and 2 is an estimate of num of gpu buffers required | 886 // pixel per buffer, and 2 is an estimate of num of gpu buffers required |
887 EXPECT_EQ(800, GetCurrentGPUMemoryUsage()); | 887 EXPECT_EQ(800, GetCurrentGPUMemoryUsage()); |
888 EXPECT_EQ(800, GetGlobalGPUMemoryUsage()); | 888 EXPECT_EQ(800, GetGlobalGPUMemoryUsage()); |
889 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 889 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
890 | 890 |
891 // Switching accelerated mode to non-accelerated mode | 891 // Switching accelerated mode to non-accelerated mode |
892 fake_accelerate_surface_ptr->SetIsAccelerated(false); | 892 fake_accelerate_surface_ptr->SetIsAccelerated(false); |
893 CanvasElement().Buffer()->UpdateGPUMemoryUsage(); | 893 CanvasElement().GetImageBuffer()->UpdateGPUMemoryUsage(); |
894 EXPECT_EQ(0, GetCurrentGPUMemoryUsage()); | 894 EXPECT_EQ(0, GetCurrentGPUMemoryUsage()); |
895 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); | 895 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); |
896 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); | 896 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); |
897 | 897 |
898 // Switching non-accelerated mode to accelerated mode | 898 // Switching non-accelerated mode to accelerated mode |
899 fake_accelerate_surface_ptr->SetIsAccelerated(true); | 899 fake_accelerate_surface_ptr->SetIsAccelerated(true); |
900 CanvasElement().Buffer()->UpdateGPUMemoryUsage(); | 900 CanvasElement().GetImageBuffer()->UpdateGPUMemoryUsage(); |
901 EXPECT_EQ(800, GetCurrentGPUMemoryUsage()); | 901 EXPECT_EQ(800, GetCurrentGPUMemoryUsage()); |
902 EXPECT_EQ(800, GetGlobalGPUMemoryUsage()); | 902 EXPECT_EQ(800, GetGlobalGPUMemoryUsage()); |
903 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 903 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
904 | 904 |
905 // Creating a different accelerated image buffer | 905 // Creating a different accelerated image buffer |
906 auto fake_accelerate_surface2 = | 906 auto fake_accelerate_surface2 = |
907 WTF::MakeUnique<FakeAcceleratedImageBufferSurface>(IntSize(10, 5), | 907 WTF::MakeUnique<FakeAcceleratedImageBufferSurface>(IntSize(10, 5), |
908 kNonOpaque); | 908 kNonOpaque); |
909 std::unique_ptr<ImageBuffer> image_buffer2 = | 909 std::unique_ptr<ImageBuffer> image_buffer2 = |
910 ImageBuffer::Create(std::move(fake_accelerate_surface2)); | 910 ImageBuffer::Create(std::move(fake_accelerate_surface2)); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
954 std::unique_ptr<FakeWebGraphicsContext3DProvider> context_provider( | 954 std::unique_ptr<FakeWebGraphicsContext3DProvider> context_provider( |
955 new FakeWebGraphicsContext3DProvider(&gl)); | 955 new FakeWebGraphicsContext3DProvider(&gl)); |
956 IntSize size(300, 300); | 956 IntSize size(300, 300); |
957 RefPtr<Canvas2DLayerBridge> bridge = | 957 RefPtr<Canvas2DLayerBridge> bridge = |
958 MakeBridge(std::move(context_provider), size, | 958 MakeBridge(std::move(context_provider), size, |
959 Canvas2DLayerBridge::kEnableAcceleration); | 959 Canvas2DLayerBridge::kEnableAcceleration); |
960 std::unique_ptr<Canvas2DImageBufferSurface> surface( | 960 std::unique_ptr<Canvas2DImageBufferSurface> surface( |
961 new Canvas2DImageBufferSurface(bridge, size)); | 961 new Canvas2DImageBufferSurface(bridge, size)); |
962 CanvasElement().CreateImageBufferUsingSurfaceForTesting(std::move(surface)); | 962 CanvasElement().CreateImageBufferUsingSurfaceForTesting(std::move(surface)); |
963 | 963 |
964 EXPECT_TRUE(CanvasElement().Buffer()->IsAccelerated()); | 964 EXPECT_TRUE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
965 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 965 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
966 EXPECT_EQ(720000, GetGlobalGPUMemoryUsage()); | 966 EXPECT_EQ(720000, GetGlobalGPUMemoryUsage()); |
967 | 967 |
968 DummyExceptionStateForTesting exception_state; | 968 DummyExceptionStateForTesting exception_state; |
969 for (int i = 0; | 969 for (int i = 0; |
970 i < | 970 i < |
971 ExpensiveCanvasHeuristicParameters::kGPUReadbackMinSuccessiveFrames - 1; | 971 ExpensiveCanvasHeuristicParameters::kGPUReadbackMinSuccessiveFrames - 1; |
972 i++) { | 972 i++) { |
973 Context2d()->getImageData(0, 0, 1, 1, exception_state); | 973 Context2d()->getImageData(0, 0, 1, 1, exception_state); |
974 CanvasElement().FinalizeFrame(); | 974 CanvasElement().FinalizeFrame(); |
975 | 975 |
976 EXPECT_FALSE(exception_state.HadException()); | 976 EXPECT_FALSE(exception_state.HadException()); |
977 EXPECT_TRUE(CanvasElement().Buffer()->IsAccelerated()); | 977 EXPECT_TRUE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
978 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 978 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
979 EXPECT_EQ(720000, GetGlobalGPUMemoryUsage()); | 979 EXPECT_EQ(720000, GetGlobalGPUMemoryUsage()); |
980 } | 980 } |
981 | 981 |
982 Context2d()->getImageData(0, 0, 1, 1, exception_state); | 982 Context2d()->getImageData(0, 0, 1, 1, exception_state); |
983 CanvasElement().FinalizeFrame(); | 983 CanvasElement().FinalizeFrame(); |
984 | 984 |
985 EXPECT_FALSE(exception_state.HadException()); | 985 EXPECT_FALSE(exception_state.HadException()); |
986 if (ExpensiveCanvasHeuristicParameters::kGPUReadbackForcesNoAcceleration) { | 986 if (ExpensiveCanvasHeuristicParameters::kGPUReadbackForcesNoAcceleration) { |
987 EXPECT_FALSE(CanvasElement().Buffer()->IsAccelerated()); | 987 EXPECT_FALSE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
988 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); | 988 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); |
989 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); | 989 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); |
990 } else { | 990 } else { |
991 EXPECT_TRUE(CanvasElement().Buffer()->IsAccelerated()); | 991 EXPECT_TRUE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
992 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 992 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
993 EXPECT_EQ(720000, GetGlobalGPUMemoryUsage()); | 993 EXPECT_EQ(720000, GetGlobalGPUMemoryUsage()); |
994 } | 994 } |
995 | 995 |
996 // Restore global state to prevent side-effects on other tests | 996 // Restore global state to prevent side-effects on other tests |
997 RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled( | 997 RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled( |
998 saved_fixed_rendering_mode); | 998 saved_fixed_rendering_mode); |
999 } | 999 } |
1000 | 1000 |
1001 TEST_F(CanvasRenderingContext2DTest, TextureUploadHeuristics) { | 1001 TEST_F(CanvasRenderingContext2DTest, TextureUploadHeuristics) { |
(...skipping 26 matching lines...) Expand all Loading... |
1028 std::unique_ptr<FakeWebGraphicsContext3DProvider> context_provider( | 1028 std::unique_ptr<FakeWebGraphicsContext3DProvider> context_provider( |
1029 new FakeWebGraphicsContext3DProvider(&gl)); | 1029 new FakeWebGraphicsContext3DProvider(&gl)); |
1030 IntSize size(dst_size, dst_size); | 1030 IntSize size(dst_size, dst_size); |
1031 RefPtr<Canvas2DLayerBridge> bridge = | 1031 RefPtr<Canvas2DLayerBridge> bridge = |
1032 MakeBridge(std::move(context_provider), size, | 1032 MakeBridge(std::move(context_provider), size, |
1033 Canvas2DLayerBridge::kEnableAcceleration); | 1033 Canvas2DLayerBridge::kEnableAcceleration); |
1034 std::unique_ptr<Canvas2DImageBufferSurface> surface( | 1034 std::unique_ptr<Canvas2DImageBufferSurface> surface( |
1035 new Canvas2DImageBufferSurface(bridge, size)); | 1035 new Canvas2DImageBufferSurface(bridge, size)); |
1036 CanvasElement().CreateImageBufferUsingSurfaceForTesting(std::move(surface)); | 1036 CanvasElement().CreateImageBufferUsingSurfaceForTesting(std::move(surface)); |
1037 | 1037 |
1038 EXPECT_TRUE(CanvasElement().Buffer()->IsAccelerated()); | 1038 EXPECT_TRUE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
1039 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 1039 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
1040 // 4 bytes per pixel * 2 buffers = 8 | 1040 // 4 bytes per pixel * 2 buffers = 8 |
1041 EXPECT_EQ(8 * dst_size * dst_size, GetGlobalGPUMemoryUsage()); | 1041 EXPECT_EQ(8 * dst_size * dst_size, GetGlobalGPUMemoryUsage()); |
1042 sk_sp<SkSurface> sk_surface = | 1042 sk_sp<SkSurface> sk_surface = |
1043 SkSurface::MakeRasterN32Premul(src_size, src_size); | 1043 SkSurface::MakeRasterN32Premul(src_size, src_size); |
1044 RefPtr<StaticBitmapImage> big_bitmap = | 1044 RefPtr<StaticBitmapImage> big_bitmap = |
1045 StaticBitmapImage::Create(sk_surface->makeImageSnapshot()); | 1045 StaticBitmapImage::Create(sk_surface->makeImageSnapshot()); |
1046 ImageBitmap* big_image = ImageBitmap::Create(std::move(big_bitmap)); | 1046 ImageBitmap* big_image = ImageBitmap::Create(std::move(big_bitmap)); |
1047 NonThrowableExceptionState exception_state; | 1047 NonThrowableExceptionState exception_state; |
1048 V8TestingScope scope; | 1048 V8TestingScope scope; |
1049 Context2d()->drawImage(scope.GetScriptState(), big_image, 0, 0, src_size, | 1049 Context2d()->drawImage(scope.GetScriptState(), big_image, 0, 0, src_size, |
1050 src_size, 0, 0, dst_size, dst_size, exception_state); | 1050 src_size, 0, 0, dst_size, dst_size, exception_state); |
1051 EXPECT_FALSE(exception_state.HadException()); | 1051 EXPECT_FALSE(exception_state.HadException()); |
1052 | 1052 |
1053 if (test_variant == kLargeTextureDisablesAcceleration) { | 1053 if (test_variant == kLargeTextureDisablesAcceleration) { |
1054 EXPECT_FALSE(CanvasElement().Buffer()->IsAccelerated()); | 1054 EXPECT_FALSE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
1055 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); | 1055 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); |
1056 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); | 1056 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); |
1057 } else { | 1057 } else { |
1058 EXPECT_TRUE(CanvasElement().Buffer()->IsAccelerated()); | 1058 EXPECT_TRUE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
1059 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 1059 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
1060 EXPECT_EQ(8 * dst_size * dst_size, GetGlobalGPUMemoryUsage()); | 1060 EXPECT_EQ(8 * dst_size * dst_size, GetGlobalGPUMemoryUsage()); |
1061 } | 1061 } |
1062 } | 1062 } |
1063 // Restore global state to prevent side-effects on other tests | 1063 // Restore global state to prevent side-effects on other tests |
1064 RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled( | 1064 RuntimeEnabledFeatures::setCanvas2dFixedRenderingModeEnabled( |
1065 saved_fixed_rendering_mode); | 1065 saved_fixed_rendering_mode); |
1066 } | 1066 } |
1067 | 1067 |
1068 TEST_F(CanvasRenderingContext2DTest, | 1068 TEST_F(CanvasRenderingContext2DTest, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 std::move(fake_accelerate_surface)); | 1110 std::move(fake_accelerate_surface)); |
1111 CanvasRenderingContext2D* context = Context2d(); | 1111 CanvasRenderingContext2D* context = Context2d(); |
1112 | 1112 |
1113 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per | 1113 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per |
1114 // pixel per buffer, and 2 is an estimate of num of gpu buffers required | 1114 // pixel per buffer, and 2 is an estimate of num of gpu buffers required |
1115 EXPECT_EQ(800, GetCurrentGPUMemoryUsage()); | 1115 EXPECT_EQ(800, GetCurrentGPUMemoryUsage()); |
1116 EXPECT_EQ(800, GetGlobalGPUMemoryUsage()); | 1116 EXPECT_EQ(800, GetGlobalGPUMemoryUsage()); |
1117 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); | 1117 EXPECT_EQ(1u, GetGlobalAcceleratedImageBufferCount()); |
1118 | 1118 |
1119 context->fillRect(10, 10, 100, 100); | 1119 context->fillRect(10, 10, 100, 100); |
1120 EXPECT_TRUE(CanvasElement().Buffer()->IsAccelerated()); | 1120 EXPECT_TRUE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
1121 | 1121 |
1122 CanvasElement().Buffer()->DisableAcceleration(); | 1122 CanvasElement().GetImageBuffer()->DisableAcceleration(); |
1123 EXPECT_FALSE(CanvasElement().Buffer()->IsAccelerated()); | 1123 EXPECT_FALSE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
1124 | 1124 |
1125 context->fillRect(10, 10, 100, 100); | 1125 context->fillRect(10, 10, 100, 100); |
1126 | 1126 |
1127 EXPECT_EQ(0, GetCurrentGPUMemoryUsage()); | 1127 EXPECT_EQ(0, GetCurrentGPUMemoryUsage()); |
1128 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); | 1128 EXPECT_EQ(0, GetGlobalGPUMemoryUsage()); |
1129 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); | 1129 EXPECT_EQ(0u, GetGlobalAcceleratedImageBufferCount()); |
1130 } | 1130 } |
1131 | 1131 |
1132 TEST_F(CanvasRenderingContext2DTest, | 1132 TEST_F(CanvasRenderingContext2DTest, |
1133 LegacyColorSpaceUsesGlobalTargetColorBehavior) { | 1133 LegacyColorSpaceUsesGlobalTargetColorBehavior) { |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1671 IntSize size(300, 300); | 1671 IntSize size(300, 300); |
1672 RefPtr<Canvas2DLayerBridge> bridge = | 1672 RefPtr<Canvas2DLayerBridge> bridge = |
1673 MakeBridge(std::move(context_provider), size, | 1673 MakeBridge(std::move(context_provider), size, |
1674 Canvas2DLayerBridge::kEnableAcceleration); | 1674 Canvas2DLayerBridge::kEnableAcceleration); |
1675 // Force hibernatation to occur in an immediate task. | 1675 // Force hibernatation to occur in an immediate task. |
1676 bridge->DontUseIdleSchedulingForTesting(); | 1676 bridge->DontUseIdleSchedulingForTesting(); |
1677 std::unique_ptr<Canvas2DImageBufferSurface> surface( | 1677 std::unique_ptr<Canvas2DImageBufferSurface> surface( |
1678 new Canvas2DImageBufferSurface(bridge, size)); | 1678 new Canvas2DImageBufferSurface(bridge, size)); |
1679 CanvasElement().CreateImageBufferUsingSurfaceForTesting(std::move(surface)); | 1679 CanvasElement().CreateImageBufferUsingSurfaceForTesting(std::move(surface)); |
1680 | 1680 |
1681 EXPECT_TRUE(CanvasElement().Buffer()->IsAccelerated()); | 1681 EXPECT_TRUE(CanvasElement().GetImageBuffer()->IsAccelerated()); |
1682 | 1682 |
1683 EXPECT_TRUE(CanvasElement().GetLayoutBoxModelObject()); | 1683 EXPECT_TRUE(CanvasElement().GetLayoutBoxModelObject()); |
1684 PaintLayer* layer = CanvasElement().GetLayoutBoxModelObject()->Layer(); | 1684 PaintLayer* layer = CanvasElement().GetLayoutBoxModelObject()->Layer(); |
1685 EXPECT_TRUE(layer); | 1685 EXPECT_TRUE(layer); |
1686 GetDocument().View()->UpdateAllLifecyclePhases(); | 1686 GetDocument().View()->UpdateAllLifecyclePhases(); |
1687 | 1687 |
1688 // Hide element to trigger hibernation (if enabled). | 1688 // Hide element to trigger hibernation (if enabled). |
1689 GetDocument().GetPage()->SetVisibilityState(kPageVisibilityStateHidden, | 1689 GetDocument().GetPage()->SetVisibilityState(kPageVisibilityStateHidden, |
1690 false); | 1690 false); |
1691 RunUntilIdle(); // Run hibernation task. | 1691 RunUntilIdle(); // Run hibernation task. |
1692 // If enabled, hibernation should cause compositing update. | 1692 // If enabled, hibernation should cause compositing update. |
1693 EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED, | 1693 EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED, |
1694 layer->NeedsCompositingInputsUpdate()); | 1694 layer->NeedsCompositingInputsUpdate()); |
1695 | 1695 |
1696 GetDocument().View()->UpdateAllLifecyclePhases(); | 1696 GetDocument().View()->UpdateAllLifecyclePhases(); |
1697 EXPECT_FALSE(layer->NeedsCompositingInputsUpdate()); | 1697 EXPECT_FALSE(layer->NeedsCompositingInputsUpdate()); |
1698 | 1698 |
1699 // Wake up again, which should request a compositing update synchronously. | 1699 // Wake up again, which should request a compositing update synchronously. |
1700 GetDocument().GetPage()->SetVisibilityState(kPageVisibilityStateVisible, | 1700 GetDocument().GetPage()->SetVisibilityState(kPageVisibilityStateVisible, |
1701 false); | 1701 false); |
1702 EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED, | 1702 EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED, |
1703 layer->NeedsCompositingInputsUpdate()); | 1703 layer->NeedsCompositingInputsUpdate()); |
1704 RunUntilIdle(); // Clear task queue. | 1704 RunUntilIdle(); // Clear task queue. |
1705 } | 1705 } |
1706 | 1706 |
1707 } // namespace blink | 1707 } // namespace blink |
OLD | NEW |