1. 01 Feb, 2019 1 commit
  2. 22 Jan, 2019 1 commit
  3. 07 Jan, 2019 1 commit
  4. 20 Dec, 2018 1 commit
  5. 17 Dec, 2018 1 commit
  6. 11 Dec, 2018 1 commit
  7. 08 Dec, 2018 1 commit
  8. 28 Nov, 2018 1 commit
  9. 25 Nov, 2018 1 commit
  10. 30 Oct, 2018 1 commit
  11. 11 Oct, 2018 1 commit
  12. 23 Jul, 2018 1 commit
  13. 20 Jul, 2018 1 commit
  14. 19 Jul, 2018 1 commit
    • Leszek Swirski's avatar
      [liveedit] Use start position in function lookup · ac0c19b6
      Leszek Swirski authored
      Instead of looking up functions by their function literal id (which can
      be slow now that function id involves a linear search for compiled
      functions), we key the lookup by the function's start position.
      
      This means that the script+literal id swapping to find equivalent
      unchanged functions during constant pool patching no longer works -- we
      could replace it by fixing up the start position of the redundant new
      function, but instead we just build up a side-table mapping (new) start
      positions to function literal ids, and use that function literal id to
      find the old function in the script's SFI list.
      
      Change-Id: I10bfce6c39665cba063e0ddbc8fd38a6f5fd5513
      Reviewed-on: https://chromium-review.googlesource.com/1140169Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54542}
      ac0c19b6
  15. 18 Jul, 2018 2 commits
  16. 16 Jul, 2018 3 commits
    • Leszek Swirski's avatar
      [sfi] Remove SFI function literal id field (reland^2) · 5dee5ade
      Leszek Swirski authored
      SharedFunctionInfos store their original function literal's id. This is
      also their index in the Script's SFI list.
      
      The function literal id is only needed for lazy compilation and live edit,
      and access only has to be fast in the former. So, we can move the SFI
      function literal id field to UncompiledData, and if patching with live
      edit, or discarding compiled code, we can perform a slower linear search
      through the Script's SFI list.
      
      This is a reland of
       1) https://chromium-review.googlesource.com/1082480 and
       2) https://chromium-review.googlesource.com/1128854
      the differences being:
       1) caching the literal id on UncompiledData rather than always linearly
          searching the SFI list, and removing the unused runtime-liveedit.cc
          file instead of fixing it to support this change.
       2) clearing padding on UncompiledData now that it has 3 int32 fields,
          making its end unaligned on x64.
      
      TBR=yangguo@chromium.org,marja@chromium.org,ulan@chromium.org,cbruni@chromium.org
      
      Bug: chromium:818642
      Change-Id: I58dcb12a2a60a680f662568da428e01189c62638
      Reviewed-on: https://chromium-review.googlesource.com/1138325Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54473}
      5dee5ade
    • Sigurd Schneider's avatar
      Revert "[sfi] Remove SFI function literal id field" · 58578584
      Sigurd Schneider authored
      This reverts commit 1d4a1172.
      
      Reason for revert: https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux%20-%20arm64%20-%20sim%20-%20MSAN/21989
      
      Original change's description:
      > [sfi] Remove SFI function literal id field
      > 
      > SharedFunctionInfos store their original function literal's id. This is
      > also their index in the Script's SFI list.
      > 
      > The function literal id is only needed for lazy compilation and live edit,
      > and access only has to be fast in the former. So, we can move the SFI
      > function literal id field to UncompiledData, and if patching with live
      > edit, or discarding compiled code, we can perform a slower linear search
      > through the Script's SFI list.
      > 
      > This is a reland of
      > https://chromium-review.googlesource.com/c/v8/v8/+/1082480
      > but caching the literal id on UncompiledData rather than always linearly
      > searching the SFI list. Also, removes the unused runtime-liveedit.cc file
      > instead of fixing it to support this change.
      > 
      > Bug: chromium:818642
      > Change-Id: I977bcca0dc72903ca476a7079d156cc8bbe88fde
      > Reviewed-on: https://chromium-review.googlesource.com/1128854
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Reviewed-by: Marja Hölttä <marja@chromium.org>
      > Reviewed-by: Camillo Bruni <cbruni@chromium.org>
      > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#54464}
      
      TBR=ulan@chromium.org,marja@chromium.org,yangguo@chromium.org,kozyatinskiy@chromium.org,cbruni@chromium.org,leszeks@chromium.org,verwaest@chromium.org
      
      Change-Id: Icee5ee3ab7688b93e2963f91debed65a58164534
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: chromium:818642
      Reviewed-on: https://chromium-review.googlesource.com/1138276Reviewed-by: 's avatarSigurd Schneider <sigurds@chromium.org>
      Commit-Queue: Sigurd Schneider <sigurds@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54466}
      58578584
    • Leszek Swirski's avatar
      [sfi] Remove SFI function literal id field · 1d4a1172
      Leszek Swirski authored
      SharedFunctionInfos store their original function literal's id. This is
      also their index in the Script's SFI list.
      
      The function literal id is only needed for lazy compilation and live edit,
      and access only has to be fast in the former. So, we can move the SFI
      function literal id field to UncompiledData, and if patching with live
      edit, or discarding compiled code, we can perform a slower linear search
      through the Script's SFI list.
      
      This is a reland of
      https://chromium-review.googlesource.com/c/v8/v8/+/1082480
      but caching the literal id on UncompiledData rather than always linearly
      searching the SFI list. Also, removes the unused runtime-liveedit.cc file
      instead of fixing it to support this change.
      
      Bug: chromium:818642
      Change-Id: I977bcca0dc72903ca476a7079d156cc8bbe88fde
      Reviewed-on: https://chromium-review.googlesource.com/1128854Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Reviewed-by: 's avatarMarja Hölttä <marja@chromium.org>
      Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54464}
      1d4a1172
  17. 09 Jul, 2018 2 commits
    • Leszek Swirski's avatar
      [liveedit] Patch changed SFIs' constant pools · 084d472f
      Leszek Swirski authored
      When live edit patches a script, it distinguishes between 'changed' and
      'unchanged' functions, and unchanged functions have their position and
      source script patched to the new script instead of being replaced by a
      new SFI.
      
      However, if a 'changed' function has an inner 'unchanged' function, it
      also holds a pointer to the inner function in its bytecode constant
      pool. This constant pool entry was not being updated for changed
      functions (it was for unchanged), and therefore the outer changed
      function would compile the redundant new function instead of the old,
      patched, unchanged function.
      
      This patch fixes this by patching 'changed' functions' bytecode constant
      pools. This is done by swapping the script and script function list
      position of the old new and old 'unchanged' function, rather than just
      setting the script (and position) on the old one, and using the new
      function (now pointing at the old script) to read off the old function
      literal id. This could also be done by reading the function_literal_id
      off the new function, but we are soon removing that field anyway.
      
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng
      Change-Id: Ib22078c06539c795b418d29a493d8224ecea182e
      Reviewed-on: https://chromium-review.googlesource.com/1127941Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54321}
      084d472f
    • Leszek Swirski's avatar
      [sfi] Replace start/end position with UncompiledData · 39e2d97b
      Leszek Swirski authored
      Add new types for function data for SharedFunctionInfo, for uncompiled
      functions. UncompiledData holds start/end positions, allowing us to
      remove these fields from SFI. Uncompiled functions with pre-parsed
      scope data now hold an UncompiledDataWithScope that has a pointer to
      PreParsedScopeData -- this allows us to also remove the start/end pos
      from PreParsedScopeData.
      
      Bug: chromium:818642
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng
      Change-Id: I56f3c4e62cbf38929babac734a332709f12a8202
      Reviewed-on: https://chromium-review.googlesource.com/1126381
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarMarja Hölttä <marja@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54319}
      39e2d97b
  18. 04 Jul, 2018 1 commit
  19. 03 Jul, 2018 3 commits
    • Alexey Kozyatinskiy's avatar
      Reland "[debug] liveedit in native" · 5505c664
      Alexey Kozyatinskiy authored
      This is a reland of 3dfaf826
      
      Original change's description:
      > [debug] liveedit in native
      >
      > Liveedit step-by-step:
      > 1. calculate diff between old source and new source,
      > 2. map function literals from old source to new source,
      > 3. create new script for new_source,
      > 4. mark literals with changed code as changed, all others as unchanged,
      > 5. check that for changed literals there are no:
      >   - running generators in the heap,
      >   - non droppable frames (e.g. running generator) above them on stack.
      > 6. mark the bottom most frame with changed function as scheduled for
      >    restart if any.
      > 7. for unchanged functions:
      >   - deoptimize,
      >   - remove from cache,
      >   - update source positions,
      >   - move to new script,
      >   - reset feedback information and preparsed scope information if any,
      >   - replace any sfi in constant pool with changed one if any.
      > 8. for changed functions:
      >   - deoptimize
      >   - remove from cache,
      >   - reset feedback information,
      >   - update all links from js functions to old shared with new one.
      > 9. swap scripts.
      >
      > TBR=ulan@chromium.org
      >
      > Bug: v8:7862,v8:5713
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      > Change-Id: I8f6f6156318cc82d6f36d7ebc1c9f7d5f3aa1461
      > Reviewed-on: https://chromium-review.googlesource.com/1105493
      > Reviewed-by: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Reviewed-by: Dmitry Gozman <dgozman@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#54146}
      
      TBR=dgozman@chromium.org
      
      Bug: v8:7862, v8:5713
      Change-Id: I163ed2fd2ca3115ba0de74cb35a6fac9e40fdd94
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Reviewed-on: https://chromium-review.googlesource.com/1124879
      Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54187}
      5505c664
    • Yang Guo's avatar
      Revert "[debug] liveedit in native" · 22594d10
      Yang Guo authored
      This reverts commit 3dfaf826.
      
      Reason for revert: Failures - https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux%20gcc%204.8/20394
      
      Original change's description:
      > [debug] liveedit in native
      > 
      > Liveedit step-by-step:
      > 1. calculate diff between old source and new source,
      > 2. map function literals from old source to new source,
      > 3. create new script for new_source,
      > 4. mark literals with changed code as changed, all others as unchanged,
      > 5. check that for changed literals there are no:
      >   - running generators in the heap,
      >   - non droppable frames (e.g. running generator) above them on stack.
      > 6. mark the bottom most frame with changed function as scheduled for
      >    restart if any.
      > 7. for unchanged functions:
      >   - deoptimize,
      >   - remove from cache,
      >   - update source positions,
      >   - move to new script,
      >   - reset feedback information and preparsed scope information if any,
      >   - replace any sfi in constant pool with changed one if any.
      > 8. for changed functions:
      >   - deoptimize
      >   - remove from cache,
      >   - reset feedback information,
      >   - update all links from js functions to old shared with new one.
      > 9. swap scripts.
      > 
      > TBR=ulan@chromium.org
      > 
      > Bug: v8:7862,v8:5713
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      > Change-Id: I8f6f6156318cc82d6f36d7ebc1c9f7d5f3aa1461
      > Reviewed-on: https://chromium-review.googlesource.com/1105493
      > Reviewed-by: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Reviewed-by: Dmitry Gozman <dgozman@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#54146}
      
      TBR=dgozman@chromium.org,ulan@chromium.org,yangguo@chromium.org,kozyatinskiy@chromium.org
      
      Change-Id: I45df5b6f3abaf29e593c6ac11edefbd0177d0109
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7862, v8:5713
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Reviewed-on: https://chromium-review.googlesource.com/1124159Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Commit-Queue: Yang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54151}
      22594d10
    • Alexey Kozyatinskiy's avatar
      [debug] liveedit in native · 3dfaf826
      Alexey Kozyatinskiy authored
      Liveedit step-by-step:
      1. calculate diff between old source and new source,
      2. map function literals from old source to new source,
      3. create new script for new_source,
      4. mark literals with changed code as changed, all others as unchanged,
      5. check that for changed literals there are no:
        - running generators in the heap,
        - non droppable frames (e.g. running generator) above them on stack.
      6. mark the bottom most frame with changed function as scheduled for
         restart if any.
      7. for unchanged functions:
        - deoptimize,
        - remove from cache,
        - update source positions,
        - move to new script,
        - reset feedback information and preparsed scope information if any,
        - replace any sfi in constant pool with changed one if any.
      8. for changed functions:
        - deoptimize
        - remove from cache,
        - reset feedback information,
        - update all links from js functions to old shared with new one.
      9. swap scripts.
      
      TBR=ulan@chromium.org
      
      Bug: v8:7862,v8:5713
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Change-Id: I8f6f6156318cc82d6f36d7ebc1c9f7d5f3aa1461
      Reviewed-on: https://chromium-review.googlesource.com/1105493Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Reviewed-by: 's avatarDmitry Gozman <dgozman@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54146}
      3dfaf826
  20. 28 Jun, 2018 1 commit
    • Ross McIlroy's avatar
      [sfi] Remove DebugInfo field in SharedFunctionInfo. · c51bcd17
      Ross McIlroy authored
      Merges DebugInfo field into the function_identifier field, storing the function
      identifier in the DebugInfo. Also moves some debugging_hints bits to the SFI flags,
      and others to the DebugInfo. Finally, changes the logic to store debugger patched
      bytecode array on the SFI instead of the DebugInfo, simplifying the logic in the
      InterpreterEntryTrampoline.
      
      BUG=chromium:818642,chromium:783853
      TBR=hpayer@chromium.org
      
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng
      Change-Id: If440080c0f08fac4fb96f5e18dcc0eb9b86d4821
      Reviewed-on: https://chromium-review.googlesource.com/1115819
      Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54081}
      c51bcd17
  21. 25 Jun, 2018 1 commit
  22. 22 Jun, 2018 1 commit
  23. 21 Jun, 2018 2 commits
  24. 20 Jun, 2018 3 commits
  25. 11 Jun, 2018 1 commit
  26. 07 Jun, 2018 1 commit
    • Leszek Swirski's avatar
      Revert "[sfi] Remove SFI function literal id field" · b6888b63
      Leszek Swirski authored
      This reverts commit ceb9c812.
      
      Reason for revert: Tanks compile time
      
      Original change's description:
      > [sfi] Remove SFI function literal id field
      > 
      > SharedFunctionInfos store their original function literal's id. This is
      > also their index in the Script's SFI list.
      > 
      > Since the function literal id is only needed for lazy compilation and live
      > edit, we can calculate it on-the-fly by linear search in the Script SFI list,
      > and save a field on the SFI.
      > 
      > If this regresses compile performance, we could alternatively store the
      > function literal id on the preparsed scope data as future work.
      > 
      > Bug: chromium:818642
      > Change-Id: I5468cea0e115921f1c864d94e567d749a4349882
      > Reviewed-on: https://chromium-review.googlesource.com/1082480
      > Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      > Reviewed-by: Hannes Payer <hpayer@chromium.org>
      > Reviewed-by: Toon Verwaest <verwaest@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#53523}
      
      TBR=hpayer@chromium.org,leszeks@chromium.org,verwaest@chromium.org
      
      # Not skipping CQ checks because original CL landed > 1 day ago.
      
      Bug: chromium:818642
      Bug: chromium:850417
      Change-Id: If2fd21331b7062532c04004a51e705f7e9d0a151
      Reviewed-on: https://chromium-review.googlesource.com/1090494Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#53573}
      b6888b63
  27. 05 Jun, 2018 1 commit
    • Leszek Swirski's avatar
      [sfi] Remove SFI function literal id field · ceb9c812
      Leszek Swirski authored
      SharedFunctionInfos store their original function literal's id. This is
      also their index in the Script's SFI list.
      
      Since the function literal id is only needed for lazy compilation and live
      edit, we can calculate it on-the-fly by linear search in the Script SFI list,
      and save a field on the SFI.
      
      If this regresses compile performance, we could alternatively store the
      function literal id on the preparsed scope data as future work.
      
      Bug: chromium:818642
      Change-Id: I5468cea0e115921f1c864d94e567d749a4349882
      Reviewed-on: https://chromium-review.googlesource.com/1082480
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarHannes Payer <hpayer@chromium.org>
      Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#53523}
      ceb9c812
  28. 01 Jun, 2018 1 commit
  29. 10 Apr, 2018 1 commit
    • Matheus Marchini's avatar
      interpreter: make interpreted frames distinguishable in the native stack · ada64b58
      Matheus Marchini authored
      Before Turbofan/Ignition it was possible to use external profilers to
      sample running V8/Node.js processes and generate reports/FlameGraphs
      from that. It's still possible to do so, but non-optimized JavaScript
      functions appear in the stack as InterpreterEntryTrampoline. This commit
      adds a runtime flag which makes interpreted frames visible on the
      process' native stack as distinguishable functions, making the sampled
      data gathered by external profilers such as Linux perf and DTrace more
      useful.
      
      R=bmeurer@google.com, franzih@google.com, jarin@google.com, yangguo@google.com
      
      Bug: v8:7155
      Change-Id: I3dc8876aa3cd9f1b9766624842a7cc354ccca415
      Reviewed-on: https://chromium-review.googlesource.com/959081
      Commit-Queue: Yang Guo <yangguo@chromium.org>
      Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#52533}
      ada64b58
  30. 06 Apr, 2018 1 commit
  31. 22 Mar, 2018 1 commit
    • Leszek Swirski's avatar
      Reland^2: Remove SFI code field · 51ded9d3
      Leszek Swirski authored
      This is a reland of d8f564ea
      
      TBR=mstarzinger@chromium.org,yangguo@chromium.org,jgruber@chromium.org
      
      Original change's description:
      > Reland: Remove SFI code field
      >
      > Remove the SharedFunctionInfo code field, inferring the code object
      > from the function_data field instead. In some cases, the function_data
      > field can now hold a Code object (e.g. some WASM cases).
      >
      > (Reland of https://chromium-review.googlesource.com/952452)
      >
      > TBR=mstarzinger@chromium.org
      >
      > Bug: chromium:783853
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng
      > Change-Id: I10ea5be7ceed1b51362a2fad9be7397624d69343
      > Reviewed-on: https://chromium-review.googlesource.com/970649
      > Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
      > Reviewed-by: Leszek Swirski <leszeks@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#52136}
      
      Bug: chromium:783853
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Change-Id: I5187851b923e9a92f43daf8cb99e662786cbb839
      Reviewed-on: https://chromium-review.googlesource.com/975942
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#52159}
      51ded9d3