100 lines
2.3 KiB
C
100 lines
2.3 KiB
C
|
// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
|
||
|
// reserved. Use of this source code is governed by a BSD-style license that
|
||
|
// can be found in the LICENSE file.
|
||
|
|
||
|
#ifndef CEF_TESTS_CEFCLIENT_PERFORMANCE_TEST_SETUP_H_
|
||
|
#define CEF_TESTS_CEFCLIENT_PERFORMANCE_TEST_SETUP_H_
|
||
|
#pragma once
|
||
|
|
||
|
#include "cefclient/util.h"
|
||
|
|
||
|
namespace performance_test {
|
||
|
|
||
|
// Default number of iterations.
|
||
|
extern const size_t kDefaultIterations;
|
||
|
|
||
|
// Test name.
|
||
|
#define PERF_TEST_NAME(name) PerfTest##name
|
||
|
|
||
|
// Entry in test array.
|
||
|
#define PERF_TEST_ENTRY_EX(name, iterations) \
|
||
|
{ #name, PERF_TEST_NAME(name), iterations }
|
||
|
#define PERF_TEST_ENTRY(name) PERF_TEST_ENTRY_EX(name, kDefaultIterations)
|
||
|
|
||
|
// Test function declaration.
|
||
|
#define PERF_TEST_RESULT int64
|
||
|
#define PERF_TEST_PARAM_ITERATIONS iterations
|
||
|
#define PERF_TEST_PARAMS size_t PERF_TEST_PARAM_ITERATIONS
|
||
|
#define PERF_TEST_FUNC(name) \
|
||
|
PERF_TEST_RESULT PERF_TEST_NAME(name)(PERF_TEST_PARAMS)
|
||
|
|
||
|
// Typedef for test pointers.
|
||
|
typedef PERF_TEST_RESULT(PerfTest(PERF_TEST_PARAMS));
|
||
|
|
||
|
class CefTimer {
|
||
|
public:
|
||
|
CefTimer() : running_(false) {
|
||
|
}
|
||
|
|
||
|
bool IsRunning() { return running_; }
|
||
|
|
||
|
void Start() {
|
||
|
ASSERT(!running_);
|
||
|
running_ = true;
|
||
|
start_.Now();
|
||
|
}
|
||
|
|
||
|
void Stop() {
|
||
|
stop_.Now();
|
||
|
ASSERT(running_);
|
||
|
running_ = false;
|
||
|
}
|
||
|
|
||
|
int64 Delta() {
|
||
|
ASSERT(!running_);
|
||
|
return start_.Delta(stop_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
bool running_;
|
||
|
CefTime start_;
|
||
|
CefTime stop_;
|
||
|
};
|
||
|
|
||
|
// Peform test iterations using a user-provided timing result variable.
|
||
|
#define PERF_ITERATIONS_START_EX() \
|
||
|
{ \
|
||
|
CefTimer _timer; \
|
||
|
_timer.Start(); \
|
||
|
for (size_t _i = 0; _i < PERF_TEST_PARAM_ITERATIONS; ++_i) {
|
||
|
|
||
|
#define PERF_ITERATIONS_END_EX(result) \
|
||
|
} \
|
||
|
_timer.Stop(); \
|
||
|
result = _timer.Delta(); \
|
||
|
}
|
||
|
|
||
|
// Perform test iterations and return the timing result.
|
||
|
#define PERF_ITERATIONS_START() \
|
||
|
int64 _result = 0; \
|
||
|
PERF_ITERATIONS_START_EX()
|
||
|
|
||
|
#define PERF_ITERATIONS_END() \
|
||
|
PERF_ITERATIONS_END_EX(_result) \
|
||
|
return _result;
|
||
|
|
||
|
// Perf test entry structure.
|
||
|
struct PerfTestEntry {
|
||
|
const char* name;
|
||
|
PerfTest* test;
|
||
|
size_t iterations;
|
||
|
};
|
||
|
|
||
|
// Array of perf tests.
|
||
|
extern const PerfTestEntry kPerfTests[];
|
||
|
extern const size_t kPerfTestsCount;
|
||
|
|
||
|
} // namespace performance_test
|
||
|
|
||
|
#endif // CEF_TESTS_CEFCLIENT_PERFORMANCE_TEST_H_
|