1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file.
4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/test/perf_log.h"
6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/files/file_util.h"
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/logging.h"
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace base {
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)static FILE* perf_log_file = NULL;
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)bool InitPerfLog(const FilePath& log_file) {
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (perf_log_file) {
16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // trying to initialize twice
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    NOTREACHED();
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return false;
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  perf_log_file = OpenFile(log_file, "w");
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return perf_log_file != NULL;
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void FinalizePerfLog() {
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (!perf_log_file) {
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // trying to cleanup without initializing
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    NOTREACHED();
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return;
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::CloseFile(perf_log_file);
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void LogPerfResult(const char* test_name, double value, const char* units) {
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (!perf_log_file) {
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    NOTREACHED();
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return;
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  fprintf(perf_log_file, "%s\t%g\t%s\n", test_name, value, units);
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  printf("%s\t%g\t%s\n", test_name, value, units);
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  fflush(stdout);
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace base
46