blob: 49b7dc34bcc04bcb289c07d70034c7d72f611229 [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
Austin Schuh745610d2015-09-06 18:19:50 -070049int main() {
50 // We don't do accounting right when using debugallocation.cc, so
51 // turn off the test then. TODO(csilvers): get this working too.
52#ifdef NDEBUG
Brian Silverman20350ac2021-11-17 18:19:55 -080053 static const char kCurrent[] = "generic.current_allocated_bytes";
54
Austin Schuh745610d2015-09-06 18:19:50 -070055 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}