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

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

Issue 1805343004: (Only) poison unmarked heap objects prior to sweeping. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove dated assert Created 4 years, 9 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 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 // The following methods are not performance-sensitive. 371 // The following methods are not performance-sensitive.
372 virtual size_t objectPayloadSizeForTesting() = 0; 372 virtual size_t objectPayloadSizeForTesting() = 0;
373 virtual bool isEmpty() = 0; 373 virtual bool isEmpty() = 0;
374 virtual void removeFromHeap() = 0; 374 virtual void removeFromHeap() = 0;
375 virtual void sweep() = 0; 375 virtual void sweep() = 0;
376 virtual void makeConsistentForGC() = 0; 376 virtual void makeConsistentForGC() = 0;
377 virtual void makeConsistentForMutator() = 0; 377 virtual void makeConsistentForMutator() = 0;
378 virtual void invalidateObjectStartBitmap() = 0; 378 virtual void invalidateObjectStartBitmap() = 0;
379 379
380 #if defined(ADDRESS_SANITIZER) 380 #if defined(ADDRESS_SANITIZER)
381 virtual void poisonObjects(BlinkGC::ObjectsToPoison, BlinkGC::Poisoning) = 0 ; 381 virtual void poisonUnmarkedObjects() = 0;
382 #endif 382 #endif
383 // Check if the given address points to an object in this 383 // Check if the given address points to an object in this
384 // heap page. If so, find the start of that object and mark it 384 // heap page. If so, find the start of that object and mark it
385 // using the given Visitor. Otherwise do nothing. The pointer must 385 // using the given Visitor. Otherwise do nothing. The pointer must
386 // be within the same aligned blinkPageSize as the this-pointer. 386 // be within the same aligned blinkPageSize as the this-pointer.
387 // 387 //
388 // This is used during conservative stack scanning to 388 // This is used during conservative stack scanning to
389 // conservatively mark all objects that could be referenced from 389 // conservatively mark all objects that could be referenced from
390 // the stack. 390 // the stack.
391 virtual void checkAndMarkPointer(Visitor*, Address) = 0; 391 virtual void checkAndMarkPointer(Visitor*, Address) = 0;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 } 462 }
463 463
464 size_t objectPayloadSizeForTesting() override; 464 size_t objectPayloadSizeForTesting() override;
465 bool isEmpty() override; 465 bool isEmpty() override;
466 void removeFromHeap() override; 466 void removeFromHeap() override;
467 void sweep() override; 467 void sweep() override;
468 void makeConsistentForGC() override; 468 void makeConsistentForGC() override;
469 void makeConsistentForMutator() override; 469 void makeConsistentForMutator() override;
470 void invalidateObjectStartBitmap() override { m_objectStartBitMapComputed = false; } 470 void invalidateObjectStartBitmap() override { m_objectStartBitMapComputed = false; }
471 #if defined(ADDRESS_SANITIZER) 471 #if defined(ADDRESS_SANITIZER)
472 void poisonObjects(BlinkGC::ObjectsToPoison, BlinkGC::Poisoning) override; 472 void poisonUnmarkedObjects() override;
473 #endif 473 #endif
474 void checkAndMarkPointer(Visitor*, Address) override; 474 void checkAndMarkPointer(Visitor*, Address) override;
475 void markOrphaned() override; 475 void markOrphaned() override;
476 476
477 void takeSnapshot(WebMemoryAllocatorDump*, ThreadState::GCSnapshotInfo&, Hea pSnapshotInfo&) override; 477 void takeSnapshot(WebMemoryAllocatorDump*, ThreadState::GCSnapshotInfo&, Hea pSnapshotInfo&) override;
478 #if ENABLE(ASSERT) 478 #if ENABLE(ASSERT)
479 // Returns true for the whole blinkPageSize page that the page is on, even 479 // Returns true for the whole blinkPageSize page that the page is on, even
480 // for the header, and the unmapped guard page at the start. That ensures 480 // for the header, and the unmapped guard page at the start. That ensures
481 // the result can be used to populate the negative page cache. 481 // the result can be used to populate the negative page cache.
482 bool contains(Address) override; 482 bool contains(Address) override;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 } 519 }
520 520
521 size_t objectPayloadSizeForTesting() override; 521 size_t objectPayloadSizeForTesting() override;
522 bool isEmpty() override; 522 bool isEmpty() override;
523 void removeFromHeap() override; 523 void removeFromHeap() override;
524 void sweep() override; 524 void sweep() override;
525 void makeConsistentForGC() override; 525 void makeConsistentForGC() override;
526 void makeConsistentForMutator() override; 526 void makeConsistentForMutator() override;
527 void invalidateObjectStartBitmap() override { } 527 void invalidateObjectStartBitmap() override { }
528 #if defined(ADDRESS_SANITIZER) 528 #if defined(ADDRESS_SANITIZER)
529 void poisonObjects(BlinkGC::ObjectsToPoison, BlinkGC::Poisoning) override; 529 void poisonUnmarkedObjects() override;
530 #endif 530 #endif
531 void checkAndMarkPointer(Visitor*, Address) override; 531 void checkAndMarkPointer(Visitor*, Address) override;
532 void markOrphaned() override; 532 void markOrphaned() override;
533 533
534 void takeSnapshot(WebMemoryAllocatorDump*, ThreadState::GCSnapshotInfo&, Hea pSnapshotInfo&) override; 534 void takeSnapshot(WebMemoryAllocatorDump*, ThreadState::GCSnapshotInfo&, Hea pSnapshotInfo&) override;
535 #if ENABLE(ASSERT) 535 #if ENABLE(ASSERT)
536 // Returns true for any address that is on one of the pages that this 536 // Returns true for any address that is on one of the pages that this
537 // large object uses. That ensures that we can use a negative result to 537 // large object uses. That ensures that we can use a negative result to
538 // populate the negative page cache. 538 // populate the negative page cache.
539 bool contains(Address) override; 539 bool contains(Address) override;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 virtual void clearFreeLists() { } 671 virtual void clearFreeLists() { }
672 void makeConsistentForGC(); 672 void makeConsistentForGC();
673 void makeConsistentForMutator(); 673 void makeConsistentForMutator();
674 #if ENABLE(ASSERT) 674 #if ENABLE(ASSERT)
675 virtual bool isConsistentForGC() = 0; 675 virtual bool isConsistentForGC() = 0;
676 #endif 676 #endif
677 size_t objectPayloadSizeForTesting(); 677 size_t objectPayloadSizeForTesting();
678 void prepareHeapForTermination(); 678 void prepareHeapForTermination();
679 void prepareForSweep(); 679 void prepareForSweep();
680 #if defined(ADDRESS_SANITIZER) 680 #if defined(ADDRESS_SANITIZER)
681 void poisonArena(BlinkGC::ObjectsToPoison, BlinkGC::Poisoning); 681 void poisonArena();
682 #endif 682 #endif
683 Address lazySweep(size_t, size_t gcInfoIndex); 683 Address lazySweep(size_t, size_t gcInfoIndex);
684 void sweepUnsweptPage(); 684 void sweepUnsweptPage();
685 // Returns true if we have swept all pages within the deadline. 685 // Returns true if we have swept all pages within the deadline.
686 // Returns false otherwise. 686 // Returns false otherwise.
687 bool lazySweepWithDeadline(double deadlineSeconds); 687 bool lazySweepWithDeadline(double deadlineSeconds);
688 void completeSweep(); 688 void completeSweep();
689 689
690 ThreadState* getThreadState() { return m_threadState; } 690 ThreadState* getThreadState() { return m_threadState; }
691 int arenaIndex() const { return m_index; } 691 int arenaIndex() const { return m_index; }
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 SET_MEMORY_ACCESSIBLE(result, allocationSize - sizeof(HeapObjectHeader)) ; 886 SET_MEMORY_ACCESSIBLE(result, allocationSize - sizeof(HeapObjectHeader)) ;
887 ASSERT(findPageFromAddress(headerAddress + allocationSize - 1)); 887 ASSERT(findPageFromAddress(headerAddress + allocationSize - 1));
888 return result; 888 return result;
889 } 889 }
890 return outOfLineAllocate(allocationSize, gcInfoIndex); 890 return outOfLineAllocate(allocationSize, gcInfoIndex);
891 } 891 }
892 892
893 } // namespace blink 893 } // namespace blink
894 894
895 #endif // HeapPage_h 895 #endif // HeapPage_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/BlinkGC.h ('k') | third_party/WebKit/Source/platform/heap/HeapPage.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698