dart-sdk/runtime/vm/scope_timer.h
Vyacheslav Egorov 34add230f6 [vm/compiler] Add --print-precompiler-timings
This flag allows dumping timings of various precompiler passes.

TEST=precompiled dart2js with --print-precompiler-timings

Change-Id: I54d6fdf26c25a0e43ae4f2717e833e09e9321d81
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/198407
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2021-05-11 11:15:53 +00:00

51 lines
1.2 KiB
C++

// Copyright (c) 2015, 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_SCOPE_TIMER_H_
#define RUNTIME_VM_SCOPE_TIMER_H_
#include "platform/allocation.h"
#include "platform/globals.h"
#include "vm/os.h"
namespace dart {
// Simple utility class for timing a block of code.
class ScopeTimer : public ValueObject {
public:
explicit ScopeTimer(const char* name, bool enabled = true)
: enabled_(enabled), name_(name), start_(0) {
if (!enabled_) {
return;
}
start_ = OS::GetCurrentMonotonicMicros();
}
int64_t GetElapsed() const {
int64_t end = OS::GetCurrentMonotonicMicros();
ASSERT(end >= start_);
return end - start_;
}
~ScopeTimer() {
if (!enabled_) {
return;
}
int64_t elapsed = GetElapsed();
double seconds = MicrosecondsToSeconds(elapsed);
OS::PrintErr("%s: %.2f seconds (%" Pd64 " \u00B5s)\n", name_, seconds,
elapsed);
}
private:
const bool enabled_;
const char* name_;
int64_t start_;
};
} // namespace dart
#endif // RUNTIME_VM_SCOPE_TIMER_H_