Add heap-profiling script
This commit is contained in:
parent
908b102786
commit
533aaa462b
2 changed files with 76 additions and 0 deletions
34
script/heap-profile
Executable file
34
script/heap-profile
Executable file
|
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Usage:
|
||||
# script/heap-profile
|
||||
#
|
||||
# Parse an example source file and record memory usage
|
||||
#
|
||||
# Dependencies:
|
||||
# * `pprof` executable: https://github.com/google/pprof
|
||||
# * `gperftools` package: https://github.com/gperftools/gperftools
|
||||
|
||||
set -e
|
||||
|
||||
GRAMMARS_DIR=$PWD/test/fixtures/grammars
|
||||
|
||||
# Build the library
|
||||
make
|
||||
|
||||
# Build the heap-profiling harness
|
||||
clang++ \
|
||||
-I lib/include \
|
||||
-I $GRAMMARS_DIR \
|
||||
-D GRAMMARS_DIR=\"${GRAMMARS_DIR}/\" \
|
||||
-l tcmalloc \
|
||||
./libtree-sitter.a \
|
||||
test/profile/heap.cc \
|
||||
-o target/heap-profile
|
||||
|
||||
# Run the harness with heap profiling enabled.
|
||||
export HEAPPROFILE=$PWD/profile
|
||||
target/heap-profile $@
|
||||
|
||||
# Extract statistics using pprof.
|
||||
pprof -top -cum profile.0001.heap
|
||||
42
test/profile/heap.cc
Normal file
42
test/profile/heap.cc
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
#include <fstream>
|
||||
#include <string>
|
||||
#include <cstdlib>
|
||||
#include <tree_sitter/api.h>
|
||||
|
||||
extern "C" {
|
||||
#include "javascript/src/parser.c"
|
||||
#include "javascript/src/scanner.c"
|
||||
}
|
||||
|
||||
#define LANGUAGE tree_sitter_javascript
|
||||
#define SOURCE_PATH "javascript/examples/jquery.js"
|
||||
|
||||
int main() {
|
||||
TSParser *parser = ts_parser_new();
|
||||
if (!ts_parser_set_language(parser, LANGUAGE())) {
|
||||
fprintf(stderr, "Invalid language\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
const char *source_path = GRAMMARS_DIR SOURCE_PATH;
|
||||
|
||||
printf("Parsing %s\n", source_path);
|
||||
|
||||
std::ifstream source_file(source_path);
|
||||
if (!source_file.good()) {
|
||||
fprintf(stderr, "Invalid source path %s\n", source_path);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
std::string source_code(
|
||||
(std::istreambuf_iterator<char>(source_file)),
|
||||
std::istreambuf_iterator<char>()
|
||||
);
|
||||
|
||||
TSTree *tree = ts_parser_parse_string(
|
||||
parser,
|
||||
NULL,
|
||||
source_code.c_str(),
|
||||
source_code.size()
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue