// Copyright (c) 2012, 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 VM_PROCCPUINFO_H_
#define VM_PROCCPUINFO_H_

#include "vm/globals.h"
#if defined(TARGET_OS_LINUX) || defined(TARGET_OS_ANDROID)

#include "vm/allocation.h"

namespace dart {

class ProcCpuInfo : public AllStatic {
 public:
  static void InitOnce();
  static void Cleanup();
  static bool FieldContains(const char* field, const char* search_string);
  static const char* ExtractField(const char* field);
  static bool HasField(const char* field);

 private:
  static char* data_;
  static intptr_t datalen_;

  static char* FieldStart(const char* field);
};

}  // namespace dart

#endif  // defined(TARGET_OS_LINUX) || defined(TARGET_OS_ANDROID)

#endif  // VM_PROCCPUINFO_H_
