Add first benchmark
Summary: Implement some very basic benchmarking infra. We need benchmarks in css-layout and I want to add something now so that others have the option to follow an example when implementing a benchmark. Reviewed By: lucasr Differential Revision: D3648889 fbshipit-source-id: 60b93c6e5ed027a37195a9a5d86e681e3e79a5b9
This commit is contained in:
committed by
Facebook Github Bot 2
parent
a0805d0b90
commit
c72321f8a9
12
BUCK
12
BUCK
@@ -33,6 +33,18 @@ cxx_library(
|
||||
visibility = ['PUBLIC'],
|
||||
)
|
||||
|
||||
cxx_binary(
|
||||
name = 'benchmark',
|
||||
srcs = glob(['benchmarks/*.c']),
|
||||
headers = subdir_glob([('', 'benchmarks/*.h')]),
|
||||
header_namespace = '',
|
||||
compiler_flags = COMPILER_FLAGS,
|
||||
deps = [
|
||||
':CSSLayout',
|
||||
],
|
||||
visibility = ['PUBLIC'],
|
||||
)
|
||||
|
||||
cxx_library(
|
||||
name = 'CSSLayoutTestUtils',
|
||||
srcs = glob(['tests/CSSLayoutTestUtils/*.c']),
|
||||
|
31
benchmarks/CSSBenchmark.c
Normal file
31
benchmarks/CSSBenchmark.c
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#include "CSSBenchmark.h"
|
||||
|
||||
#include <CSSLayout/CSSLayout.h>
|
||||
|
||||
CSS_BENCHMARKS({
|
||||
|
||||
CSS_BENCHMARK("Stack with flex", {
|
||||
CSSNodeRef root = CSSNodeNew();
|
||||
CSSNodeStyleSetWidth(root, 100);
|
||||
CSSNodeStyleSetHeight(root, 100);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
CSSNodeRef child = CSSNodeNew();
|
||||
CSSNodeStyleSetHeight(child, 20);
|
||||
CSSNodeStyleSetFlex(child, 1);
|
||||
CSSNodeInsertChild(root, child, 0);
|
||||
}
|
||||
|
||||
CSSNodeCalculateLayout(root, 100, 100, CSSDirectionLTR);
|
||||
});
|
||||
|
||||
});
|
43
benchmarks/CSSBenchmark.h
Normal file
43
benchmarks/CSSBenchmark.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#ifndef __CSS_BENCHMARK_H
|
||||
#define __CSS_BENCHMARK_H
|
||||
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define NUM_REPETITIONS 100000
|
||||
|
||||
#define CSS_BENCHMARKS(BLOCK) \
|
||||
int main(int argc, char const *argv[]) { \
|
||||
clock_t __start; \
|
||||
clock_t __end; \
|
||||
{ \
|
||||
BLOCK \
|
||||
} \
|
||||
return 0; \
|
||||
}
|
||||
|
||||
#define CSS_BENCHMARK(NAME, BLOCK) \
|
||||
__start = clock(); \
|
||||
for (int __i = 0; __i < NUM_REPETITIONS; __i++) { BLOCK } \
|
||||
__end = clock(); \
|
||||
__printBenchmarkResult(NAME, __start, __end);
|
||||
|
||||
void __printBenchmarkResult(char *name, clock_t start, clock_t end) {
|
||||
float total = (end - start) / (double) CLOCKS_PER_SEC * 1000;
|
||||
float mean = total / NUM_REPETITIONS;
|
||||
printf("%s: ", name);
|
||||
printf("%lf ms", mean);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user