blob: eaa6a7be15413be5b364af9cbd29f0a1bf831e05 [file] [log] [blame]
Austin Schuh745610d2015-09-06 18:19:50 -07001// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*-
2// Copyright (c) 2011, Google Inc.
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright
10// notice, this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above
12// copyright notice, this list of conditions and the following disclaimer
13// in the documentation and/or other materials provided with the
14// distribution.
15// * Neither the name of Google Inc. nor the names of its
16// contributors may be used to endorse or promote products derived from
17// this software without specific prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30// ---
31//
32// Author: Craig Silverstein
33
34// This tests the accounting done by tcmalloc. When we allocate and
35// free a small buffer, the number of bytes used by the application
36// before the alloc+free should match the number of bytes used after.
37// However, the internal data structures used by tcmalloc will be
38// quite different -- new spans will have been allocated, etc. This
39// is, thus, a simple test that we account properly for the internal
40// data structures, so that we report the actual application-used
41// bytes properly.
42
43#include "config_for_unittests.h"
44#include <stdlib.h>
45#include <stdio.h>
46#include <gperftools/malloc_extension.h>
47#include "base/logging.h"
48
49const char kCurrent[] = "generic.current_allocated_bytes";
50
51int main() {
52 // We don't do accounting right when using debugallocation.cc, so
53 // turn off the test then. TODO(csilvers): get this working too.
54#ifdef NDEBUG
55 size_t before_bytes, after_bytes;
56 MallocExtension::instance()->GetNumericProperty(kCurrent, &before_bytes);
57 free(malloc(200));
58 MallocExtension::instance()->GetNumericProperty(kCurrent, &after_bytes);
59
60 CHECK_EQ(before_bytes, after_bytes);
61#endif
62 printf("PASS\n");
63 return 0;
64}