| Index: runtime/vm/counters.h
|
| ===================================================================
|
| --- runtime/vm/counters.h (revision 0)
|
| +++ runtime/vm/counters.h (revision 0)
|
| @@ -0,0 +1,51 @@
|
| +// Copyright (c) 2014, 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_COUNTERS_H_
|
| +#define VM_COUNTERS_H_
|
| +
|
| +#include "platform/assert.h"
|
| +
|
| +namespace dart {
|
| +
|
| +struct Counter {
|
| + Counter() : name(NULL), value(0) {}
|
| + const char* name;
|
| + int64_t value;
|
| +};
|
| +
|
| +
|
| +// Light-weight stats counters for temporary experiments/debugging.
|
| +// A single statement is enough to add a counter:
|
| +// ...
|
| +// Isolate::Current()->counters()->Increment("allocated", size_in_bytes);
|
| +// ...
|
| +class Counters {
|
| + public:
|
| + Counters() : collision_(false) {}
|
| +
|
| + // Adds 'delta' to the named counter. 'name' must be a literal string.
|
| + void Increment(const char* name, int64_t delta) {
|
| + Counter& counter =
|
| + counters_[reinterpret_cast<uword>(name) & (kSize - 1)];
|
| + if (counter.name != name && counter.name != NULL) {
|
| + collision_ = true;
|
| + }
|
| + counter.name = name;
|
| + counter.value += delta;
|
| + }
|
| +
|
| + // Prints all counters to stderr.
|
| + ~Counters();
|
| +
|
| + private:
|
| + enum { kSize = 1024 };
|
| + COMPILE_ASSERT((0 == (kSize & (kSize - 1)))); // kSize is a power of 2.
|
| + Counter counters_[kSize];
|
| + bool collision_;
|
| +};
|
| +
|
| +} // namespace dart
|
| +
|
| +#endif // VM_COUNTERS_H_
|
|
|