17cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde/*
233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
37cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *
47cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  Use of this source code is governed by a BSD-style license
57cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  that can be found in the LICENSE file in the root of the source
67cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  tree. An additional intellectual property rights grant can be found
77cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  in the file PATENTS.  All contributing project authors may
87cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  be found in the AUTHORS file in the root of the source tree.
97cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde */
107cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
1133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef UNIT_TEST_UNIT_TEST_H_
1233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define UNIT_TEST_UNIT_TEST_H_
137cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
147cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#include <gtest/gtest.h>
157cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
1633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define align_buffer_16(var, size)                                             \
1733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  uint8* var;                                                                  \
1833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  uint8* var##_mem;                                                            \
1933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  var##_mem = reinterpret_cast<uint8*>(malloc((size) + 15));                   \
2033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  var = reinterpret_cast<uint8*>                                               \
2133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp        ((reinterpret_cast<intptr_t>(var##_mem) + 15) & ~15);
2233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define free_aligned_buffer_16(var) \
2433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  free(var##_mem);  \
2533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  var = 0;
2633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define align_buffer_page_end(var, size)                                       \
2933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  uint8* var;                                                                  \
3033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  uint8* var##_mem;                                                            \
3133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  var##_mem = reinterpret_cast<uint8*>(malloc(((size) + 4095) & ~4095));       \
3233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  var = var##_mem + (-(size) & 4095);
3333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
3433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define free_aligned_buffer_page_end(var) \
3533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  free(var##_mem);  \
3633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  var = 0;
3733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
3833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef WIN32
3933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include <windows.h>
4033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampstatic inline double get_time() {
4133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  LARGE_INTEGER t, f;
4233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  QueryPerformanceCounter(&t);
4333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  QueryPerformanceFrequency(&f);
4433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  return static_cast<double>(t.QuadPart) / static_cast<double>(f.QuadPart);
4533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp}
4633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
4733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define random rand
4833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define srandom srand
4933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#else
5033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
5133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include <sys/time.h>
5233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include <sys/resource.h>
5333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
5433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampstatic inline double get_time() {
5533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  struct timeval t;
5633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  struct timezone tzp;
5733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  gettimeofday(&t, &tzp);
5833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  return t.tv_sec + t.tv_usec * 1e-6;
5933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp}
6033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
6133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
627cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordeclass libyuvTest : public ::testing::Test {
637cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde protected:
647cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde  libyuvTest();
657cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
6633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  const int rotate_max_w_;
6733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  const int rotate_max_h_;
687cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
6933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  int benchmark_iterations_;
7033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  const int benchmark_width_;
7133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp  const int benchmark_height_;
727cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde};
737cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
7433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // UNIT_TEST_UNIT_TEST_H_
75