You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.8 KiB
84 lines
2.8 KiB
# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import datetime
|
|
import math
|
|
import random
|
|
|
|
from autotest_lib.client.cros.video import method_logger
|
|
|
|
|
|
@method_logger.log
|
|
def generate_interval_sequence(start, stop, interval_in_s):
|
|
"""
|
|
Generates a list of timestamps sequence given the configuration.
|
|
|
|
If specified upper limit would coincide as the last value it will be
|
|
included in the list.
|
|
|
|
We use this method when we are capturing golden images for a particular
|
|
video. We would typically specify an interval of a second and then store
|
|
obtained those golden images in a server.
|
|
|
|
@param start: timedelta, start time.
|
|
@param stop: timedelta, stop_time.
|
|
@param interval_in_s: Time gap between two successive timestamps.
|
|
|
|
@returns a list of timedelta values specifying points in time to take a
|
|
screenshot.
|
|
|
|
"""
|
|
|
|
start_total_ms = int(start.total_seconds() * 1000)
|
|
stop_total_ms = int(stop.total_seconds() * 1000)
|
|
interval_total_ms = interval_in_s * 1000
|
|
duration_total_ms = stop_total_ms - start_total_ms
|
|
|
|
if interval_total_ms > duration_total_ms:
|
|
raise ValueError('Interval too large. Duration = %ms, interval = %ms',
|
|
duration_total_ms, interval_total_ms)
|
|
|
|
# xrange is exclusive of upper limit, add 1 second so that we include
|
|
# the stop time
|
|
return [datetime.timedelta(milliseconds=x) for x in
|
|
xrange(start_total_ms,
|
|
stop_total_ms + 1,
|
|
interval_total_ms)]
|
|
|
|
|
|
@method_logger.log
|
|
def generate_random_sequence(start, stop, samples_per_min):
|
|
"""
|
|
Generates a list of random values per given configuration.
|
|
|
|
@param start: timedelta, start time.
|
|
@param stop: timedelta, stop time.
|
|
@param samples_per_min: int, number of values to get per minute.
|
|
|
|
This method exists because we need to capture images at random time
|
|
instances. We need to do that so as to maximize the chance of catching a
|
|
glitch that we wouldn't otherwise catch if we captured in a wrong interval.
|
|
|
|
@returns a list of random values between start and stop as per
|
|
'samples_per_min' configuration.
|
|
|
|
"""
|
|
start_total_s = int(start.total_seconds())
|
|
|
|
stop_total_s = int(stop.total_seconds())
|
|
|
|
duration = stop_total_s - start_total_s
|
|
|
|
# Round up the total number of samples. e.g: 8.5 becomes 9
|
|
|
|
total_num_samples = int(
|
|
math.ceil((samples_per_min * duration) / 60.0))
|
|
|
|
# xrange is exclusive of upper limit, add 1 second so that we include
|
|
# the stop time
|
|
randomized_time_seq = random.sample(xrange(start_total_s, stop_total_s + 1),
|
|
total_num_samples)
|
|
|
|
return [datetime.timedelta(seconds=t) for t in randomized_time_seq]
|