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

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

Issue 1482363004: Fixing laggy chrome on a multitude of accelerated canvases (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moving variables to ImageBuffer and Adding Unit Test Created 5 years 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 "config.h" 5 #include "config.h"
6 #include "modules/canvas2d/CanvasRenderingContext2D.h" 6 #include "modules/canvas2d/CanvasRenderingContext2D.h"
7 7
8 #include "core/fetch/MemoryCache.h" 8 #include "core/fetch/MemoryCache.h"
9 #include "core/frame/FrameView.h" 9 #include "core/frame/FrameView.h"
10 #include "core/frame/ImageBitmap.h" 10 #include "core/frame/ImageBitmap.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 class CanvasRenderingContext2DTest : public ::testing::Test { 73 class CanvasRenderingContext2DTest : public ::testing::Test {
74 protected: 74 protected:
75 CanvasRenderingContext2DTest(); 75 CanvasRenderingContext2DTest();
76 void SetUp() override; 76 void SetUp() override;
77 77
78 DummyPageHolder& page() const { return *m_dummyPageHolder; } 78 DummyPageHolder& page() const { return *m_dummyPageHolder; }
79 HTMLDocument& document() const { return *m_document; } 79 HTMLDocument& document() const { return *m_document; }
80 HTMLCanvasElement& canvasElement() const { return *m_canvasElement; } 80 HTMLCanvasElement& canvasElement() const { return *m_canvasElement; }
81 CanvasRenderingContext2D* context2d() const { return static_cast<CanvasRende ringContext2D*>(canvasElement().renderingContext()); } 81 CanvasRenderingContext2D* context2d() const { return static_cast<CanvasRende ringContext2D*>(canvasElement().renderingContext()); }
82 intptr_t getTotalGPUMemoryUsage() const { return ImageBuffer::getTotalGPUMem oryUsage(); }
83 intptr_t getCurrGPUMemoryUsage() const { return canvasElement().buffer()->ge tGPUMemoryUsage(); }
Justin Novosad 2015/12/08 22:15:27 Curr -> Current
82 84
83 void createContext(OpacityMode); 85 void createContext(OpacityMode);
84 void TearDown(); 86 void TearDown();
85 87
86 private: 88 private:
87 OwnPtr<DummyPageHolder> m_dummyPageHolder; 89 OwnPtr<DummyPageHolder> m_dummyPageHolder;
88 RefPtrWillBePersistent<HTMLDocument> m_document; 90 RefPtrWillBePersistent<HTMLDocument> m_document;
89 RefPtrWillBePersistent<HTMLCanvasElement> m_canvasElement; 91 RefPtrWillBePersistent<HTMLCanvasElement> m_canvasElement;
90 Persistent<MemoryCache> m_globalMemoryCache; 92 Persistent<MemoryCache> m_globalMemoryCache;
91 93
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 } 169 }
168 170
169 void CanvasRenderingContext2DTest::TearDown() 171 void CanvasRenderingContext2DTest::TearDown()
170 { 172 {
171 Heap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, B linkGC::ForcedGC); 173 Heap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, B linkGC::ForcedGC);
172 replaceMemoryCacheForTesting(m_globalMemoryCache.release()); 174 replaceMemoryCacheForTesting(m_globalMemoryCache.release());
173 } 175 }
174 176
175 //============================================================================ 177 //============================================================================
176 178
179 class FakeAcceleratedImageBufferSurfaceForOverwriteTesting : public Unaccelerate dImageBufferSurface {
Justin Novosad 2015/12/08 22:15:27 Bad name, this is not for overwrite testing
180 public:
181 FakeAcceleratedImageBufferSurfaceForOverwriteTesting(const IntSize& size, Op acityMode mode) : UnacceleratedImageBufferSurface(size, mode) { }
182 ~FakeAcceleratedImageBufferSurfaceForOverwriteTesting() override { }
183 bool isAccelerated() const override { return true; }
Justin Novosad 2015/12/08 22:15:27 you need a "setIsAccelerated" to go with this in o
184
185 MOCK_METHOD0(willOverwriteCanvas, void());
Justin Novosad 2015/12/08 22:15:27 this is not needed.
186 };
187
188 //============================================================================
189
177 class MockImageBufferSurfaceForOverwriteTesting : public UnacceleratedImageBuffe rSurface { 190 class MockImageBufferSurfaceForOverwriteTesting : public UnacceleratedImageBuffe rSurface {
178 public: 191 public:
179 MockImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode m ode) : UnacceleratedImageBufferSurface(size, mode) { } 192 MockImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode m ode) : UnacceleratedImageBufferSurface(size, mode) { }
180 ~MockImageBufferSurfaceForOverwriteTesting() override { } 193 ~MockImageBufferSurfaceForOverwriteTesting() override { }
181 bool isRecording() const override { return true; } // otherwise overwrites a re not tracked 194 bool isRecording() const override { return true; } // otherwise overwrites a re not tracked
182 195
183 MOCK_METHOD0(willOverwriteCanvas, void()); 196 MOCK_METHOD0(willOverwriteCanvas, void());
184 }; 197 };
185 198
186 //============================================================================ 199 //============================================================================
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), In tRect(0, 0, 20, 20)); 635 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), In tRect(0, 0, 20, 20));
623 } 636 }
624 CanvasContextCreationAttributes attributes; 637 CanvasContextCreationAttributes attributes;
625 CanvasRenderingContext2D* context = static_cast<CanvasRenderingContext2D*>(c anvasElement->getCanvasRenderingContext("2d", attributes)); 638 CanvasRenderingContext2D* context = static_cast<CanvasRenderingContext2D*>(c anvasElement->getCanvasRenderingContext("2d", attributes));
626 TrackExceptionState exceptionState; 639 TrackExceptionState exceptionState;
627 CanvasImageSourceUnion imageSource; 640 CanvasImageSourceUnion imageSource;
628 imageSource.setImageBitmap(imageBitmapDerived); 641 imageSource.setImageBitmap(imageBitmapDerived);
629 context->drawImage(imageSource, 0, 0, exceptionState); 642 context->drawImage(imageSource, 0, 0, exceptionState);
630 } 643 }
631 644
645 TEST_F(CanvasRenderingContext2DTest, GPUMemoryUpdateForAcceleratedCanvas)
646 {
647 createContext(NonOpaque);
648
649 OwnPtr<FakeAcceleratedImageBufferSurfaceForOverwriteTesting> fakeAccelerateS urface = adoptPtr(new FakeAcceleratedImageBufferSurfaceForOverwriteTesting(IntSi ze(10, 10), NonOpaque));
650 FakeAcceleratedImageBufferSurfaceForOverwriteTesting* fakeAccelerateSurfaceP tr = fakeAccelerateSurface.get();
651 canvasElement().createImageBufferUsingSurfaceForTesting(fakeAccelerateSurfac e.release());
652
653 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per p ixel per buffer,
654 // and 2 is an estimate of num of gpu buffers required
655 EXPECT_EQ(800, getCurrGPUMemoryUsage());
656 EXPECT_EQ(800, getTotalGPUMemoryUsage());
657
658 OwnPtr<FakeAcceleratedImageBufferSurfaceForOverwriteTesting> fakeAccelerateS urface2 = adoptPtr(new FakeAcceleratedImageBufferSurfaceForOverwriteTesting(IntS ize(10, 5), NonOpaque));
659 OwnPtr<ImageBuffer> imageBuffer = ImageBuffer::create(fakeAccelerateSurface2 .release());
660
661 EXPECT_EQ(800, getCurrGPUMemoryUsage());
662 EXPECT_EQ(1200, getTotalGPUMemoryUsage());
663
664 canvasElement().setSize(IntSize(20, 20));
665 Mock::VerifyAndClearExpectations(fakeAccelerateSurfacePtr);
666
667 EXPECT_EQ(400, getTotalGPUMemoryUsage());
668
669 imageBuffer.clear();
670
671 EXPECT_EQ(0, getTotalGPUMemoryUsage());
672 }
673
632 } // namespace blink 674 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698