From 359e3878bbb8a2c3addd63a63044dad3a30271b5 Mon Sep 17 00:00:00 2001 From: Andrew Woloszyn Date: Tue, 27 Feb 2018 09:02:58 -0500 Subject: [PATCH] Disable arena tracking in libgapii. This is a significant performance improvement. --- core/memory/arena/BUILD.bazel | 2 +- core/memory/arena/cc/BUILD.bazel | 13 +++++++++++++ core/memory/arena/cc/arena.cpp | 20 ++++++++++++++++++++ gapii/cc/BUILD.bazel | 2 +- gapil/runtime/cc/BUILD.bazel | 20 ++++++++++++++++---- gapil/runtime/cc/runtime.cpp | 5 +++++ 6 files changed, 56 insertions(+), 6 deletions(-) diff --git a/core/memory/arena/BUILD.bazel b/core/memory/arena/BUILD.bazel index 456117d375..f12cb615ae 100644 --- a/core/memory/arena/BUILD.bazel +++ b/core/memory/arena/BUILD.bazel @@ -19,7 +19,7 @@ go_library( srcs = [ "arena.go", ], - cdeps = ["//core/memory/arena/cc"], + cdeps = ["//core/memory/arena/tracking_arena"], cgo = True, clinkopts = [], # keep importpath = "github.com/google/gapid/core/memory/arena", diff --git a/core/memory/arena/cc/BUILD.bazel b/core/memory/arena/cc/BUILD.bazel index 5ce999fc03..790378a06d 100644 --- a/core/memory/arena/cc/BUILD.bazel +++ b/core/memory/arena/cc/BUILD.bazel @@ -24,3 +24,16 @@ cc_library( copts = cc_copts(), visibility = ["//visibility:public"], ) + +cc_library( + name = "tracking_arena", + srcs = glob( + ["*.cpp"], + ), + deps = [ + "//core/cc", + ], + hdrs = glob(["*.h"]), + copts = cc_copts() + ["-DTRACK_ALLOCATIONS"], + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core/memory/arena/cc/arena.cpp b/core/memory/arena/cc/arena.cpp index 72ce29471a..38705f82ea 100644 --- a/core/memory/arena/cc/arena.cpp +++ b/core/memory/arena/cc/arena.cpp @@ -44,46 +44,66 @@ namespace core { Arena::Arena() {} Arena::~Arena() { +#ifdef TRACK_ALLOCATIONS for (void* ptr : allocations) { ::free(ptr); } allocations.clear(); +#endif } void* Arena::allocate(uint32_t size, uint32_t align) { void* ptr = malloc(size); // TODO: alignment +#ifdef TRACK_ALLOCATIONS allocations.insert(ptr); +#endif return ptr; } void* Arena::reallocate(void* ptr, uint32_t size, uint32_t align) { GAPID_ASSERT_MSG(this->owns(ptr), "ptr: %p", ptr); void* newptr = realloc(ptr, size); // TODO: alignment +#ifdef TRACK_ALLOCATIONS allocations.erase(ptr); allocations.insert(newptr); +#endif return newptr; } void Arena::free(void* ptr) { GAPID_ASSERT_MSG(this->owns(ptr), "ptr: %p", ptr); +#ifdef TRACK_ALLOCATIONS allocations.erase(ptr); +#endif ::free(ptr); } bool Arena::owns(void* ptr) { +#ifdef TRACK_ALLOCATIONS return allocations.count(ptr) == 1; +#else + return true; +#endif } size_t Arena::num_allocations() const { +#ifdef TRACK_ALLOCATIONS return allocations.size(); +#else + return 0; +#endif } size_t Arena::num_bytes_allocated() const { +#ifdef TRACK_ALLOCATIONS size_t bytes = 0; for (void* ptr : allocations) { bytes += alloc_size(ptr); } return bytes; +#else + return 0; +#endif } } // namespace core diff --git a/gapii/cc/BUILD.bazel b/gapii/cc/BUILD.bazel index 2e7e1405d0..d7d1a343d0 100644 --- a/gapii/cc/BUILD.bazel +++ b/gapii/cc/BUILD.bazel @@ -142,7 +142,7 @@ cc_library( "//core/memory/arena/cc", "//core/memory_tracker/cc", "//core/os/device/deviceinfo/cc", - "//gapil/runtime/cc", + "//gapil/runtime/cc:cc", "//gapis/api:api_cc_proto", "//gapis/api/gles/gles_pb:gles_pb_cc_proto", "//gapis/api/gvr/gvr_pb:gvr_pb_cc_proto", diff --git a/gapil/runtime/cc/BUILD.bazel b/gapil/runtime/cc/BUILD.bazel index 50db7853b9..1ed7f52a23 100644 --- a/gapil/runtime/cc/BUILD.bazel +++ b/gapil/runtime/cc/BUILD.bazel @@ -19,13 +19,25 @@ cc_library( hdrs = glob(["*.h"]), copts = cc_copts(), visibility = ["//visibility:public"], +) + +cc_library( + name = "cc", + srcs = [ + "runtime.cpp", + "string.cpp", + ], + hdrs = glob(["*.inc"]), + copts = cc_copts(), + visibility = ["//visibility:public"], deps = [ - "//core/memory/arena/cc", + ":headers", + "//core/memory/arena/cc:cc", ], ) cc_library( - name = "cc", + name = "test_cc", srcs = [ "runtime.cpp", "string.cpp", @@ -35,7 +47,7 @@ cc_library( visibility = ["//visibility:public"], deps = [ ":headers", - "//core/memory/arena/cc", + "//core/memory/arena/cc:tracking_arena", ], ) @@ -53,7 +65,7 @@ cc_test( "//conditions:default": [], }), deps = [ - ":cc", + ":test_cc", "@gtest//:gtest_main", ] ) \ No newline at end of file diff --git a/gapil/runtime/cc/runtime.cpp b/gapil/runtime/cc/runtime.cpp index f850ca0c99..787c5cf8b3 100644 --- a/gapil/runtime/cc/runtime.cpp +++ b/gapil/runtime/cc/runtime.cpp @@ -22,6 +22,11 @@ #include #include +#if TARGET_OS == GAPID_OS_ANDROID +// for snprintf +#include +#endif + #define __STDC_FORMAT_MACROS #include