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

Side by Side Diff: Source/platform/graphics/ListContainerTest.cpp

Issue 1193433004: Blink-side contiguous allocation of display items. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add ListContainer::AllocateAndConstructWithArguments and a TODO in DisplayItemList::findMatchingIte… Created 5 years, 5 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "platform/graphics/ListContainer.h" 6 #include "platform/graphics/ListContainer.h"
7 7
8 #include "wtf/OwnPtr.h" 8 #include "wtf/OwnPtr.h"
9 #include "wtf/PassOwnPtr.h" 9 #include "wtf/PassOwnPtr.h"
10 #include "wtf/RefPtr.h" 10 #include "wtf/RefPtr.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 SimpleDerivedElementConstructMagicNumberTwo* derivedElement2 = list.allocate AndConstruct<SimpleDerivedElementConstructMagicNumberTwo>(); 146 SimpleDerivedElementConstructMagicNumberTwo* derivedElement2 = list.allocate AndConstruct<SimpleDerivedElementConstructMagicNumberTwo>();
147 147
148 EXPECT_EQ(size, list.size()); 148 EXPECT_EQ(size, list.size());
149 EXPECT_EQ(derivedElement1, list.front()); 149 EXPECT_EQ(derivedElement1, list.front());
150 EXPECT_EQ(derivedElement2, list.back()); 150 EXPECT_EQ(derivedElement2, list.back());
151 151
152 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, derivedElement1->getV alue()); 152 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, derivedElement1->getV alue());
153 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, derivedElement2->getV alue()); 153 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, derivedElement2->getV alue());
154 } 154 }
155 155
156 TEST(ListContainerTest, AllocateAndConstructWithArguments)
157 {
158 // Create a new OwnPtr<SimpleDerivedElement> by passing in a new SimpleDeriv edElement.
159 ListContainer<OwnPtr<SimpleDerivedElement>> list1(kCurrentLargestDerivedElem entSize);
160 auto* sdeOwnPtr1 = list1.allocateAndConstruct<OwnPtr<SimpleDerivedElement>>( adoptPtr(new SimpleDerivedElementConstructMagicNumberOne()));
161 EXPECT_EQ(1u, list1.size());
162 EXPECT_EQ(sdeOwnPtr1, list1.back());
163 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, (*sdeOwnPtr1)->getVal ue());
164 (*sdeOwnPtr1)->setValue(kMagicNumberToUseForSimpleDerivedElementTwo);
165
166 // Transfer an OwnPtr<SimpleDerivedElement> to another list.
167 ListContainer<OwnPtr<SimpleDerivedElement>> list2(kCurrentLargestDerivedElem entSize);
168 auto* sdeOwnPtr2 = list2.allocateAndConstruct<OwnPtr<SimpleDerivedElement>>( sdeOwnPtr1->release());
169 EXPECT_EQ(1u, list2.size());
170 EXPECT_EQ(sdeOwnPtr2, list2.back());
171 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, (*sdeOwnPtr2)->getVal ue());
172
173 // Verify the first OwnPtr is null after moving.
174 EXPECT_EQ(nullptr, list1.back()->get());
175 }
176
156 TEST(ListContainerTest, DestructorCalled) 177 TEST(ListContainerTest, DestructorCalled)
157 { 178 {
158 ListContainer<DerivedElement> list(kCurrentLargestDerivedElementSize); 179 ListContainer<DerivedElement> list(kCurrentLargestDerivedElementSize);
159 180
160 size_t size = 1; 181 size_t size = 1;
161 MockDerivedElement* derivedElement1 = list.allocateAndConstruct<MockDerivedE lement>(); 182 MockDerivedElement* derivedElement1 = list.allocateAndConstruct<MockDerivedE lement>();
162 183
163 EXPECT_CALL(*derivedElement1, Destruct()); 184 EXPECT_CALL(*derivedElement1, Destruct());
164 EXPECT_EQ(size, list.size()); 185 EXPECT_EQ(size, list.size());
165 EXPECT_EQ(derivedElement1, list.front()); 186 EXPECT_EQ(derivedElement1, list.front());
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 MockDerivedElement* mde1 = list1.allocateAndConstruct<MockDerivedElement>(); 867 MockDerivedElement* mde1 = list1.allocateAndConstruct<MockDerivedElement>();
847 868
848 // Make sure destructor isn't called during AppendByMoving. 869 // Make sure destructor isn't called during AppendByMoving.
849 list2.appendByMoving(mde1); 870 list2.appendByMoving(mde1);
850 EXPECT_CALL(*mde1, Destruct()).Times(0); 871 EXPECT_CALL(*mde1, Destruct()).Times(0);
851 testing::Mock::VerifyAndClearExpectations(mde1); 872 testing::Mock::VerifyAndClearExpectations(mde1);
852 mde1 = static_cast<MockDerivedElement*>(list2.back()); 873 mde1 = static_cast<MockDerivedElement*>(list2.back());
853 EXPECT_CALL(*mde1, Destruct()); 874 EXPECT_CALL(*mde1, Destruct());
854 } 875 }
855 876
877 TEST(ListContainerTest, AppendByMovingReturnsMovedPointer)
878 {
879 ListContainer<SimpleDerivedElement> list1(kCurrentLargestDerivedElementSize) ;
880 ListContainer<SimpleDerivedElement> list2(kCurrentLargestDerivedElementSize) ;
881 SimpleDerivedElement* simpleElement = list1.allocateAndConstruct<SimpleDeriv edElement>();
882
883 SimpleDerivedElement* movedElement1 = list2.appendByMoving(simpleElement);
884 EXPECT_EQ(list2.back(), movedElement1);
885
886 SimpleDerivedElement* movedElement2 = list1.appendByMoving(movedElement1);
887 EXPECT_EQ(list1.back(), movedElement2);
888 EXPECT_NE(movedElement1, movedElement2);
889 }
890
856 TEST(ListContainerTest, AppendByMovingReplacesSourceWithNewDerivedElement) 891 TEST(ListContainerTest, AppendByMovingReplacesSourceWithNewDerivedElement)
857 { 892 {
858 ListContainer<SimpleDerivedElementConstructMagicNumberOne> list1(kCurrentLar gestDerivedElementSize); 893 ListContainer<SimpleDerivedElementConstructMagicNumberOne> list1(kCurrentLar gestDerivedElementSize);
859 ListContainer<SimpleDerivedElementConstructMagicNumberTwo> list2(kCurrentLar gestDerivedElementSize); 894 ListContainer<SimpleDerivedElementConstructMagicNumberTwo> list2(kCurrentLar gestDerivedElementSize);
860 895
861 list1.allocateAndConstruct<SimpleDerivedElementConstructMagicNumberOne>(); 896 list1.allocateAndConstruct<SimpleDerivedElementConstructMagicNumberOne>();
862 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, 897 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne,
863 list1.front()->getValue()); 898 list1.front()->getValue());
864 899
865 list2.appendByMoving(list1.front()); 900 list2.appendByMoving(list1.front());
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 EXPECT_EQ(2u, list1.size()); 1005 EXPECT_EQ(2u, list1.size());
971 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, list2.front()->getVal ue()); 1006 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, list2.front()->getVal ue());
972 EXPECT_EQ(1u, list2.size()); 1007 EXPECT_EQ(1u, list2.size());
973 1008
974 // Ensure pointers are still valid after swapping. 1009 // Ensure pointers are still valid after swapping.
975 EXPECT_EQ(preSwapList1Front, list2.front()); 1010 EXPECT_EQ(preSwapList1Front, list2.front());
976 } 1011 }
977 1012
978 } // namespace 1013 } // namespace
979 } // namespace blink 1014 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/graphics/ListContainer.h ('k') | Source/platform/graphics/paint/CachedDisplayItem.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698