<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - A/B testing"
   href="https://bugs.webkit.org/show_bug.cgi?id=168467">168467</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>A/B testing
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>WebKit
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>WebKit Nightly Build
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>Normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P2
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Web Template Framework
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>webkit-unassigned&#64;lists.webkit.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>jfbastien&#64;apple.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>fpizlo&#64;apple.com, jfbastien&#64;apple.com
          </td>
        </tr>

        <tr>
          <th>Blocks</th>
          <td>168453
          </td>
        </tr></table>
      <p>
        <div>
        <pre>I added a quick A/B test hack in <a class="bz_bug_link 
          bz_status_ASSIGNED "
   title="ASSIGNED - A/B test concurrent GC"
   href="show_bug.cgi?id=168453">bug #168453</a>. We should do this better: factor it out, make it possible to A/B test other things, automatically create the random value, and prevent correlation between decisions.

I'd do the following: template&lt;typename Int&gt; Int abTest(uint32_t uniqueABTestValue, Int minimum, Int maximum);

This returns a value in [minimum, maximum] based on anonymous UUID, and mixes in the unique A/B test value so that each A/B test yields an independent result per user. This is important because users have their own UUID, but we don't want them to all be in the same side of each A/B test! Mixing in a unique A/B test value ensures that each A/B test skews a different way per UUID.

We need to use a simple hash function, so that from crash logs we can reconstruct which A/B test was set, and to which value.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>