1. 02 Aug, 2017 3 commits
  2. 01 Aug, 2017 2 commits
    • Leszek Swirski's avatar
      [heap] Remove IC age · 77cd8416
      Leszek Swirski authored
      Remove the concept of IC age from the heap and SFI, since it no
      longer does anything useful.
      
      Change-Id: I4ce466efc77c007c09c0889bae09ec6a0c907e33
      Reviewed-on: https://chromium-review.googlesource.com/593623
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47041}
      77cd8416
    • Benedikt Meurer's avatar
      [builtins] Speed-up Object.prototype.toString. · 31800120
      Benedikt Meurer authored
      The @@toStringTag lookup in Object.prototype.toString causes quite a
      lot of overhead and oftentimes dominates the builtin performance. These
      lookups are almost always negative, especially for primitive values,
      and Object.prototype.toString is often used to implement predicates
      (like in Node core or in AngularJS), so having a way to skip the
      negative lookup yields big performance gains.
      
      This CL introduces a "MayHaveInterestingSymbols" bit on every map,
      which says whether instances with this map may have an interesting
      symbol. Currently only @@toStringTag is considered an interesting
      symbol, but we can extend that in the future.
      
      In the Object.prototype.toString we can use the interesting symbols
      bit to do a quick check on the prototype chain to see if there are
      any maps that might have the @@toStringTag, and if not, we can just
      immediately return the result, which is very fast because it's derived
      from the instance type. This also avoids the ToObject conversions for
      primitive values, which is important, since this causes unnecessary
      GC traffic and in for example AngularJS, strings are also often probed
      via the Object.prototype.toString based predicates.
      
      This boosts Speedometer/AngularJS by over 3% and Speedometer overall
      by up to 1%. On the microbenchmark from the similar SpiderMonkey bug
      (https://bugzilla.mozilla.org/show_bug.cgi?id=1369042), we go from
      roughly 450ms to 70ms, which corresponds to a 6.5x improvement.
      
      ```
      function f() {
          var res = "";
          var a = [1, 2, 3];
          var toString = Object.prototype.toString;
          var t = new Date;
          for (var i = 0; i < 5000000; i++)
      	res = toString.call(a);
          print(new Date - t);
          return res;
      }
      f();
      ```
      
      The design document at https://goo.gl/e8CruQ has some additional
      data points.
      
      TBR=ulan@chromium.org
      
      Bug: v8:6654
      Change-Id: I31932cf41ecddad079d294e2c322a852af0ed244
      Reviewed-on: https://chromium-review.googlesource.com/593620
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47034}
      31800120
  3. 31 Jul, 2017 3 commits
    • Alexey Kozyatinskiy's avatar
      [inspector] speedup Debugger.getPossibleBreakpoints · f455986f
      Alexey Kozyatinskiy authored
      In current implementation we call PrepareForBreakPoints during getting possible breakpoints, this call produce GC and iteration through heap, but it's not needed before we set real breakpoint.
      
      On my machine, get-possible-breakpoints-master.js without CL takes ~200ms, with CL it takes ~60 ms. Running test without getPossibleBreakpoints protocol call takes ~50 ms. It means that we have (200-50)/(60-50) = 15 times faster getPossibleBreakpoints.
      
      R=yangguo@chromium.org,jgrubber@chromium.org
      
      Bug: none
      Change-Id: If12e41cd87dbba11a89aa5895e3b4d88123d7d3d
      Reviewed-on: https://chromium-review.googlesource.com/591027
      Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47021}
      f455986f
    • Leszek Swirski's avatar
      [objects] Move deopt_count to FeedbackVector · b34d2ec6
      Leszek Swirski authored
      Since any deopt-count-based heuristics should be native context
      dependent, it belongs in the feedback vector rather than the SFI.
      
      Bug: v8:6402
      Change-Id: I30804d58bc1dec9150558e6ee21ee5b4dbd36c8d
      Reviewed-on: https://chromium-review.googlesource.com/593661
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47014}
      b34d2ec6
    • Leszek Swirski's avatar
      [sfi] Remove opt_count · e47d1757
      Leszek Swirski authored
      Remove opt_count from SFI, which only had two real uses:
      
        1. Detecting OSR in tests -- replaced with a stack walk in
           %GetOptimizationStatus
        2. Naming optimization log files -- replaced with the
           optimization id
      
      This allows us to remove a field from the SFI, moving the
      bailout reason into the counters field.
      
      As a drive-by, add optimization marker information (e.g.
      marked for optimization) to the optimization status.
      
      Change-Id: Id77deb5dd5439dfba058a7e1e1748de26b717d0d
      Reviewed-on: https://chromium-review.googlesource.com/592028Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47009}
      e47d1757
  4. 28 Jul, 2017 2 commits
    • Jakob Kummerow's avatar
      Refactor TransitionArray access · e567dd3a
      Jakob Kummerow authored
      in preparation for caching StoreIC-Transition handlers in there.
      This CL should not change behavior or performance.
      
      The TransitionArray class no longer serves a dual purpose; it is now
      simply the data structure serving that role. Further, it now supports
      storing transitioning handlers in its "target" slot, which in turn have
      a WeakCell pointing to the transition target (but this functionality
      is not being used yet).
      
      The interface for accessing a map's transitions, previously implemented
      as a set of static functions, is now handled by the TransitionsAccessor
      class. It distinguishes the following internal states:
      - kPrototypeInfo: map is a prototype map, will never cache any transitions.
      - kUninitialized: map can cache transitions, but doesn't have any.
      - kWeakCell: map caches a single transition, stored inline. Formerly known
                   as "IsSimpleTransition".
      - kFullTransitionArray: map uses a TransitionArray to store transitions.
      - kTuple3Handler, kFixedArrayHandler: to be used in the future for caching
                                            transitioning handlers.
      
      Change-Id: If2aa68390981f96f317b958445a6e0b935c2a14e
      Reviewed-on: https://chromium-review.googlesource.com/550118Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46981}
      e567dd3a
    • Leszek Swirski's avatar
      [compiler] Kill the deoptimized too many times bailout · 1c02987d
      Leszek Swirski authored
      With TurboFan, there should no longer be any deopt loops (aside from
      bugs). So, the "too many deopts" bailout is no longer needed, at least
      in its current form.
      
      This fixes an issue where deopt counts are leaked between native
      contexts, resulting in optimization being disabled unnecessarily.
      
      Bug: v8:6402
      Change-Id: Ia06374ae6b5c2d473bcdd8eef1284bf02766c2fb
      Reviewed-on: https://chromium-review.googlesource.com/588894
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46961}
      1c02987d
  5. 27 Jul, 2017 3 commits
  6. 25 Jul, 2017 2 commits
  7. 24 Jul, 2017 6 commits
  8. 22 Jul, 2017 1 commit
  9. 21 Jul, 2017 2 commits
  10. 20 Jul, 2017 2 commits
    • Adam Klein's avatar
      Revert "[literals] Introduce CreateEmptyArrayLiteral Bytecode" · 62f83377
      Adam Klein authored
      This reverts commit 4851745f.
      
      Reason for revert: Top crasher on Canary, see https://crbug.com/746935
      
      Original change's description:
      > [literals] Introduce CreateEmptyArrayLiteral Bytecode
      > 
      > Empty Array literals are amongst the most commonly used literal types on our
      > top25 page list. Using a custom bytecode we can drop the boilerplate for empty
      > Array literals alltogether. However, we still need a proper AllocationSite to
      > track ElementsKind transitions.
      > 
      > Bug: v8:6211
      > Change-Id: Id5dbdac0ea8e24dd474e679c902c6e4a2957af1d
      > Reviewed-on: https://chromium-review.googlesource.com/567079
      > Commit-Queue: Camillo Bruni <cbruni@chromium.org>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#46752}
      
      TBR=rmcilroy@chromium.org,mstarzinger@chromium.org,cbruni@chromium.org,ishell@chromium.org,rmcilroy@google.com
      Bug: v8:6211, chromium:746935
      
      Change-Id: Ibf19a923688c071d03bad8661a10e08f8414db56
      Reviewed-on: https://chromium-review.googlesource.com/580193
      Commit-Queue: Adam Klein <adamk@chromium.org>
      Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46804}
      62f83377
    • Michael Lippautz's avatar
      [heap] Parallel Scavenge · a45048e2
      Michael Lippautz authored
      Bug: chromium:738865
      Change-Id: Ie18574bb067438816238e2cf930e6d2a7bc5ecef
      Reviewed-on: https://chromium-review.googlesource.com/570579
      Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46798}
      a45048e2
  11. 19 Jul, 2017 4 commits
  12. 17 Jul, 2017 1 commit
    • Leszek Swirski's avatar
      Revert "[runtime] Move profiler ticks from SFI to feedback vector" · 14c5c4fd
      Leszek Swirski authored
      This reverts commit a2fcdc7c.
      
      Reason for revert: Large regressions in RCS (https://chromeperf.appspot.com/group_report?bug_id=740126)
      
      Original change's description:
      > [runtime] Move profiler ticks from SFI to feedback vector
      > 
      > Instead of counting profiler ticks on the shared function info (which is
      > shared between native contexts), count them on the feedback vector
      > (which is not). This allows us to continue pushing optimization
      > decisions off the SFI, onto the feedback vector.
      > 
      > Note that a side-effect of this is that ICs don't have to walk the stack
      > to reset profiler ticks, as they can access the feedback vector directly
      > from their feedback nexus.
      > 
      > Change-Id: I232ae9e759fca75cd89d393148a4ff42caa2646f
      > Reviewed-on: https://chromium-review.googlesource.com/544888
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#46411}
      
      TBR=rmcilroy@chromium.org,leszeks@chromium.org,ishell@chromium.org
      
      # Not skipping CQ checks because original CL landed > 1 day ago.
      
      Change-Id: Id587e4172e300c420f93c49744a2a0e66696edf8
      Reviewed-on: https://chromium-review.googlesource.com/574227
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46702}
      14c5c4fd
  13. 14 Jul, 2017 3 commits
  14. 13 Jul, 2017 3 commits
  15. 11 Jul, 2017 1 commit
  16. 10 Jul, 2017 2 commits