1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import time
6
7
8class PageRunnerRepeatState(object):
9  def __init__(self, repeat_options):
10    self.pageset_start_time = None
11    self.pageset_iters = None
12    self.page_start_time = None
13    self.page_iters = None
14
15    self.options = repeat_options
16
17  def WillRunPage(self):
18    """Runs before we start repeating a page"""
19    self.page_start_time = time.time()
20    self.page_iters = 0
21
22  def WillRunPageSet(self):
23    """Runs before we start repeating a pageset"""
24    self.pageset_start_time = time.time()
25    self.pageset_iters = 0
26
27  def DidRunPage(self):
28    """Runs after each completion of a page iteration"""
29    self.page_iters += 1
30
31  def DidRunPageSet(self):
32    """Runs after each completion of a pageset iteration"""
33    self.pageset_iters += 1
34
35  def ShouldRepeatPageSet(self):
36    """Returns True if we need to repeat this pageset more times"""
37    if (self.options.pageset_repeat_secs and
38        time.time() - self.pageset_start_time >
39          self.options.pageset_repeat_secs):
40      return False
41    elif (not self.options.pageset_repeat_secs and
42          self.pageset_iters >= self.options.pageset_repeat_iters):
43      return False
44    return True
45
46  def ShouldRepeatPage(self):
47    """Returns True if we need to repeat this page more times"""
48    if (self.options.page_repeat_secs and
49        time.time() - self.page_start_time > self.options.page_repeat_secs):
50      return False
51    elif (not self.options.page_repeat_secs and
52          self.page_iters >= self.options.page_repeat_iters):
53      return False
54    return True
55