public synchronized void startRequest()
    {
        lastRequestStart = ticker.read();
    }
@Test
    public void testStartRequest()
    {
        TestingTicker ticker = new TestingTicker();
        ticker.increment(1, NANOSECONDS);

        Backoff backoff = new Backoff(1, new Duration(15, SECONDS), ticker, ImmutableList.of(new Duration(10, MILLISECONDS)));
        ticker.increment(10, MICROSECONDS);

        assertFalse(backoff.failure());
        assertEquals(backoff.getFailureCount(), 1);
        assertEquals(backoff.getFailureDuration().roundTo(SECONDS), 0);
        assertEquals(backoff.getFailureRequestTimeTotal().roundTo(SECONDS), 0);

        ticker.increment(7, SECONDS);
        backoff.startRequest();
        ticker.increment(7, SECONDS);

        assertFalse(backoff.failure());
        assertEquals(backoff.getFailureCount(), 2);
        assertEquals(backoff.getFailureDuration().roundTo(SECONDS), 14);
        // failed request took 7 seconds.
        assertEquals(backoff.getFailureRequestTimeTotal().roundTo(SECONDS), 7);

        ticker.increment(1, SECONDS);
        backoff.startRequest();
        ticker.increment(1, SECONDS);

        assertTrue(backoff.failure());
        assertEquals(backoff.getFailureCount(), 3);
        assertEquals(backoff.getFailureDuration().roundTo(SECONDS), 16);
        // failed requests took 7+1 seconds.
        assertEquals(backoff.getFailureRequestTimeTotal().roundTo(SECONDS), 8);
    }