| 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 |