普通文本  |  72行  |  1.76 KB

#!/usr/bin/env python
# Copyright 2015 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.

import json
import logging
import multiprocessing
import sys
import time

import buildbot


MASTER_NAME = 'chromium.perf'
BUILDER_NAMES = ('Win 7 Perf (1)', 'Mac 10.9 Perf (1)')
BENCHMARK_NAME = 'smoothness.top_25_smooth'
VALUE_NAME = 'frame_times'

BUILD_COUNT = 100


def QueryBuild(build):
  steps = build.steps
  if not BENCHMARK_NAME in steps:
    return None

  step = steps[BENCHMARK_NAME]
  if step.result != buildbot.SUCCESS:
    return None

  revision_data = []
  trace_results = step.results['chart_data']['charts'][VALUE_NAME].iteritems()
  for user_story_name, user_story_data in trace_results:
    revision_data.append({
        'user_story': user_story_name,
        'start_time': step.start_time,
        'end_time': step.end_time,
        'values': user_story_data['values'],
    })
  return {
      'start_time': build.start_time,
      'end_time': build.end_time,
      'user_story_runs': revision_data,
  }


def QueryBuilds(builder):
  return map(QueryBuild, builder.LastBuilds(BUILD_COUNT))


def main():
  logging.getLogger().setLevel(logging.INFO)

  builders = buildbot.Builders(MASTER_NAME)
  process_pool = multiprocessing.Pool(8)

  start_time = time.time()
  data = process_pool.map(QueryBuilds,
                          (builders[name] for name in BUILDER_NAMES))
  data = dict(zip(BUILDER_NAMES, data))
  logging.info('Queried %d builds in %2.2f seconds.',
               BUILD_COUNT, time.time() - start_time)

  start_time = time.time()
  json.dump(data, sys.stdout)
  logging.info('Wrote data in %2.2f seconds.', time.time() - start_time)


if __name__ == '__main__':
  main()