1. 04 Dec, 2015 2 commits
  2. 03 Dec, 2015 3 commits
  3. 02 Dec, 2015 10 commits
    • jkummerow's avatar
      [cleanup] Introduce PropertyFilter · 4a246c1f
      jkummerow authored
      Split out of PropertyAttributes, and used for all filtering purposes.
      Also moved PropertyAttributes into the v8::internal:: namespace.
      
      No change in behavior intended.
      
      Review URL: https://codereview.chromium.org/1492653004
      
      Cr-Commit-Position: refs/heads/master@{#32525}
      4a246c1f
    • mlippautz's avatar
      Revert of [heap] Refactor evacuation for young and old gen into visitors.... · 9b421f26
      mlippautz authored
      Revert of [heap] Refactor evacuation for young and old gen into visitors. (patchset #1 id:1 of https://codereview.chromium.org/1493523003/ )
      
      Reason for revert:
      Speculative revert for crashing Canary.
      
      Original issue's description:
      > Reland of [heap] Refactor evacuation for young and old gen into visitors. (patchset #1 id:1 of https://codereview.chromium.org/1483393002/ )
      >
      > Reason for revert:
      > Reland after fixing the potential root cause of the canary crasher.
      >
      > Original issue's description:
      > > Revert of [heap] Refactor evacuation for young and old gen into visitors. (patchset #5 id:80001 of https://codereview.chromium.org/1470253002/ )
      > >
      > > Reason for revert:
      > > Still investigating bad canary.
      > >
      > > Original issue's description:
      > > > [heap] Refactor evacuation for young and old gen into visitors.
      > > >
      > > > Create a visitor for evacuating objects for young and old generation. This is
      > > > the first step of preparing a task to process, both,  newspace and oldspace
      > > > pages in parallel.
      > > >
      > > > BUG=chromium:524425
      > > > LOG=N
      > > >
      > > > Committed: https://crrev.com/138d9bae5d7014e0d205634a49b5eac3697744c8
      > > > Cr-Commit-Position: refs/heads/master@{#32349}
      > >
      > > TBR=mlippautz@chromium.org
      > > NOPRESUBMIT=true
      > > NOTREECHECKS=true
      > > NOTRY=true
      > > BUG=chromium:524425
      > >
      > > Committed: https://crrev.com/aa24a3135ec308e1f84bce334844caf0cae2437a
      > > Cr-Commit-Position: refs/heads/master@{#32462}
      >
      > TBR=mlippautz@chromium.org
      > NOPRESUBMIT=true
      > NOTREECHECKS=true
      > NOTRY=true
      > BUG=chromium:524425
      >
      > Committed: https://crrev.com/120b640dfce5f02cecc5af72ca0b2b3b93ce8652
      > Cr-Commit-Position: refs/heads/master@{#32500}
      
      TBR=hpayer@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=chromium:524425
      
      Review URL: https://codereview.chromium.org/1495583002
      
      Cr-Commit-Position: refs/heads/master@{#32522}
      9b421f26
    • mlippautz's avatar
      Revert of [heap] Unify evacuating an object for new and old generation.... · e35e8c9d
      mlippautz authored
      Revert of [heap] Unify evacuating an object for new and old generation. (patchset #1 id:1 of https://codereview.chromium.org/1494533002/ )
      
      Reason for revert:
      Speculative revert for crashing Canary.
      
      Original issue's description:
      > Reland of [heap] Unify evacuating an object for new and old generation. (patchset #1 id:1 of https://codereview.chromium.org/1483963004/ )
      >
      > Reason for revert:
      > Reland after fixing the potential root cause of the canary crasher.
      >
      > Original issue's description:
      > > Revert of [heap] Unify evacuating an object for new and old generation. (patchset #2 id:20001 of https://codereview.chromium.org/1481873002/ )
      > >
      > > Reason for revert:
      > > Still investigating bad canary.
      > >
      > > Original issue's description:
      > > > [heap] Unify evacuating an object for new and old generation.
      > > >
      > > > BUG=chromium:524425
      > > > LOG=N
      > > >
      > > > Committed: https://crrev.com/afb8bcce8ba889280ed747eb218d287ddd233b4a
      > > > Cr-Commit-Position: refs/heads/master@{#32365}
      > >
      > > TBR=mlippautz@chromium.org
      > > NOPRESUBMIT=true
      > > NOTREECHECKS=true
      > > NOTRY=true
      > > BUG=chromium:524425
      > >
      > > Committed: https://crrev.com/9c60ddc60e96da0c59e646660789c26550ad52a2
      > > Cr-Commit-Position: refs/heads/master@{#32460}
      >
      > TBR=mlippautz@chromium.org
      > NOPRESUBMIT=true
      > NOTREECHECKS=true
      > NOTRY=true
      > BUG=chromium:524425
      >
      > Committed: https://crrev.com/7ea8ac98f6eb5ffa9d4976aa22fec9befb814e0c
      > Cr-Commit-Position: refs/heads/master@{#32501}
      
      TBR=hpayer@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=chromium:524425
      
      Review URL: https://codereview.chromium.org/1491013003
      
      Cr-Commit-Position: refs/heads/master@{#32521}
      e35e8c9d
    • mlippautz's avatar
      Revert of "[heap] Clean up stale store buffer entries for aborted pages."... · 23227681
      mlippautz authored
      Revert of "[heap] Clean up stale store buffer entries for aborted pages." (patchset #3 id:40001 of https://codereview.chromium.org/1494503004/ )
      
      Reason for revert:
      Still failing on GC stress
        https://chromegw.corp.google.com/i/client.v8/builders/V8%20Linux%20-%20gc%20stress/builds/690
      
      Original issue's description:
      > Reland of "[heap] Clean up stale store buffer entries for aborted pages."
      >
      > This reverts commit d4fc4a8c.
      >
      > 1.  Let X be the aborted slot (slot in an evacuated object in an aborted page)
      > 2.  Assume X contains pointer to Y and Y is in the new space, so X is in the
      >     store buffer.
      > 3.  Store buffer rebuilding will not filter out X (it checks InNewSpace(Y)).
      > 4.  The current mark-sweep finishes. The slot X is in free space and is also in
      >     the store buffer.
      > 5.  A string of length 9 "abcdefghi" is allocated in the new space. The string
      >     looks like |MAP|LENGTH|hgfedcba|NNNNNNNi| in memory, where NNNNNNN is
      >     previous garbage. Let's assume that NNNNNNN0 was pointing to a new space
      >     object before.
      > 6.  Scavenge happens.
      > 7.  Slot X is still in free space and in store buffer. [It causes scavenge of
      >     the object Y in
      >     store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject). But
      >     it is not important].
      > 8.  Our string is promoted and is allocated over the slot X, such that NNNNNNNi
      >     is written in X.
      > 9.  The scavenge finishes.
      > 9.  Another scavenge starts.
      > 10. We crash in
      >     store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject) when
      >     processing slot X, because it doesn't point to valid map.
      >
      > BUG=chromium:524425, chromium:564498
      > LOG=N
      > R=hpayer@chromium.org, ulan@chromium.org
      >
      > Committed: https://crrev.com/fc6ff534003480e49dc481d9c665e961ab709c02
      > Cr-Commit-Position: refs/heads/master@{#32514}
      
      TBR=hpayer@chromium.org,ulan@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=chromium:524425, chromium:564498
      
      Review URL: https://codereview.chromium.org/1492823002
      
      Cr-Commit-Position: refs/heads/master@{#32520}
      23227681
    • mlippautz's avatar
      Reland of "[heap] Clean up stale store buffer entries for aborted pages." · fc6ff534
      mlippautz authored
      This reverts commit d4fc4a8c.
      
      1.  Let X be the aborted slot (slot in an evacuated object in an aborted page)
      2.  Assume X contains pointer to Y and Y is in the new space, so X is in the
          store buffer.
      3.  Store buffer rebuilding will not filter out X (it checks InNewSpace(Y)).
      4.  The current mark-sweep finishes. The slot X is in free space and is also in
          the store buffer.
      5.  A string of length 9 "abcdefghi" is allocated in the new space. The string
          looks like |MAP|LENGTH|hgfedcba|NNNNNNNi| in memory, where NNNNNNN is
          previous garbage. Let's assume that NNNNNNN0 was pointing to a new space
          object before.
      6.  Scavenge happens.
      7.  Slot X is still in free space and in store buffer. [It causes scavenge of
          the object Y in
          store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject). But
          it is not important].
      8.  Our string is promoted and is allocated over the slot X, such that NNNNNNNi
          is written in X.
      9.  The scavenge finishes.
      9.  Another scavenge starts.
      10. We crash in
          store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject) when
          processing slot X, because it doesn't point to valid map.
      
      BUG=chromium:524425, chromium:564498
      LOG=N
      R=hpayer@chromium.org, ulan@chromium.org
      
      Review URL: https://codereview.chromium.org/1494503004
      
      Cr-Commit-Position: refs/heads/master@{#32514}
      fc6ff534
    • mlippautz's avatar
      Revert of [heap] Clean up stale store buffer entries for aborted pages.... · d4fc4a8c
      mlippautz authored
      Revert of [heap] Clean up stale store buffer entries for aborted pages. (patchset #4 id:60001 of https://codereview.chromium.org/1493653002/ )
      
      Reason for revert:
      Not completely correct fix.
      
      Original issue's description:
      > [heap] Clean up stale store buffer entries for aborted pages.
      >
      > 1.  Let X be the aborted slot (slot in an evacuated object in an aborted page)
      > 2.  Assume X contains pointer to Y and Y is in the new space, so X is in the
      >     store buffer.
      > 3.  Store buffer rebuilding will not filter out X (it checks InNewSpace(Y)).
      > 4.  The current mark-sweep finishes. The slot X is in free space and is also in
      >     the store buffer.
      > 5.  A string of length 9 "abcdefghi" is allocated in the new space. The string
      >     looks like |MAP|LENGTH|hgfedcba|NNNNNNNi| in memory, where NNNNNNN is
      >     previous garbage. Let's assume that NNNNNNN0 was pointing to a new space
      >     object before.
      > 6.  Scavenge happens.
      > 7.  Slot X is still in free space and in store buffer. [It causes scavenge of
      >     the object Y in
      >     store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject). But
      >     it is not important].
      > 8.  Our string is promoted and is allocated over the slot X, such that NNNNNNNi
      >     is written in X.
      > 9.  The scavenge finishes.
      > 9.  Another scavenge starts.
      > 10. We crash in
      >     store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject) when
      >     processing slot X, because it doesn't point to valid map.
      >
      > BUG=chromium:524425,chromium:564498
      > LOG=N
      > R=hpayer@chromium.org, ulan@chromium.org
      >
      > Committed: https://crrev.com/2e7eea4aef3403969fe885e30f892d46253b3572
      > Cr-Commit-Position: refs/heads/master@{#32495}
      
      TBR=hpayer@chromium.org,ulan@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=chromium:524425,chromium:564498
      
      Review URL: https://codereview.chromium.org/1489243004
      
      Cr-Commit-Position: refs/heads/master@{#32504}
      d4fc4a8c
    • hpayer's avatar
      Reland of [heap] Cleanup mark bit usage. (patchset #1 id:1 of... · 0240d202
      hpayer authored
      Reland of [heap] Cleanup mark bit usage. (patchset #1 id:1 of https://codereview.chromium.org/1490753003/ )
      
      Reason for revert:
      Reland after fixing the potential root cause of the canary crasher.
      
      Original issue's description:
      > Revert of [heap] Cleanup mark bit usage. (patchset #1 id:1 of https://codereview.chromium.org/1474203003/ )
      >
      > Reason for revert:
      > Still investigating bad canary.
      >
      > Original issue's description:
      > > [heap] Cleanup mark bit usage.
      > >
      > > BUG=
      > >
      > > Committed: https://crrev.com/5874ac783ff9bc4bb4b2fda81f5077f06619f96c
      > > Cr-Commit-Position: refs/heads/master@{#32362}
      >
      > TBR=mlippautz@chromium.org
      > NOPRESUBMIT=true
      > NOTREECHECKS=true
      > NOTRY=true
      > BUG=
      >
      > Committed: https://crrev.com/d3faef8658598e68331208b5a1846ac1c250cb49
      > Cr-Commit-Position: refs/heads/master@{#32461}
      
      TBR=mlippautz@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=
      
      Review URL: https://codereview.chromium.org/1488393003
      
      Cr-Commit-Position: refs/heads/master@{#32502}
      0240d202
    • hpayer's avatar
      Reland of [heap] Unify evacuating an object for new and old generation.... · 7ea8ac98
      hpayer authored
      Reland of [heap] Unify evacuating an object for new and old generation. (patchset #1 id:1 of https://codereview.chromium.org/1483963004/ )
      
      Reason for revert:
      Reland after fixing the potential root cause of the canary crasher.
      
      Original issue's description:
      > Revert of [heap] Unify evacuating an object for new and old generation. (patchset #2 id:20001 of https://codereview.chromium.org/1481873002/ )
      >
      > Reason for revert:
      > Still investigating bad canary.
      >
      > Original issue's description:
      > > [heap] Unify evacuating an object for new and old generation.
      > >
      > > BUG=chromium:524425
      > > LOG=N
      > >
      > > Committed: https://crrev.com/afb8bcce8ba889280ed747eb218d287ddd233b4a
      > > Cr-Commit-Position: refs/heads/master@{#32365}
      >
      > TBR=mlippautz@chromium.org
      > NOPRESUBMIT=true
      > NOTREECHECKS=true
      > NOTRY=true
      > BUG=chromium:524425
      >
      > Committed: https://crrev.com/9c60ddc60e96da0c59e646660789c26550ad52a2
      > Cr-Commit-Position: refs/heads/master@{#32460}
      
      TBR=mlippautz@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=chromium:524425
      
      Review URL: https://codereview.chromium.org/1494533002
      
      Cr-Commit-Position: refs/heads/master@{#32501}
      7ea8ac98
    • hpayer's avatar
      Reland of [heap] Refactor evacuation for young and old gen into visitors.... · 120b640d
      hpayer authored
      Reland of [heap] Refactor evacuation for young and old gen into visitors. (patchset #1 id:1 of https://codereview.chromium.org/1483393002/ )
      
      Reason for revert:
      Reland after fixing the potential root cause of the canary crasher.
      
      Original issue's description:
      > Revert of [heap] Refactor evacuation for young and old gen into visitors. (patchset #5 id:80001 of https://codereview.chromium.org/1470253002/ )
      >
      > Reason for revert:
      > Still investigating bad canary.
      >
      > Original issue's description:
      > > [heap] Refactor evacuation for young and old gen into visitors.
      > >
      > > Create a visitor for evacuating objects for young and old generation. This is
      > > the first step of preparing a task to process, both,  newspace and oldspace
      > > pages in parallel.
      > >
      > > BUG=chromium:524425
      > > LOG=N
      > >
      > > Committed: https://crrev.com/138d9bae5d7014e0d205634a49b5eac3697744c8
      > > Cr-Commit-Position: refs/heads/master@{#32349}
      >
      > TBR=mlippautz@chromium.org
      > NOPRESUBMIT=true
      > NOTREECHECKS=true
      > NOTRY=true
      > BUG=chromium:524425
      >
      > Committed: https://crrev.com/aa24a3135ec308e1f84bce334844caf0cae2437a
      > Cr-Commit-Position: refs/heads/master@{#32462}
      
      TBR=mlippautz@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=chromium:524425
      
      Review URL: https://codereview.chromium.org/1493523003
      
      Cr-Commit-Position: refs/heads/master@{#32500}
      120b640d
    • mlippautz's avatar
      [heap] Clean up stale store buffer entries for aborted pages. · 2e7eea4a
      mlippautz authored
      1.  Let X be the aborted slot (slot in an evacuated object in an aborted page)
      2.  Assume X contains pointer to Y and Y is in the new space, so X is in the
          store buffer.
      3.  Store buffer rebuilding will not filter out X (it checks InNewSpace(Y)).
      4.  The current mark-sweep finishes. The slot X is in free space and is also in
          the store buffer.
      5.  A string of length 9 "abcdefghi" is allocated in the new space. The string
          looks like |MAP|LENGTH|hgfedcba|NNNNNNNi| in memory, where NNNNNNN is
          previous garbage. Let's assume that NNNNNNN0 was pointing to a new space
          object before.
      6.  Scavenge happens.
      7.  Slot X is still in free space and in store buffer. [It causes scavenge of
          the object Y in
          store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject). But
          it is not important].
      8.  Our string is promoted and is allocated over the slot X, such that NNNNNNNi
          is written in X.
      9.  The scavenge finishes.
      9.  Another scavenge starts.
      10. We crash in
          store_buffer()->IteratePointersToNewSpace(&Scavenger::ScavengeObject) when
          processing slot X, because it doesn't point to valid map.
      
      BUG=chromium:524425,chromium:564498
      LOG=N
      R=hpayer@chromium.org, ulan@chromium.org
      
      Review URL: https://codereview.chromium.org/1493653002
      
      Cr-Commit-Position: refs/heads/master@{#32495}
      2e7eea4a
  4. 01 Dec, 2015 4 commits
  5. 30 Nov, 2015 2 commits
  6. 27 Nov, 2015 4 commits
  7. 26 Nov, 2015 1 commit
  8. 25 Nov, 2015 3 commits
  9. 24 Nov, 2015 1 commit
  10. 19 Nov, 2015 1 commit
  11. 17 Nov, 2015 1 commit
    • ulan's avatar
      Optimize MarkCompactCollector::ClearNonLiveReferences. · ed357f96
      ulan authored
      This splits the work to be done for dead and life maps
      and avoids unnecessary operations in the hot loop.
      
      Results for v8.infinite_scroll:
      
      Before:
      nonlive_refs
        len: 93
        min: 0.0
        max: 6.3
        avg: 1.35268817204
        [0,5[: 91
        [5,10[: 2
      
      After:
      nonlive_refs
        len: 91
        min: 0.0
        max: 4.2
        avg: 0.968131868132
        [0,5[: 91
      
      BUG=chromium:554488
      LOG=no
      
      Review URL: https://codereview.chromium.org/1441633002
      
      Cr-Commit-Position: refs/heads/master@{#32042}
      ed357f96
  12. 16 Nov, 2015 1 commit
    • mlippautz's avatar
      [heap] Use cancelable tasks during compaction. · 60e8ae51
      mlippautz authored
      This way we can properly cancel them on the main thread in case they never get
      scheduled by the platform.
      
      BUG=chromium:524425
      LOG=N
      CQ_EXTRA_TRYBOTS=tryserver.v8:v8_linux_arm64_gc_stress_dbg;tryserver.v8:v8_linux_gc_stress_dbg;tryserver.v8:v8_mac_gc_stress_dbg;tryserver.v8:v8_linux64_msan_rel;tryserver.v8:v8_linux64_tsan_rel;tryserver.v8:v8_mac64_asan_rel
      
      Review URL: https://codereview.chromium.org/1446523003
      
      Cr-Commit-Position: refs/heads/master@{#32007}
      60e8ae51
  13. 13 Nov, 2015 2 commits
    • ishell's avatar
      Avoid manual object's body traversal in GC. · 5ba9ea18
      ishell authored
      This CL introduces the following visitors:
      1) RecordMigratedSlotVisitor which simplifies MarkCompactCollector::MigrateObject().
      2) IteratePointersToFromSpaceVisitor which simplifies Heap::IteratePointersToFromSpace().
      3) FindPointersToNewSpaceVisitor which simplifies StoreBuffer::IteratePointersToNewSpace().
      
      These changes make the object's body descriptors the one and only place that knows how to traverse the object.
      
      Review URL: https://codereview.chromium.org/1441453002
      
      Cr-Commit-Position: refs/heads/master@{#31992}
      5ba9ea18
    • ishell's avatar
      Object's body descriptors refactoring. · 138eb324
      ishell authored
      1) Body descriptors moved to their own header files.
      2) Missing body descriptors added.
      3) Template versions of HeapObject::Iterate*() methods added.
      4) Body descriptors support new kind of queries: IsValidSlot(offset) which can be used for invalid slots filtering.
      
      This is a first step towards virtual and static visitors unification and support in-object properties in built-in (sub-)classes.
      
      Review URL: https://codereview.chromium.org/1440243002
      
      Cr-Commit-Position: refs/heads/master@{#31980}
      138eb324
  14. 12 Nov, 2015 1 commit
  15. 09 Nov, 2015 1 commit
    • mstarzinger's avatar
      [heap] Separate out optimized code map processing. · 087513d6
      mstarzinger authored
      This separates the post-processing step for optimized code maps out of
      the CodeFlusher. It uses the complete SharedFunctionInfo::Iterator to
      visit all candidates instead of gathering candidates during marking.
      
      Gathering candidates during marking no longer makes sense, now that the
      majority of SharedFunctionInfo objects will hold such an optimized code
      map. Also it reduces complexity of the implementation. Also conflating
      this mechanism with "code flushing" was confusing.
      
      This reverts commit 7f1fb29f.
      
      R=ulan@chromium.org
      
      Review URL: https://codereview.chromium.org/1418453008
      
      Cr-Commit-Position: refs/heads/master@{#31876}
      087513d6
  16. 06 Nov, 2015 1 commit
  17. 05 Nov, 2015 2 commits
    • mstarzinger's avatar
      Revert of [heap] Separate out optimized code map processing. (patchset #2... · 7f1fb29f
      mstarzinger authored
      Revert of [heap] Separate out optimized code map processing. (patchset #2 id:20001 of https://codereview.chromium.org/1421903012/ )
      
      Reason for revert:
      Causes GC-Stress failures.
      
      Original issue's description:
      > [heap] Separate out optimized code map processing.
      >
      > This separates the post-processing step for optimized code maps out of
      > the CodeFlusher. It uses the complete SharedFunctionInfo::Iterator to
      > visit all candidates instead of gathering candidates during marking.
      >
      > Gathering candidates during marking no longer makes sense, now that the
      > majority of SharedFunctionInfo objects will hold such an optimized code
      > map. Also it reduces complexity of the implementation. Also conflating
      > this mechanism with "code flushing" was confusing.
      >
      > This reverts commit b6644e84.
      >
      > R=ulan@chromium.org
      >
      > Committed: https://crrev.com/bb7a5eb2d89bae25f2b5ecb9515669f0ac73c111
      > Cr-Commit-Position: refs/heads/master@{#31836}
      
      TBR=ulan@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      
      Review URL: https://codereview.chromium.org/1412063012
      
      Cr-Commit-Position: refs/heads/master@{#31837}
      7f1fb29f
    • mstarzinger's avatar
      [heap] Separate out optimized code map processing. · bb7a5eb2
      mstarzinger authored
      This separates the post-processing step for optimized code maps out of
      the CodeFlusher. It uses the complete SharedFunctionInfo::Iterator to
      visit all candidates instead of gathering candidates during marking.
      
      Gathering candidates during marking no longer makes sense, now that the
      majority of SharedFunctionInfo objects will hold such an optimized code
      map. Also it reduces complexity of the implementation. Also conflating
      this mechanism with "code flushing" was confusing.
      
      This reverts commit b6644e84.
      
      R=ulan@chromium.org
      
      Review URL: https://codereview.chromium.org/1421903012
      
      Cr-Commit-Position: refs/heads/master@{#31836}
      bb7a5eb2