blob: 70955f5d3a4ab2e443df261d0c0c7d5ef9a2f7d2 [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
Utility functions used to generate info used by the bots.
TODO(eyaich): Remove once we no longer generate the list of benchmarks to
run on the perf waterfall in telemetry.
"""
import hashlib
def GetDeviceAffinity(num_shards, base_name):
# Based on the current timings, we shift the result of the hash function to
# achieve better load balancing. Those shift values are to be revised when
# necessary. The shift value is calculated such that the total cycle time
# is minimized.
hash_shift = {
2 : 47, # for old desktop configurations with 2 slaves
5 : 56, # for new desktop configurations with 5 slaves
21 : 43 # for Android 3 slaves 7 devices configurations
}
shift = hash_shift.get(num_shards, 0)
base_name_hash = hashlib.sha1(base_name).hexdigest()
device_affinity = (int(base_name_hash, 16) >> shift) % num_shards
return device_affinity