// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_VM_MALLOC_HOOKS_H_
#define RUNTIME_VM_MALLOC_HOOKS_H_

#include "vm/allocation.h"
#include "vm/globals.h"

namespace dart {

class JSONObject;
class Sample;

// The number of frames that are generated by the malloc hooks and collection
// of the stack trace. These frames are ignored when collecting the stack
// trace for a memory allocation. If this number is incorrect, some tests in
// malloc_hook_tests.cc might fail, particularily
// StackTraceMallocHookLengthTest. If this value is updated, please make sure
// that the MallocHooks test cases pass on all platforms.
extern const intptr_t kSkipCount;

class MallocHooks : public AllStatic {
 public:
  static void InitOnce();
  static void TearDown();
  static bool ProfilingEnabled();
  static bool stack_trace_collection_enabled();
  static void set_stack_trace_collection_enabled(bool enabled);
  static void ResetStats();
  static bool Active();
  static void PrintToJSONObject(JSONObject* jsobj);
  static Sample* GetSample(const void* ptr);

  static intptr_t allocation_count();
  static intptr_t heap_allocated_memory_in_bytes();
};

}  // namespace dart

#endif  // RUNTIME_VM_MALLOC_HOOKS_H_
