<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 25/10/2013 06:42, David Blaikie wrote:<br>
    <blockquote
cite="mid:CAENS6Evr9rJ2pzYjBBTgRrZ=nty5rpCqNK1fu3QeB8hT_dzf0A@mail.gmail.com"
      type="cite">
      <div dir="ltr">Sounds interesting (& lighter weight than a
        full code coverage/dependency based solution).</div>
    </blockquote>
    <br>
    Interesting you mention using a dependency graph because that's
    exactly what I tried first, using ninja internals directly for the
    stat cache.<br>
    <br>
    This ended up being pretty custom: making a libninja shared library,
    writing a C ninja API and accessing it from Python as a subtool. It
    worked but ultimately led to this simpler solution achieving more or
    less the same thing.<br>
    <br>
    <blockquote
cite="mid:CAENS6Evr9rJ2pzYjBBTgRrZ=nty5rpCqNK1fu3QeB8hT_dzf0A@mail.gmail.com"
      type="cite">
      <div dir="ltr">How does this interact with Ninja's functionality
        of caching the whole output of a command before printing? Are
        you working around that in some way?</div>
    </blockquote>
    <br>
    Running llvm-lit directly instead of the ninja check target get
    around that :-\<br>
    <br>
    (I guess the solution on the ninja side, short of pushing the
    libninja features upstream, would be to implement a pool flag that
    permits live stderr output for depth = 1)<br>
    <br>
    Alp.<br>
    <br>
    <br>
    <blockquote
cite="mid:CAENS6Evr9rJ2pzYjBBTgRrZ=nty5rpCqNK1fu3QeB8hT_dzf0A@mail.gmail.com"
      type="cite">
      <div class="gmail_extra"><br>
        <br>
        <div class="gmail_quote">On Thu, Oct 24, 2013 at 10:35 PM, Alp
          Toker <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> Incremental testing
              is useful when you're writing code and need to answer
              these questions fast:<br>
              <br>
              <ul>
                <li>Did my recent change fix tests that were previously
                  failing?</li>
                <li>Are the tests I just modified passing?</li>
              </ul>
              <br>
              A standard check-clang run takes around 40 seconds on my
              system, and needs to be run repeatedly while working on a
              new feature or bug fix. Most of that is time spent
              waiting.<br>
              <br>
              With the attached patch, lit instead runs failing and
              recently modified tests first. This way, I'm likely to get
              an answer to both questions in under one second, letting
              me get straight back to fixing the issue.<br>
              <br>
              <b>Workflow</b><b><br>
              </b><br>
              After fixing the code and running lit again, if there are
              still failures at the start I'll usually hit Ctrl-C, try
              to fix the issue and repeat until all failures are
              resolved.<br>
              <br>
              The feature isn't just for local testing -- on our
              internal clang build server, LLVM test failures or fixes
              often get detected within 10 seconds of a commit thanks to
              ccache/cmake/ninja together with this patch.<br>
              <br>
              <b>Performance<br>
                <br>
              </b>The additional ordering overhead and cache updates
              come at a cost of about 2 seconds on top of a 40 second
              run.<br>
              <br>
              So enabling the feature depends on your workflow and
              whether you're able to act upon the early results.<br>
              <br>
              For example, the Buildbot version used on <a
                moz-do-not-send="true" href="http://llvm.org"
                target="_blank">llvm.org</a> doesn't send failure
              notifications until the test run is complete so the
              feature would only be marginally useful there until
              Buildbot gets early notification support.<br>
              <b><br>
                Implementation notes</b><br>
              <br>
              lit shell tests and compiled unit tests are both
              supported. At the moment, the cache is implemented by
              scanning and modifying test source mtimes directly. This
              hasn't caused trouble but the technique could be refined
              in future to store test failures in a separate cache file
              if needed.<br>
              <br>
              <b>Status</b><b><br>
              </b><br>
              Not yet tested on Windows. Let me know if you find this
              useful!<span class="HOEnZb"><font color="#888888"><br>
                  <br>
                  Alp.<br>
                  <br>
                  <pre cols="72">-- 
<a moz-do-not-send="true" href="http://www.nuanti.com" target="_blank">http://www.nuanti.com</a>
the browser experts
</pre>
                </font></span></div>
            <br>
            _______________________________________________<br>
            llvm-commits mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
            <a moz-do-not-send="true"
              href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits"
              target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
<a class="moz-txt-link-freetext" href="http://www.nuanti.com">http://www.nuanti.com</a>
the browser experts
</pre>
  </body>
</html>