Ejemplo n.º 1
0
    def __setitem__(self, uri: str, benchmark: Benchmark):
        """Add benchmark to cache."""
        # Remove any existing value to keep the cache size consistent.
        if uri in self._benchmarks:
            self._size_in_bytes -= self._benchmarks[uri].ByteSize()
            del self._benchmarks[uri]

        size = benchmark.ByteSize()
        if self.size_in_bytes + size > self.max_size_in_bytes:
            if size > self.max_size_in_bytes:
                logger.warning(
                    "Adding new benchmark with size %d bytes exceeds total "
                    "target cache size of %d bytes",
                    size,
                    self.max_size_in_bytes,
                )
            else:
                logger.debug(
                    "Adding new benchmark with size %d bytes "
                    "exceeds maximum size %d bytes, %d items",
                    size,
                    self.max_size_in_bytes,
                    self.size,
                )
            self.evict_to_capacity()

        self._benchmarks[uri] = benchmark
        self._size_in_bytes += size

        logger.debug(
            "Cached benchmark %s. Cache size = %d bytes, %d items",
            uri,
            self.size_in_bytes,
            self.size,
        )
def make_benchmark_of_size(size_in_bytes: int, target: int = 0) -> Benchmark:
    """Test helper. Generate a benchmark of the given size in bytes."""
    target = target or size_in_bytes
    bm = Benchmark(program=File(contents=("." * target).encode("utf-8")))
    size_offset = bm.ByteSize() - size_in_bytes
    if size_offset:
        return make_benchmark_of_size(size_in_bytes, size_in_bytes - size_offset)
    return bm