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

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp

Issue 2849463005: Refactor ImageBuffer to make OffscreenCanvas match HTMLCanvasElement (Closed)
Patch Set: x 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 unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698