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

Side by Side Diff: Source/platform/heap/Heap.cpp

Issue 1046123002: Oilpan: Split completeSweep() in idle tasks into chunks (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « Source/platform/heap/Heap.h ('k') | Source/platform/heap/ThreadState.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 if (threadState()->isMainThread()) 602 if (threadState()->isMainThread())
603 ScriptForbiddenScope::enter(); 603 ScriptForbiddenScope::enter();
604 604
605 Address result = lazySweepPages(allocationSize, gcInfoIndex); 605 Address result = lazySweepPages(allocationSize, gcInfoIndex);
606 606
607 if (threadState()->isMainThread()) 607 if (threadState()->isMainThread())
608 ScriptForbiddenScope::exit(); 608 ScriptForbiddenScope::exit();
609 return result; 609 return result;
610 } 610 }
611 611
612 void BaseHeap::sweepUnsweptPage()
613 {
614 BasePage* page = m_firstUnsweptPage;
615 if (page->isEmpty()) {
616 page->unlink(&m_firstUnsweptPage);
617 page->removeFromHeap();
618 } else {
619 // Sweep a page and move the page from m_firstUnsweptPages to
620 // m_firstPages.
621 page->sweep();
622 page->unlink(&m_firstUnsweptPage);
623 page->link(&m_firstPage);
624 page->markAsSwept();
625 }
626 }
627
628 bool BaseHeap::lazySweepWithDeadline(double deadlineSeconds)
629 {
630 RELEASE_ASSERT(threadState()->isSweepingInProgress());
631 ASSERT(threadState()->sweepForbidden());
632
633 int pageCount = 1;
634 while (m_firstUnsweptPage) {
635 sweepUnsweptPage();
636 // Check the deadline every time we sweep 10 page.
637 if (pageCount % 10 == 0) {
kouhei (in TOK) 2015/03/31 11:42:07 Why 10?
haraken 2015/03/31 12:46:58 I thought it might be heavy to call Platform::curr
Sami 2015/03/31 12:52:00 Might want to make this a named constant too. Also
rmcilroy 2015/03/31 13:01:30 +1
haraken 2015/03/31 13:07:45 Will fix.
638 if (deadlineSeconds <= Platform::current()->monotonicallyIncreasingT ime()) {
639 return false;
640 }
641 }
642 pageCount++;
643 }
644 return true;
645 }
646
612 void BaseHeap::completeSweep() 647 void BaseHeap::completeSweep()
613 { 648 {
614 RELEASE_ASSERT(threadState()->isSweepingInProgress()); 649 RELEASE_ASSERT(threadState()->isSweepingInProgress());
615 ASSERT(threadState()->sweepForbidden()); 650 ASSERT(threadState()->sweepForbidden());
616 651
617 if (threadState()->isMainThread())
618 ScriptForbiddenScope::enter();
619
620 while (m_firstUnsweptPage) { 652 while (m_firstUnsweptPage) {
kouhei (in TOK) 2015/03/31 11:42:07 Nit: Unneeded {}
haraken 2015/03/31 12:46:58 Nit: The coding style guide is updated and it's up
621 BasePage* page = m_firstUnsweptPage; 653 sweepUnsweptPage();
622 if (page->isEmpty()) {
623 page->unlink(&m_firstUnsweptPage);
624 page->removeFromHeap();
625 } else {
626 // Sweep a page and move the page from m_firstUnsweptPages to
627 // m_firstPages.
628 page->sweep();
629 page->unlink(&m_firstUnsweptPage);
630 page->link(&m_firstPage);
631 page->markAsSwept();
632 }
633 } 654 }
634
635 if (threadState()->isMainThread())
636 ScriptForbiddenScope::exit();
637 } 655 }
638 656
639 NormalPageHeap::NormalPageHeap(ThreadState* state, int index) 657 NormalPageHeap::NormalPageHeap(ThreadState* state, int index)
640 : BaseHeap(state, index) 658 : BaseHeap(state, index)
641 , m_currentAllocationPoint(nullptr) 659 , m_currentAllocationPoint(nullptr)
642 , m_remainingAllocationSize(0) 660 , m_remainingAllocationSize(0)
643 , m_lastRemainingAllocationSize(0) 661 , m_lastRemainingAllocationSize(0)
644 , m_promptlyFreedSize(0) 662 , m_promptlyFreedSize(0)
645 #if ENABLE(GC_PROFILING) 663 #if ENABLE(GC_PROFILING)
646 , m_cumulativeAllocationSize(0) 664 , m_cumulativeAllocationSize(0)
(...skipping 2198 matching lines...) Expand 10 before | Expand all | Expand 10 after
2845 size_t Heap::s_allocatedObjectSize = 0; 2863 size_t Heap::s_allocatedObjectSize = 0;
2846 size_t Heap::s_allocatedSpace = 0; 2864 size_t Heap::s_allocatedSpace = 0;
2847 size_t Heap::s_markedObjectSize = 0; 2865 size_t Heap::s_markedObjectSize = 0;
2848 2866
2849 size_t Heap::s_externallyAllocatedBytes = 0; 2867 size_t Heap::s_externallyAllocatedBytes = 0;
2850 size_t Heap::s_externallyAllocatedBytesAlive = 0; 2868 size_t Heap::s_externallyAllocatedBytesAlive = 0;
2851 unsigned Heap::s_requestedUrgentGC = false; 2869 unsigned Heap::s_requestedUrgentGC = false;
2852 double Heap::s_markingTimeInLastGC = 0.0; 2870 double Heap::s_markingTimeInLastGC = 0.0;
2853 2871
2854 } // namespace blink 2872 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/heap/Heap.h ('k') | Source/platform/heap/ThreadState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698