// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FLUTTER_RUNTIME_DART_VM_INITIALIZER_H_
#define FLUTTER_RUNTIME_DART_VM_INITIALIZER_H_

#include "third_party/dart/runtime/include/dart_api.h"
#include "third_party/dart/runtime/include/dart_tools_api.h"

class DartVMInitializer {
 public:
  static void Initialize(Dart_InitializeParams* params,
                         bool enable_timeline_event_handler,
                         bool trace_systrace);
  static void Cleanup();

 private:
  static void LogDartTimelineEvent(const char* label,
                                   int64_t timestamp0,
                                   int64_t timestamp1_or_async_id,
                                   Dart_Timeline_Event_Type type,
                                   intptr_t argument_count,
                                   const char** argument_names,
                                   const char** argument_values);
};

#endif  // FLUTTER_RUNTIME_DART_VM_INITIALIZER_H_
