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

Side by Side Diff: third_party/WebKit/Source/platform/heap/HeapPage.cpp

Issue 2130683002: [Experiment] purge-and-suspend Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 1183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 header->finalize(payload, payloadSize); 1194 header->finalize(payload, payloadSize);
1195 // This memory will be added to the freelist. Maintain the invariant 1195 // This memory will be added to the freelist. Maintain the invariant
1196 // that memory on the freelist is zero filled. 1196 // that memory on the freelist is zero filled.
1197 SET_MEMORY_INACCESSIBLE(headerAddress, size); 1197 SET_MEMORY_INACCESSIBLE(headerAddress, size);
1198 headerAddress += size; 1198 headerAddress += size;
1199 continue; 1199 continue;
1200 } 1200 }
1201 if (startOfGap != headerAddress) { 1201 if (startOfGap != headerAddress) {
1202 pageArena->addToFreeList(startOfGap, headerAddress - startOfGap); 1202 pageArena->addToFreeList(startOfGap, headerAddress - startOfGap);
1203 #if !ENABLE(ASSERT) && !defined(LEAK_SANITIZER) && !defined(ADDRESS_SANITIZER) 1203 #if !ENABLE(ASSERT) && !defined(LEAK_SANITIZER) && !defined(ADDRESS_SANITIZER)
1204 // Discarding pages increases page faults and may regress performanc e. 1204 discardPages(startOfGap + sizeof(FreeListEntry), headerAddress);
sof 2016/07/07 09:35:19 Why drop the check for low-end devices?
tasak 2016/07/08 03:56:45 To reduce resident_set_bytes, pss, or private_dirt
sof 2016/07/08 07:14:29 That would be better; what's here now will serious
tasak 2016/07/19 08:22:51 I think, I need, Oilpan::discardUnusedPages or som
haraken 2016/07/19 20:20:22 This makes sense. Currently discardPages() is cal
1205 // So we enable this only on low-RAM devices.
1206 if (ProcessHeap::isLowEndDevice())
1207 discardPages(startOfGap + sizeof(FreeListEntry), headerAddress);
1208 #endif 1205 #endif
1209 } 1206 }
1210 header->unmark(); 1207 header->unmark();
1211 headerAddress += size; 1208 headerAddress += size;
1212 markedObjectSize += size; 1209 markedObjectSize += size;
1213 startOfGap = headerAddress; 1210 startOfGap = headerAddress;
1214 } 1211 }
1215 if (startOfGap != payloadEnd()) { 1212 if (startOfGap != payloadEnd()) {
1216 pageArena->addToFreeList(startOfGap, payloadEnd() - startOfGap); 1213 pageArena->addToFreeList(startOfGap, payloadEnd() - startOfGap);
1217 #if !ENABLE(ASSERT) && !defined(LEAK_SANITIZER) && !defined(ADDRESS_SANITIZER) 1214 #if !ENABLE(ASSERT) && !defined(LEAK_SANITIZER) && !defined(ADDRESS_SANITIZER)
1218 if (ProcessHeap::isLowEndDevice()) 1215 discardPages(startOfGap + sizeof(FreeListEntry), payloadEnd());
1219 discardPages(startOfGap + sizeof(FreeListEntry), payloadEnd());
1220 #endif 1216 #endif
1221 } 1217 }
1222 1218
1223 if (markedObjectSize) 1219 if (markedObjectSize)
1224 pageArena->getThreadState()->increaseMarkedObjectSize(markedObjectSize); 1220 pageArena->getThreadState()->increaseMarkedObjectSize(markedObjectSize);
1225 } 1221 }
1226 1222
1227 void NormalPage::makeConsistentForGC() 1223 void NormalPage::makeConsistentForGC()
1228 { 1224 {
1229 size_t markedObjectSize = 0; 1225 size_t markedObjectSize = 0;
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 1612
1617 m_hasEntries = true; 1613 m_hasEntries = true;
1618 size_t index = hash(address); 1614 size_t index = hash(address);
1619 ASSERT(!(index & 1)); 1615 ASSERT(!(index & 1));
1620 Address cachePage = roundToBlinkPageStart(address); 1616 Address cachePage = roundToBlinkPageStart(address);
1621 m_entries[index + 1] = m_entries[index]; 1617 m_entries[index + 1] = m_entries[index];
1622 m_entries[index] = cachePage; 1618 m_entries[index] = cachePage;
1623 } 1619 }
1624 1620
1625 } // namespace blink 1621 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698